Added --unset to delete a privdata field.
This commit is contained in:
parent
37a5c05aba
commit
fc04d0d81d
|
@ -3,6 +3,7 @@ propellor (2.6.0) UNRELEASED; urgency=medium
|
|||
* Replace String type synonym Docker.Image by a data type
|
||||
which allows to specify an image name and an optional tag. (API change)
|
||||
Thanks, Antoine Eiche.
|
||||
* Added --unset to delete a privdata field.
|
||||
|
||||
-- Joey Hess <id@joeyh.name> Tue, 16 Jun 2015 14:49:12 -0400
|
||||
|
||||
|
|
|
@ -71,6 +71,10 @@ and configured in haskell.
|
|||
|
||||
Sets a field of privdata. The content is read in from stdin.
|
||||
|
||||
* propellor --unset field context
|
||||
|
||||
Removes a value from the privdata store.
|
||||
|
||||
* propellor --dump field context
|
||||
|
||||
Outputs the privdata value to stdout.
|
||||
|
|
|
@ -51,6 +51,7 @@ processCmdLine = go =<< getArgs
|
|||
_ -> Spin <$> mapM hostname ps <*> pure Nothing
|
||||
go ("--add-key":k:[]) = return $ AddKey k
|
||||
go ("--set":f:c:[]) = withprivfield f c Set
|
||||
go ("--unset":f:c:[]) = withprivfield f c Unset
|
||||
go ("--dump":f:c:[]) = withprivfield f c Dump
|
||||
go ("--edit":f:c:[]) = withprivfield f c Edit
|
||||
go ("--list-fields":[]) = return ListFields
|
||||
|
@ -94,6 +95,7 @@ defaultMain hostlist = do
|
|||
go _ (Continue cmdline) = go False cmdline
|
||||
go _ Check = return ()
|
||||
go _ (Set field context) = setPrivData field context
|
||||
go _ (Unset field context) = unsetPrivData field context
|
||||
go _ (Dump field context) = dumpPrivData field context
|
||||
go _ (Edit field context) = editPrivData field context
|
||||
go _ ListFields = listPrivDataFields hostlist
|
||||
|
|
|
@ -6,6 +6,7 @@ module Propellor.PrivData (
|
|||
withSomePrivData,
|
||||
addPrivData,
|
||||
setPrivData,
|
||||
unsetPrivData,
|
||||
dumpPrivData,
|
||||
editPrivData,
|
||||
filterPrivData,
|
||||
|
@ -143,6 +144,11 @@ setPrivData field context = do
|
|||
putStrLn "Enter private data on stdin; ctrl-D when done:"
|
||||
setPrivDataTo field context =<< hGetContentsStrict stdin
|
||||
|
||||
unsetPrivData :: PrivDataField -> Context -> IO ()
|
||||
unsetPrivData field context = do
|
||||
modifyPrivData $ M.delete (field, context)
|
||||
putStrLn "Private data unset."
|
||||
|
||||
dumpPrivData :: PrivDataField -> Context -> IO ()
|
||||
dumpPrivData field context =
|
||||
maybe (error "Requested privdata is not set.") putStrLn
|
||||
|
@ -192,17 +198,22 @@ listPrivDataFields hosts = do
|
|||
|
||||
setPrivDataTo :: PrivDataField -> Context -> PrivData -> IO ()
|
||||
setPrivDataTo field context value = do
|
||||
makePrivDataDir
|
||||
m <- decryptPrivData
|
||||
let m' = M.insert (field, context) (chomp value) m
|
||||
gpgEncrypt privDataFile (show m')
|
||||
modifyPrivData set
|
||||
putStrLn "Private data set."
|
||||
void $ boolSystem "git" [Param "add", File privDataFile]
|
||||
where
|
||||
set = M.insert (field, context) (chomp value)
|
||||
chomp s
|
||||
| end s == "\n" = chomp (beginning s)
|
||||
| otherwise = s
|
||||
|
||||
modifyPrivData :: (PrivMap -> PrivMap) -> IO ()
|
||||
modifyPrivData f = do
|
||||
makePrivDataDir
|
||||
m <- decryptPrivData
|
||||
let m' = f m
|
||||
gpgEncrypt privDataFile (show m')
|
||||
void $ boolSystem "git" [Param "add", File privDataFile]
|
||||
|
||||
decryptPrivData :: IO PrivMap
|
||||
decryptPrivData = fromMaybe M.empty . readish <$> gpgDecrypt privDataFile
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ data CmdLine
|
|||
| Spin [HostName] (Maybe HostName)
|
||||
| SimpleRun HostName
|
||||
| Set PrivDataField Context
|
||||
| Unset PrivDataField Context
|
||||
| Dump PrivDataField Context
|
||||
| Edit PrivDataField Context
|
||||
| ListFields
|
||||
|
|
Loading…
Reference in New Issue