summaryrefslogtreecommitdiff
path: root/src/Propellor/CmdLine.hs
diff options
context:
space:
mode:
authorJoey Hess2014-11-22 19:58:35 -0400
committerJoey Hess2014-11-22 19:58:35 -0400
commit9a8fcf80bb026c390ad56da9b70d153fd978d6cf (patch)
treef602233f22d906e7909be4b4aa0d75204bc11861 /src/Propellor/CmdLine.hs
parent95f78a058660701cd7eb182f4d1989da27718c2a (diff)
Hostname parameters not containing dots are looked up in the DNS to find the full hostname.
Diffstat (limited to 'src/Propellor/CmdLine.hs')
-rw-r--r--src/Propellor/CmdLine.hs16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/Propellor/CmdLine.hs b/src/Propellor/CmdLine.hs
index 11193ab3..e808395b 100644
--- a/src/Propellor/CmdLine.hs
+++ b/src/Propellor/CmdLine.hs
@@ -7,6 +7,7 @@ import System.Environment (getArgs)
import Data.List
import System.Exit
import System.PosixCompat
+import qualified Network.BSD
import Propellor
import Propellor.Protocol
@@ -40,9 +41,8 @@ usageError ps = do
processCmdLine :: IO CmdLine
processCmdLine = go =<< getArgs
where
- go ("--run":h:[]) = return $ Run h
- go ("--spin":h:[]) = return $ Spin h Nothing
- go ("--spin":h:"--via":r:[]) = return $ Spin h (Just r)
+ go ("--spin":h:[]) = Spin <$> hostname h <*> pure Nothing
+ go ("--spin":h:"--via":r:[]) = Spin <$> hostname h <*> pure (Just r)
go ("--add-key":k:[]) = return $ AddKey k
go ("--set":f:c:[]) = withprivfield f c Set
go ("--dump":f:c:[]) = withprivfield f c Dump
@@ -56,9 +56,10 @@ processCmdLine = go =<< getArgs
go ("--serialized":s:[]) = serialized Serialized s
go ("--continue":s:[]) = serialized Continue s
go ("--gitpush":fin:fout:_) = return $ GitPush (Prelude.read fin) (Prelude.read fout)
+ go ("--run":h:[]) = go [h]
go (h:[])
| "--" `isPrefixOf` h = usageError [h]
- | otherwise = return $ Run h
+ | otherwise = Run <$> hostname h
go [] = do
s <- takeWhile (/= '\n') <$> readProcess "hostname" ["-f"]
if null s
@@ -210,3 +211,10 @@ spin target relay hst = do
cmd = if viarelay
then "--serialized " ++ shellEscape (show (Spin target (Just target)))
else "--continue " ++ shellEscape (show (SimpleRun target))
+
+hostname :: String -> IO HostName
+hostname s
+ | "." `isInfixOf` s = pure s
+ | otherwise = do
+ h <- Network.BSD.getHostByName s
+ return (Network.BSD.hostName h)