propellor spin

This commit is contained in:
Joey Hess 2014-04-13 11:58:22 -04:00
parent 6d12630431
commit 456dd534ce
Failed to extract signature
6 changed files with 219 additions and 182 deletions

View File

@ -1,8 +1,10 @@
module Propellor.Property.File where
import Propellor
import Utility.FileMode
import System.Posix.Files
import System.PosixCompat.Types
type Line = String
@ -12,11 +14,15 @@ f `hasContent` newcontent = fileProperty ("replace " ++ f)
(\_oldcontent -> newcontent) f
-- | Ensures a file has contents that comes from PrivData.
-- Note: Does not do anything with the permissions of the file to prevent
-- it from being seen.
--
-- The file's permissions are preserved if the file already existed.
-- Otherwise, they're set to 600.
hasPrivContent :: FilePath -> Property
hasPrivContent f = Property ("privcontent " ++ f) $
withPrivData (PrivFile f) (\v -> ensureProperty $ f `hasContent` lines v)
hasPrivContent f = Property desc $ withPrivData (PrivFile f) $ \privcontent ->
ensureProperty $ fileProperty' writeFileProtected desc
(\_oldcontent -> lines privcontent) f
where
desc = "privcontent " ++ f
-- | Ensures that a line is present in a file, adding it to the end if not.
containsLine :: FilePath -> Line -> Property
@ -38,7 +44,9 @@ notPresent f = check (doesFileExist f) $ Property (f ++ " not present") $
makeChange $ nukeFile f
fileProperty :: Desc -> ([Line] -> [Line]) -> FilePath -> Property
fileProperty desc a f = Property desc $ go =<< liftIO (doesFileExist f)
fileProperty = fileProperty' writeFile
fileProperty' :: (FilePath -> String -> IO ()) -> Desc -> ([Line] -> [Line]) -> FilePath -> Property
fileProperty' writer desc a f = Property desc $ go =<< liftIO (doesFileExist f)
where
go True = do
ls <- liftIO $ lines <$> readFile f
@ -46,13 +54,15 @@ fileProperty desc a f = Property desc $ go =<< liftIO (doesFileExist f)
if ls' == ls
then noChange
else makeChange $ viaTmp updatefile f (unlines ls')
go False = makeChange $ writeFile f (unlines $ a [])
go False = makeChange $ writer f (unlines $ a [])
-- viaTmp makes the temp file mode 600.
-- Replicate the original file mode before moving it into place.
-- Replicate the original file's owner and mode.
updatefile f' content = do
writeFile f' content
getFileStatus f >>= setFileMode f' . fileMode
writer f' content
s <- getFileStatus f
setFileMode f' (fileMode s)
setOwnerAndGroup f' (fileOwner s) (fileGroup s)
-- | Ensures a directory exists.
dirExists :: FilePath -> Property
@ -68,3 +78,9 @@ ownerGroup f owner group = Property (f ++ " owner " ++ og) $ do
else noChange
where
og = owner ++ ":" ++ group
-- | Ensures that a file/dir has the specfied mode.
mode :: FilePath -> FileMode -> Property
mode f v = Property (f ++ " mode " ++ show v) $ do
liftIO $ modifyFileMode f (\_old -> v)
noChange

View File

@ -4,8 +4,10 @@ import Propellor
import qualified Propellor.Property.File as File
import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.Service as Service
import Utility.FileMode
import Data.List
import System.Posix.Files
providerFor :: [UserName] -> String -> Property
providerFor users baseurl = propertyList desc $
@ -16,11 +18,18 @@ providerFor users baseurl = propertyList desc $
(map setbaseurl) "/etc/simpleid/config.inc"
] ++ map identfile users
where
identfile u = File.hasPrivContent $ concat
[ "/var/lib/simpleid/identities/", u, ".identity" ]
url = "http://"++baseurl++"/simpleid"
desc = "openid provider " ++ url
setbaseurl l
| "SIMPLEID_BASE_URL" `isInfixOf` l =
"define('SIMPLEID_BASE_URL', '"++url++"');"
| otherwise = l
identfile u = combineProperties desc
[ File.hasPrivContent f
-- the identitites directory controls access, so open up
-- file mode
, File.mode f (combineModes (ownerWriteMode:readModes))
]
where
f = concat $ [ "/var/lib/simpleid/identities/", u, ".identity" ]

View File

@ -117,6 +117,7 @@ keyImported keytype user = combineProperties desc
fromKeyType :: SshKeyType -> String
fromKeyType SshRsa = "rsa"
fromKeyType SshDsa = "dsa"
fromKeyType SshEcdsa = "ecdsa"
-- | Puts some host's ssh public key into the known_hosts file for a user.
knownHost :: [Host] -> HostName -> UserName -> Property

View File

@ -174,5 +174,5 @@ data PrivDataField
type GpgKeyId = String
data SshKeyType = SshRsa | SshDsa
data SshKeyType = SshRsa | SshDsa | SshEcdsa
deriving (Read, Show, Ord, Eq)

View File

@ -73,6 +73,7 @@ hosts =
& cname "git.kitenet.net"
& Ssh.hostKey SshDsa
& Ssh.hostKey SshRsa
& Ssh.hostKey SshEcdsa
& Obnam.backup "/srv/git" "33 3 * * *"
[ "--repository=sftp://2318@usw-s002.rsync.net/~/git.kitenet.net"
, "--encrypt-with=1B169BE1"
@ -83,15 +84,20 @@ hosts =
`requires` Ssh.knownHost hosts "usw-s002.rsync.net" "root"
`requires` Ssh.authorizedKeys "family"
`requires` User.accountFor "family"
& Apt.installed ["git", "git-annex", "rsync"]
& Apt.installed ["git", "git-annex", "rsync", "kgb-client"]
& Git.daemonRunning "/srv/git"
-- copy wren's ssh host key
-- TODO: upgrade to newer git-annex-shell for notification
-- kgb installation and setup
-- ssh keys for branchable and github repo hooks
-- TODO: upgrade to newer git-annex-shell for notification
-- gitweb
-- downloads.kitenet.net setup (including ssh key to turtle)
& cname "kgb.kitenet.net"
& Apt.serviceInstalledRunning "kbg-bot"
& File.hasPrivContent "/etc/kgb-bot/kgb.conf"
& File.hasPrivContent "/etc/kgb-bot/kgb-client.conf"
& cname "downloads.kitenet.net"
& Apt.buildDep ["git-annex"] `period` Daily
-- downloads.kitenet.net setup (including ssh key to turtle)
-- I don't run this system, so only relevant property is its
-- public key.

View File

@ -1,169 +1,174 @@
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1
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
INladqAQRg==
=U5Y6
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
=ncya
-----END PGP MESSAGE-----