commit a3fad332ea62574cc478b0652de36642a27d3856
Author: Andrea Spadaccini <spadaccio@google.com>
Date:   Thu Sep 29 20:22:22 2011 +0100

    Use deactivate-master-ip in cluster-merge
    
    Use the gnt-cluster deactivate-master-ip command in cluster-merge to
    disable the master IP.
    
    Signed-off-by: Andrea Spadaccini <spadaccio@google.com>
    Reviewed-by: Michael Hanselmann <hansmi@google.com>
    Reviewed-by: Guido Trotter <ultrotter@google.com>
    (cherry picked from commit e87e5afb163a2a51e783914f78120406f6b5f4e0)

diff --git a/tools/cluster-merge b/tools/cluster-merge
index 40bc259..7897e81 100755
--- a/tools/cluster-merge
+++ b/tools/cluster-merge
@@ -40,7 +40,6 @@ from ganeti import constants
 from ganeti import errors
 from ganeti import ssh
 from ganeti import utils
-from ganeti import netutils
 
 
 _GROUPS_MERGE = "merge"
@@ -111,7 +110,7 @@ class MergerData(object):
 
   """
   def __init__(self, cluster, key_path, nodes, instances, master_node,
-               master_ip, config_path=None):
+               config_path=None):
     """Initialize the container.
 
     @param cluster: The name of the cluster
@@ -119,7 +118,6 @@ class MergerData(object):
     @param nodes: List of online nodes in the merging cluster
     @param instances: List of instances running on merging cluster
     @param master_node: Name of the master node
-    @param master_ip: Cluster IP
     @param config_path: Path to the merging cluster config
 
     """
@@ -128,7 +126,6 @@ class MergerData(object):
     self.nodes = nodes
     self.instances = instances
     self.master_node = master_node
-    self.master_ip = master_ip
     self.config_path = config_path
 
 
@@ -221,17 +218,8 @@ class Merger(object):
                                  (cluster, result.fail_reason, result.output))
       master_node = result.stdout.strip()
 
-      path = utils.PathJoin(constants.DATA_DIR, "ssconf_%s" %
-                            constants.SS_MASTER_IP)
-      result = self._RunCmd(cluster, "cat %s" % path, private_key=key_path)
-      if result.failed:
-        raise errors.RemoteError("Unable to retrieve the master IP from"
-                                 " %s. Fail reason: %s; output: %s" %
-                                 (cluster, result.fail_reason, result.output))
-      master_ip = result.stdout.strip()
-
       self.merger_data.append(MergerData(cluster, key_path, nodes, instances,
-                                         master_node, master_ip))
+                                         master_node))
 
   def _PrepareAuthorizedKeys(self):
     """Prepare the authorized_keys on every merging node.
@@ -319,19 +307,9 @@ class Merger(object):
 
     """
     for data in self.merger_data:
-      master_ip_family = netutils.IPAddress.GetAddressFamily(data.master_ip)
-      master_ip_len = netutils.IP4Address.iplen
-      if master_ip_family == netutils.IP6Address.family:
-        master_ip_len = netutils.IP6Address.iplen
-      # Not using constants.IP_COMMAND_PATH because the command might run on a
-      # machine in which the ip path is different, so it's better to rely on
-      # $PATH.
-      cmd = "ip address del %s/%s dev $(cat %s)" % (
-             data.master_ip,
-             master_ip_len,
-             utils.PathJoin(constants.DATA_DIR, "ssconf_%s" %
-                            constants.SS_MASTER_NETDEV))
-      result = self._RunCmd(data.master_node, cmd, max_attempts=3)
+      result = self._RunCmd(data.master_node,
+                            "gnt-cluster deactivate-master-ip")
+
       if result.failed:
         raise errors.RemoteError("Unable to remove master IP on %s."
                                  " Fail reason: %s; output: %s" %
@@ -739,12 +717,12 @@ class Merger(object):
                                   " mergees")
       logging.info("Disable watcher")
       self._DisableWatcher()
-      logging.info("Stop daemons on merging nodes")
-      self._StopDaemons()
       logging.info("Merging config")
       self._FetchRemoteConfig()
       logging.info("Removing master IPs on mergee master nodes")
       self._RemoveMasterIps()
+      logging.info("Stop daemons on merging nodes")
+      self._StopDaemons()
 
       logging.info("Stopping master daemon")
       self._KillMasterDaemon()
