    module Propellor.Property.HostingProvider.DigitalOcean (
    	distroKernel
    ) where

    import Propellor.Base
    import qualified Propellor.Property.Apt as Apt
    import qualified Propellor.Property.File as File
    import qualified Propellor.Property.Reboot as Reboot

    -- | Digital Ocean does not provide any way to boot
    -- the kernel provided by the distribution, except using kexec.
    -- Without this, some old, and perhaps insecure kernel will be used.
    --
    -- This property causes the distro kernel to be loaded on reboot, using kexec.
    --
    -- When the power is cycled, the non-distro kernel still boots up.
    -- So, this property also checks if the running kernel is present in /boot,
    -- and if not, reboots immediately into a distro kernel.
    distroKernel :: Property DebianLike
    distroKernel = propertyList "digital ocean distro kernel hack" $ props
    	& Apt.installed ["grub-pc", "kexec-tools", "file"]
    	& "/etc/default/kexec" `File.containsLines`
    		[ "LOAD_KEXEC=true"
    		, "USE_GRUB_CONFIG=true"
    		] `describe` "kexec configured"
    	& Reboot.toDistroKernel