summaryrefslogtreecommitdiff
path: root/src/Propellor
diff options
context:
space:
mode:
authorJoey Hess2014-11-18 01:01:50 -0400
committerJoey Hess2014-11-18 01:01:50 -0400
commit40f6d06f1a65b3a12adb853ab924e1181b0855b2 (patch)
tree2cc6e4c0460659f92b8e91267ea4583522b52b77 /src/Propellor
parent973025723c0d267c3f65362c5fa640a857b50d62 (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')
-rw-r--r--src/Propellor/CmdLine.hs21
-rw-r--r--src/Propellor/Message.hs8
-rw-r--r--src/Propellor/Types.hs2
3 files changed, 15 insertions, 16 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
diff --git a/src/Propellor/Message.hs b/src/Propellor/Message.hs
index 3671e05b..e184a59e 100644
--- a/src/Propellor/Message.hs
+++ b/src/Propellor/Message.hs
@@ -6,26 +6,20 @@ import System.Console.ANSI
import System.IO
import System.Log.Logger
import "mtl" Control.Monad.Reader
-import Control.Applicative
-import Data.Maybe
import Propellor.Types
import Utility.Monad
-import Utility.Env
data MessageHandle
= ConsoleMessageHandle
| TextMessageHandle
mkMessageHandle :: IO MessageHandle
-mkMessageHandle = ifM (hIsTerminalDevice stdout <||> (isJust <$> getEnv "TERM"))
+mkMessageHandle = ifM (hIsTerminalDevice stdout)
( return ConsoleMessageHandle
, return TextMessageHandle
)
-forceConsoleMode :: IO ()
-forceConsoleMode = void $ setEnv "TERM" "vt100" False
-
whenConsole :: MessageHandle -> IO () -> IO ()
whenConsole ConsoleMessageHandle a = a
whenConsole _ _ = return ()
diff --git a/src/Propellor/Types.hs b/src/Propellor/Types.hs
index b606cef2..b3636eb4 100644
--- a/src/Propellor/Types.hs
+++ b/src/Propellor/Types.hs
@@ -137,7 +137,6 @@ instance ActionResult Result where
data CmdLine
= Run HostName
| Spin HostName
- | Boot HostName
| Set PrivDataField Context
| Dump PrivDataField Context
| Edit PrivDataField Context
@@ -145,5 +144,6 @@ data CmdLine
| AddKey String
| Continue CmdLine
| Chain HostName
+ | Sync
| Docker HostName
deriving (Read, Show, Eq)