Make getFQDN honor vcluster
authorKlaus Aehlig <aehlig@google.com>
Mon, 2 Jun 2014 15:31:10 +0000 (17:31 +0200)
committerKlaus Aehlig <aehlig@google.com>
Fri, 10 Apr 2015 10:59:34 +0000 (12:59 +0200)
Make the official (exported) getFQDN function honor the vcluster
setup. In this way, also Haskell daemons can obtain their name
correctly in a vcluster. In particular, voting will work.

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Petr Pudlak <pudlak@google.com>

Cherry-picked-form: c29501f6
Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Helga Velroyen <helgav@google.com>

src/Ganeti/Daemon.hs

index b17451b..d6a98db 100644 (file)
@@ -307,8 +307,9 @@ parseAddress opts defport = do
 vClusterHostNameEnvVar :: String
 vClusterHostNameEnvVar = "GANETI_HOSTNAME"
 
-getFQDN :: IO String
-getFQDN = do
+-- | Get the real full qualified host name.
+getFQDN' :: IO String
+getFQDN' = do
   hostname <- getHostName
   addrInfos <- Socket.getAddrInfo Nothing (Just hostname) Nothing
   let address = listToMaybe addrInfos >>= (Just . Socket.addrAddress)
@@ -318,17 +319,22 @@ getFQDN = do
       return (fromMaybe hostname fqdn)
     Nothing -> return hostname
 
--- | Returns if the current node is the master node.
-isMaster :: IO Bool
-isMaster = do
+-- | Return the full qualified host name, honoring the vcluster setup.
+getFQDN :: IO String
+getFQDN = do
   let ioErrorToNothing :: IOError -> IO (Maybe String)
       ioErrorToNothing _ = return Nothing
   vcluster_node <- Control.Exception.catch
                      (liftM Just (getEnv vClusterHostNameEnvVar))
                      ioErrorToNothing
-  curNode <- case vcluster_node of
+  case vcluster_node of
     Just node_name -> return node_name
-    Nothing -> getFQDN
+    Nothing -> getFQDN'
+
+-- | Returns if the current node is the master node.
+isMaster :: IO Bool
+isMaster = do
+  curNode <- getFQDN
   masterNode <- Ssconf.getMasterNode Nothing
   case masterNode of
     Ok n -> return (curNode == n)