summaryrefslogtreecommitdiff
path: root/src/Propellor
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
parent95f78a058660701cd7eb182f4d1989da27718c2a (diff)
Hostname parameters not containing dots are looked up in the DNS to find the full hostname.
Diffstat (limited to 'src/Propellor')
-rw-r--r--src/Propellor/CmdLine.hs16
-rw-r--r--src/Propellor/Types/OS.hs15
2 files changed, 25 insertions, 6 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)
diff --git a/src/Propellor/Types/OS.hs b/src/Propellor/Types/OS.hs
index 2529e7d8..72e3d764 100644
--- a/src/Propellor/Types/OS.hs
+++ b/src/Propellor/Types/OS.hs
@@ -1,6 +1,17 @@
-module Propellor.Types.OS where
+module Propellor.Types.OS (
+ HostName,
+ UserName,
+ GroupName,
+ System(..),
+ Distribution(..),
+ DebianSuite(..),
+ isStable,
+ Release,
+ Architecture,
+) where
+
+import Network.BSD (HostName)
-type HostName = String
type UserName = String
type GroupName = String