Hostname parameters not containing dots are looked up in the DNS to find the full hostname.

This commit is contained in:
Joey Hess 2014-11-22 19:58:35 -04:00
parent 95f78a0586
commit 9a8fcf80bb
3 changed files with 27 additions and 6 deletions

2
debian/changelog vendored
View File

@ -6,6 +6,8 @@ propellor (1.0.1) UNRELEASED; urgency=medium
* --spin target --via relay causes propellor to bounce through an
intermediate relay host, which handles any necessary uploads
when provisioning the target host.
* Hostname parameters not containing dots are looked up in the DNS to
find the full hostname.
-- Joey Hess <joeyh@debian.org> Sat, 22 Nov 2014 00:12:35 -0400

View File

@ -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)

View File

@ -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