Add gnt-cluster commands to toggle the master IP
authorAndrea Spadaccini <spadaccio@google.com>
Thu, 29 Sep 2011 18:48:18 +0000 (19:48 +0100)
committerAndrea Spadaccini <spadaccio@google.com>
Fri, 30 Sep 2011 11:06:12 +0000 (12:06 +0100)
lib/client/gnt_cluster.py:
* Add activate-master-ip and deactivate-master-ip commands

man/gnt-cluster.rst:
* Document the new commands

lib/opcodes.py lib/cmdlib.py
* Add two opcodes and the LU that call the relevant RPCs

test/docs_unittest.py
* Silence an error about RAPI not implemented for the two new opcodes

Signed-off-by: Andrea Spadaccini <spadaccio@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>

lib/client/gnt_cluster.py
lib/cmdlib.py
lib/opcodes.py
man/gnt-cluster.rst
test/docs_unittest.py

index 5637774..f3ada54 100644 (file)
@@ -223,6 +223,32 @@ def RenameCluster(opts, args):
   return 0
 
 
+def ActivateMasterIp(opts, args):
+  """Activates the master IP.
+
+  """
+  op = opcodes.OpClusterActivateMasterIp()
+  SubmitOpCode(op)
+  return 0
+
+
+def DeactivateMasterIp(opts, args):
+  """Deactivates the master IP.
+
+  """
+  if not opts.confirm:
+    usertext = ("This will disable the master IP. All the open connections to"
+                " the master IP will be closed. To reach the master you will"
+                " need to use its node IP."
+                " Continue?")
+    if not AskUser(usertext):
+      return 1
+
+  op = opcodes.OpClusterDeactivateMasterIp()
+  SubmitOpCode(op)
+  return 0
+
+
 def RedistributeConfig(opts, args):
   """Forces push of the cluster configuration.
 
@@ -1411,6 +1437,11 @@ commands = {
      SHUTDOWN_TIMEOUT_OPT, POWER_DELAY_OPT],
     "[opts...] [args]",
     "Performs an emergency power-off on given args"),
+  "activate-master-ip": (
+    ActivateMasterIp, ARGS_NONE, [], "", "Activates the master IP"),
+  "deactivate-master-ip": (
+    DeactivateMasterIp, ARGS_NONE, [CONFIRM_OPT], "",
+    "Deactivates the master IP"),
   }
 
 
index 9a3231b..2b2409b 100644 (file)
@@ -3797,6 +3797,30 @@ class LUClusterRedistConf(NoHooksLU):
     _RedistributeAncillaryFiles(self)
 
 
+class LUClusterActivateMasterIp(NoHooksLU):
+  """Activate the master IP on the master node.
+
+  """
+  def Exec(self, feedback_fn):
+    """Activate the master IP.
+
+    """
+    master = self.cfg.GetMasterNode()
+    self.rpc.call_node_activate_master_ip(master)
+
+
+class LUClusterDeactivateMasterIp(NoHooksLU):
+  """Deactivate the master IP on the master node.
+
+  """
+  def Exec(self, feedback_fn):
+    """Deactivate the master IP.
+
+    """
+    master = self.cfg.GetMasterNode()
+    self.rpc.call_node_deactivate_master_ip(master)
+
+
 def _WaitForSync(lu, instance, disks=None, oneshot=False):
   """Sleep and poll for an instance's disk to sync.
 
index 6b2f187..6b90ce6 100644 (file)
@@ -796,6 +796,18 @@ class OpClusterRedistConf(OpCode):
   """
 
 
+class OpClusterActivateMasterIp(OpCode):
+  """Activate the master IP on the master node.
+
+  """
+
+
+class OpClusterDeactivateMasterIp(OpCode):
+  """Deactivate the master IP on the master node.
+
+  """
+
+
 class OpQuery(OpCode):
   """Query for resources/items.
 
index 8851119..b9b26c9 100644 (file)
@@ -20,6 +20,13 @@ Ganeti system.
 COMMANDS
 --------
 
+ACTIVATE-MASTER-IP
+~~~~~~~~~~~~~~~~~~
+
+**activate-master-ip**
+
+Activates the master IP on the master node.
+
 ADD-TAGS
 ~~~~~~~~
 
@@ -89,6 +96,18 @@ primary/secondary IPs are different). Example::
 This will copy the file /tmp/test from the current node to the two
 named nodes.
 
+DEACTIVATE-MASTER-IP
+~~~~~~~~~~~~~~~~~~~~
+
+**deactivate-master-ip** [--yes]
+
+Deactivates the master IP on the master node.
+
+This should be run only locally or on a connection to the node ip
+directly, as a connection to the master ip will be broken by this
+operation. Because of this risk it will require user confirmation
+unless the ``--yes`` option is passed.
+
 DESTROY
 ~~~~~~~
 
index 0db111f..c437920 100755 (executable)
@@ -56,6 +56,8 @@ RAPI_OPCODE_EXCLUDE = frozenset([
   opcodes.OpNodeQueryvols,
   opcodes.OpOobCommand,
   opcodes.OpTagsSearch,
+  opcodes.OpClusterActivateMasterIp,
+  opcodes.OpClusterDeactivateMasterIp,
 
   # Difficult if not impossible
   opcodes.OpClusterDestroy,