diff options
| author | Joey Hess <joey@kitenet.net> | 2014-11-18 01:01:50 -0400 |
|---|---|---|
| committer | Joey Hess <joey@kitenet.net> | 2014-11-18 01:01:50 -0400 |
| commit | 40f6d06f1a65b3a12adb853ab924e1181b0855b2 (patch) | |
| tree | 2cc6e4c0460659f92b8e91267ea4583522b52b77 /src/Propellor/CmdLine.hs | |
| parent | 973025723c0d267c3f65362c5fa640a857b50d62 (diff) | |
Run remote propellor --spin with a controlling terminal.
Avoids need for hack to make ansi colors work, but also things like apt-get
and wget process bars will be displayed.
Diffstat (limited to 'src/Propellor/CmdLine.hs')
| -rw-r--r-- | src/Propellor/CmdLine.hs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/Propellor/CmdLine.hs b/src/Propellor/CmdLine.hs index 21c4d95e..3a354098 100644 --- a/src/Propellor/CmdLine.hs +++ b/src/Propellor/CmdLine.hs @@ -41,7 +41,7 @@ processCmdLine = go =<< getArgs where go ("--help":_) = usage go ("--spin":h:[]) = return $ Spin h - go ("--boot":h:[]) = return $ Boot h + go ("--sync":[]) = return $ Sync go ("--add-key":k:[]) = return $ AddKey k go ("--set":f:c:[]) = withprivfield f c Set go ("--dump":f:c:[]) = withprivfield f c Dump @@ -91,7 +91,7 @@ defaultMain hostlist = do ( onlyProcess $ withhost hn mainProperties , go True (Spin hn) ) - go False (Boot hn) = onlyProcess $ withhost hn boot + go False Sync = onlyProcess sync withhost :: HostName -> (Host -> IO ()) -> IO () withhost hn a = maybe (unknownhost hn hostlist) a (findHost hostlist hn) @@ -186,6 +186,8 @@ spin hn hst = do void $ boolSystem "git" [Param "push"] cacheparams <- toCommand <$> sshCachingParams hn go cacheparams url =<< hostprivdata + unlessM (boolSystem "ssh" (map Param (cacheparams ++ ["-t", user, spincmd]))) $ + error "remote propellor failed" where hostprivdata = show . filterPrivData hst <$> decryptPrivData @@ -209,7 +211,9 @@ spin hn hst = do user = "root@"++hn - bootstrapcmd = shellWrap $ intercalate " ; " + mkcmd = shellWrap . intercalate " ; " + + bootstrapcmd = mkcmd [ "if [ ! -d " ++ localdir ++ " ]" , "then " ++ intercalate " && " [ "apt-get update" @@ -219,11 +223,14 @@ spin hn hst = do , "else " ++ intercalate " && " [ "cd " ++ localdir , "if ! test -x ./propellor; then make deps build; fi" - , "./propellor --boot " ++ hn + , "./propellor --sync" ] , "fi" ] + spincmd = mkcmd + [ "cd " ++ localdir ++ " && ./propellor --spin " ++ hn ] + getstatus :: Handle -> IO BootStrapStatus getstatus h = do l <- hGetLine h @@ -295,16 +302,14 @@ fromMarked marker s len = length marker matches = filter (marker `isPrefixOf`) $ lines s -boot :: Host -> IO () -boot h = do +sync :: IO () +sync = do sendMarked stdout statusMarker $ show Ready reply <- hGetContentsStrict stdin makePrivDataDir maybe noop (writeFileProtected privDataLocal) $ fromMarked privDataMarker reply - forceConsoleMode - mainProperties h getUrl :: IO String getUrl = maybe nourl return =<< getM get urls |
