From ecff332f0af01dc49a72175eab4b290bf275a753 Mon Sep 17 00:00:00 2001 From: Thomas Thrainer Date: Tue, 13 Aug 2013 09:50:42 +0200 Subject: [PATCH] Use FQDN to check master node status The master node name in SS conf is stored as FQDN, so also use the FQDN on each node to check if it is the master node. This fixes issue 551. Signed-off-by: Thomas Thrainer Reviewed-by: Guido Trotter --- src/Ganeti/Daemon.hs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Ganeti/Daemon.hs b/src/Ganeti/Daemon.hs index 6f9db4a..ada57eb 100644 --- a/src/Ganeti/Daemon.hs +++ b/src/Ganeti/Daemon.hs @@ -47,7 +47,7 @@ module Ganeti.Daemon import Control.Exception import Control.Monad -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe, listToMaybe) import Data.Word import GHC.IO.Handle (hDuplicateTo) import Network.BSD (getHostName) @@ -297,6 +297,17 @@ parseAddress opts defport = do vClusterHostNameEnvVar :: String vClusterHostNameEnvVar = "GANETI_HOSTNAME" +getFQDN :: IO String +getFQDN = do + hostname <- getHostName + addrInfos <- Socket.getAddrInfo Nothing (Just hostname) Nothing + let address = listToMaybe addrInfos >>= (Just . Socket.addrAddress) + case address of + Just a -> do + fqdn <- liftM fst $ Socket.getNameInfo [] True False a + return (fromMaybe hostname fqdn) + Nothing -> return hostname + -- | Returns if the current node is the master node. isMaster :: IO Bool isMaster = do @@ -307,7 +318,7 @@ isMaster = do ioErrorToNothing curNode <- case vcluster_node of Just node_name -> return node_name - Nothing -> getHostName + Nothing -> getFQDN masterNode <- Ssconf.getMasterNode Nothing case masterNode of Ok n -> return (curNode == n) -- 1.7.10.4