Remove network_type slot (Issue 363)
[ganeti-local] / lib / client / gnt_network.py
index 1b0cc56..2407f39 100644 (file)
@@ -25,6 +25,7 @@
 # W0614: Unused import %s from wildcard import (since we need cli)
 
 import textwrap
+import itertools
 
 from ganeti.cli import *
 from ganeti import constants
@@ -35,7 +36,7 @@ from ganeti import errors
 
 #: default list of fields for L{ListNetworks}
 _LIST_DEF_FIELDS = ["name", "network", "gateway",
-                    "network_type", "mac_prefix", "group_list", "tags"]
+                    "mac_prefix", "group_list", "tags"]
 
 
 def _HandleReservedIPs(ips):
@@ -76,69 +77,75 @@ def AddNetwork(opts, args):
                             gateway6=opts.gateway6,
                             network6=opts.network6,
                             mac_prefix=opts.mac_prefix,
-                            network_type=opts.network_type,
                             add_reserved_ips=reserved_ips,
                             conflicts_check=opts.conflicts_check,
                             tags=tags)
-  SubmitOpCode(op, opts=opts)
+  SubmitOrSend(op, opts)
+
+
+def _GetDefaultGroups(cl, groups):
+  """Gets list of groups to operate on.
+
+  If C{groups} doesn't contain groups, a list of all groups in the cluster is
+  returned.
+
+  @type cl: L{luxi.Client}
+  @type groups: list
+  @rtype: list
+
+  """
+  if groups:
+    return groups
+
+  return list(itertools.chain(*cl.QueryGroups([], ["uuid"], False)))
 
 
-def MapNetwork(opts, args):
+def ConnectNetwork(opts, args):
   """Map a network to a node group.
 
   @param opts: the command line options selected by the user
   @type args: list
-  @param args: a list of length 3 with network, nodegroup, mode, physlink
+  @param args: Network, mode, physlink and node groups
   @rtype: int
   @return: the desired exit code
 
   """
-  network = args[0]
-  groups = args[1]
-  mode = args[2]
-  link = args[3]
-
-  # TODO: allow comma separated group names
-  if groups == "all":
-    cl = GetClient()
-    (groups, ) = cl.QueryGroups([], ["name"], False)
-  else:
-    groups = [groups]
+  cl = GetClient()
 
+  (network, mode, link) = args[:3]
+  groups = _GetDefaultGroups(cl, args[3:])
+
+  # TODO: Change logic to support "--submit"
   for group in groups:
     op = opcodes.OpNetworkConnect(group_name=group,
                                   network_name=network,
                                   network_mode=mode,
                                   network_link=link,
                                   conflicts_check=opts.conflicts_check)
-    SubmitOpCode(op, opts=opts)
+    SubmitOpCode(op, opts=opts, cl=cl)
 
 
-def UnmapNetwork(opts, args):
+def DisconnectNetwork(opts, args):
   """Unmap a network from a node group.
 
   @param opts: the command line options selected by the user
   @type args: list
-  @param args: a list of length 3 with network, nodegorup
+  @param args: Network and node groups
   @rtype: int
   @return: the desired exit code
 
   """
-  network = args[0]
-  groups = args[1]
+  cl = GetClient()
 
-  #TODO: allow comma separated group names
-  if groups == "all":
-    cl = GetClient()
-    (groups, ) = cl.QueryGroups([], ["name"], False)
-  else:
-    groups = [groups]
+  (network, ) = args[:1]
+  groups = _GetDefaultGroups(cl, args[1:])
 
+  # TODO: Change logic to support "--submit"
   for group in groups:
     op = opcodes.OpNetworkDisconnect(group_name=group,
                                      network_name=network,
                                      conflicts_check=opts.conflicts_check)
-    SubmitOpCode(op, opts=opts)
+    SubmitOpCode(op, opts=opts, cl=cl)
 
 
 def ListNetworks(opts, args):
@@ -194,7 +201,7 @@ def ShowNetworkConfig(_, args):
   cl = GetClient()
   result = cl.QueryNetworks(fields=["name", "network", "gateway",
                                     "network6", "gateway6",
-                                    "mac_prefix", "network_type",
+                                    "mac_prefix",
                                     "free_count", "reserved_count",
                                     "map", "group_list", "inst_list",
                                     "external_reservations",
@@ -202,7 +209,7 @@ def ShowNetworkConfig(_, args):
                             names=args, use_locking=False)
 
   for (name, network, gateway, network6, gateway6,
-       mac_prefix, network_type, free_count, reserved_count,
+       mac_prefix, free_count, reserved_count,
        mapping, group_list, instances, ext_res, serial, uuid) in result:
     size = free_count + reserved_count
     ToStdout("Network name: %s", name)
@@ -213,7 +220,6 @@ def ShowNetworkConfig(_, args):
     ToStdout("  IPv6 Subnet: %s", network6)
     ToStdout("  IPv6 Gateway: %s", gateway6)
     ToStdout("  Mac Prefix: %s", mac_prefix)
-    ToStdout("  Type: %s", network_type)
     ToStdout("  Size: %d", size)
     ToStdout("  Free: %d (%.2f%%)", free_count,
              100 * float(free_count) / float(size))
@@ -263,14 +269,12 @@ def SetNetworkParams(opts, args):
   @return: the desired exit code
 
   """
-
   # TODO: add "network": opts.network,
   all_changes = {
     "gateway": opts.gateway,
     "add_reserved_ips": _HandleReservedIPs(opts.add_reserved_ips),
     "remove_reserved_ips": _HandleReservedIPs(opts.remove_reserved_ips),
     "mac_prefix": opts.mac_prefix,
-    "network_type": opts.network_type,
     "gateway6": opts.gateway6,
     "network6": opts.network6,
   }
@@ -298,15 +302,15 @@ def RemoveNetwork(opts, args):
   """
   (network_name,) = args
   op = opcodes.OpNetworkRemove(network_name=network_name, force=opts.force)
-  SubmitOpCode(op, opts=opts)
+  SubmitOrSend(op, opts)
 
 
 commands = {
   "add": (
     AddNetwork, ARGS_ONE_NETWORK,
     [DRY_RUN_OPT, NETWORK_OPT, GATEWAY_OPT, ADD_RESERVED_IPS_OPT,
-     MAC_PREFIX_OPT, NETWORK_TYPE_OPT, NETWORK6_OPT, GATEWAY6_OPT,
-     NOCONFLICTSCHECK_OPT, TAG_ADD_OPT],
+     MAC_PREFIX_OPT, NETWORK6_OPT, GATEWAY6_OPT,
+     NOCONFLICTSCHECK_OPT, TAG_ADD_OPT, PRIORITY_OPT, SUBMIT_OPT],
     "<network_name>", "Add a new IP network to the cluster"),
   "list": (
     ListNetworks, ARGS_MANY_NETWORKS,
@@ -324,25 +328,28 @@ commands = {
   "modify": (
     SetNetworkParams, ARGS_ONE_NETWORK,
     [DRY_RUN_OPT, SUBMIT_OPT, ADD_RESERVED_IPS_OPT, REMOVE_RESERVED_IPS_OPT,
-     GATEWAY_OPT, MAC_PREFIX_OPT, NETWORK_TYPE_OPT, NETWORK6_OPT, GATEWAY6_OPT],
+     GATEWAY_OPT, MAC_PREFIX_OPT, NETWORK6_OPT, GATEWAY6_OPT,
+     PRIORITY_OPT],
     "<network_name>", "Alters the parameters of a network"),
   "connect": (
-    MapNetwork,
-    [ArgNetwork(min=1, max=1), ArgGroup(min=1, max=1),
+    ConnectNetwork,
+    [ArgNetwork(min=1, max=1),
      ArgChoice(min=1, max=1, choices=constants.NIC_VALID_MODES),
-     ArgUnknown(min=1, max=1)],
-    [NOCONFLICTSCHECK_OPT],
-    "<network_name> <node_group> <mode> <link>",
+     ArgUnknown(min=1, max=1),
+     ArgGroup()],
+    [NOCONFLICTSCHECK_OPT, PRIORITY_OPT],
+    "<network_name> <mode> <link> [<node_group>...]",
     "Map a given network to the specified node group"
     " with given mode and link (netparams)"),
   "disconnect": (
-    UnmapNetwork,
-    [ArgNetwork(min=1, max=1), ArgGroup(min=1, max=1)],
-    [NOCONFLICTSCHECK_OPT],
-    "<network_name> <node_group>",
+    DisconnectNetwork,
+    [ArgNetwork(min=1, max=1), ArgGroup()],
+    [NOCONFLICTSCHECK_OPT, PRIORITY_OPT],
+    "<network_name> [<node_group>...]",
     "Unmap a given network from a specified node group"),
   "remove": (
-    RemoveNetwork, ARGS_ONE_NETWORK, [FORCE_OPT, DRY_RUN_OPT],
+    RemoveNetwork, ARGS_ONE_NETWORK,
+    [FORCE_OPT, DRY_RUN_OPT, SUBMIT_OPT, PRIORITY_OPT],
     "[--dry-run] <network_id>",
     "Remove an (empty) network from the cluster"),
   "list-tags": (