Statistics
| Branch: | Tag: | Revision:

root / lib / client / gnt_network.py @ 1fa2c40b

History | View | Annotate | Download (11 kB)

1 9c784fb3 Dimitris Aragiorgis
#
2 9c784fb3 Dimitris Aragiorgis
#
3 9c784fb3 Dimitris Aragiorgis
4 9c784fb3 Dimitris Aragiorgis
# Copyright (C) 2011 Google Inc.
5 9c784fb3 Dimitris Aragiorgis
#
6 9c784fb3 Dimitris Aragiorgis
# This program is free software; you can redistribute it and/or modify
7 9c784fb3 Dimitris Aragiorgis
# it under the terms of the GNU General Public License as published by
8 9c784fb3 Dimitris Aragiorgis
# the Free Software Foundation; either version 2 of the License, or
9 9c784fb3 Dimitris Aragiorgis
# (at your option) any later version.
10 9c784fb3 Dimitris Aragiorgis
#
11 9c784fb3 Dimitris Aragiorgis
# This program is distributed in the hope that it will be useful, but
12 9c784fb3 Dimitris Aragiorgis
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 9c784fb3 Dimitris Aragiorgis
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 9c784fb3 Dimitris Aragiorgis
# General Public License for more details.
15 9c784fb3 Dimitris Aragiorgis
#
16 9c784fb3 Dimitris Aragiorgis
# You should have received a copy of the GNU General Public License
17 9c784fb3 Dimitris Aragiorgis
# along with this program; if not, write to the Free Software
18 9c784fb3 Dimitris Aragiorgis
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 9c784fb3 Dimitris Aragiorgis
# 02110-1301, USA.
20 9c784fb3 Dimitris Aragiorgis
21 9c784fb3 Dimitris Aragiorgis
"""IP pool related commands"""
22 9c784fb3 Dimitris Aragiorgis
23 beb81ea5 Dimitris Aragiorgis
# pylint: disable=W0401,W0614
24 9c784fb3 Dimitris Aragiorgis
# W0401: Wildcard import ganeti.cli
25 9c784fb3 Dimitris Aragiorgis
# W0614: Unused import %s from wildcard import (since we need cli)
26 9c784fb3 Dimitris Aragiorgis
27 9c784fb3 Dimitris Aragiorgis
from ganeti.cli import *
28 9c784fb3 Dimitris Aragiorgis
from ganeti import constants
29 9c784fb3 Dimitris Aragiorgis
from ganeti import opcodes
30 9c784fb3 Dimitris Aragiorgis
from ganeti import utils
31 9c784fb3 Dimitris Aragiorgis
from textwrap import wrap
32 9c784fb3 Dimitris Aragiorgis
33 9c784fb3 Dimitris Aragiorgis
34 9c784fb3 Dimitris Aragiorgis
#: default list of fields for L{ListNetworks}
35 d5ed7dce Dimitris Aragiorgis
_LIST_DEF_FIELDS = ["name", "network", "gateway",
36 8140e24f Dimitris Aragiorgis
                    "network_type", "mac_prefix", "group_list", "tags"]
37 9c784fb3 Dimitris Aragiorgis
38 9c784fb3 Dimitris Aragiorgis
39 9c784fb3 Dimitris Aragiorgis
def _HandleReservedIPs(ips):
40 9c784fb3 Dimitris Aragiorgis
  if ips is not None:
41 9c784fb3 Dimitris Aragiorgis
    if ips == "":
42 9c784fb3 Dimitris Aragiorgis
      return []
43 9c784fb3 Dimitris Aragiorgis
    else:
44 9c784fb3 Dimitris Aragiorgis
      return utils.UnescapeAndSplit(ips, sep=",")
45 9c784fb3 Dimitris Aragiorgis
  return None
46 9c784fb3 Dimitris Aragiorgis
47 3c286190 Dimitris Aragiorgis
48 9c784fb3 Dimitris Aragiorgis
def AddNetwork(opts, args):
49 9c784fb3 Dimitris Aragiorgis
  """Add a network to the cluster.
50 9c784fb3 Dimitris Aragiorgis

51 9c784fb3 Dimitris Aragiorgis
  @param opts: the command line options selected by the user
52 9c784fb3 Dimitris Aragiorgis
  @type args: list
53 9c784fb3 Dimitris Aragiorgis
  @param args: a list of length 1 with the network name to create
54 9c784fb3 Dimitris Aragiorgis
  @rtype: int
55 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
56 9c784fb3 Dimitris Aragiorgis

57 9c784fb3 Dimitris Aragiorgis
  """
58 9c784fb3 Dimitris Aragiorgis
  (network_name, ) = args
59 9c784fb3 Dimitris Aragiorgis
60 8140e24f Dimitris Aragiorgis
  if opts.tags is not None:
61 8140e24f Dimitris Aragiorgis
    tags = opts.tags.split(",")
62 8140e24f Dimitris Aragiorgis
  else:
63 8140e24f Dimitris Aragiorgis
    tags = []
64 8140e24f Dimitris Aragiorgis
65 3c286190 Dimitris Aragiorgis
  op = opcodes.OpNetworkAdd(
66 3c286190 Dimitris Aragiorgis
                    network_name=network_name,
67 3c286190 Dimitris Aragiorgis
                    gateway=opts.gateway,
68 3c286190 Dimitris Aragiorgis
                    network=opts.network,
69 3c286190 Dimitris Aragiorgis
                    gateway6=opts.gateway6,
70 3c286190 Dimitris Aragiorgis
                    network6=opts.network6,
71 3c286190 Dimitris Aragiorgis
                    mac_prefix=opts.mac_prefix,
72 3c286190 Dimitris Aragiorgis
                    network_type=opts.network_type,
73 3c286190 Dimitris Aragiorgis
                    add_reserved_ips=_HandleReservedIPs(opts.add_reserved_ips),
74 3c286190 Dimitris Aragiorgis
                    tags=tags)
75 9c784fb3 Dimitris Aragiorgis
  SubmitOpCode(op, opts=opts)
76 9c784fb3 Dimitris Aragiorgis
77 9c784fb3 Dimitris Aragiorgis
78 9c784fb3 Dimitris Aragiorgis
def MapNetwork(opts, args):
79 9c784fb3 Dimitris Aragiorgis
  """Map a network to a node group.
80 9c784fb3 Dimitris Aragiorgis

81 9c784fb3 Dimitris Aragiorgis
  @param opts: the command line options selected by the user
82 9c784fb3 Dimitris Aragiorgis
  @type args: list
83 9c784fb3 Dimitris Aragiorgis
  @param args: a list of length 3 with network, nodegroup, mode, physlink
84 9c784fb3 Dimitris Aragiorgis
  @rtype: int
85 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
86 9c784fb3 Dimitris Aragiorgis

87 9c784fb3 Dimitris Aragiorgis
  """
88 9c784fb3 Dimitris Aragiorgis
  network = args[0]
89 9c784fb3 Dimitris Aragiorgis
  groups = args[1]
90 9c784fb3 Dimitris Aragiorgis
  mode = args[2]
91 9c784fb3 Dimitris Aragiorgis
  link = args[3]
92 9c784fb3 Dimitris Aragiorgis
93 9c784fb3 Dimitris Aragiorgis
  #TODO: allow comma separated group names
94 9c784fb3 Dimitris Aragiorgis
  if groups == 'all':
95 9c784fb3 Dimitris Aragiorgis
    cl = GetClient()
96 9c784fb3 Dimitris Aragiorgis
    (groups, ) = cl.QueryGroups([], ['name'], False)
97 9c784fb3 Dimitris Aragiorgis
  else:
98 9c784fb3 Dimitris Aragiorgis
    groups = [groups]
99 9c784fb3 Dimitris Aragiorgis
100 9c784fb3 Dimitris Aragiorgis
  for group in groups:
101 9c784fb3 Dimitris Aragiorgis
    op = opcodes.OpNetworkConnect(group_name=group,
102 9c784fb3 Dimitris Aragiorgis
                                  network_name=network,
103 9c784fb3 Dimitris Aragiorgis
                                  network_mode=mode,
104 9c784fb3 Dimitris Aragiorgis
                                  network_link=link,
105 9c784fb3 Dimitris Aragiorgis
                                  conflicts_check=opts.conflicts_check)
106 9c784fb3 Dimitris Aragiorgis
    SubmitOpCode(op, opts=opts)
107 9c784fb3 Dimitris Aragiorgis
108 9c784fb3 Dimitris Aragiorgis
109 9c784fb3 Dimitris Aragiorgis
def UnmapNetwork(opts, args):
110 9c784fb3 Dimitris Aragiorgis
  """Unmap a network from a node group.
111 9c784fb3 Dimitris Aragiorgis

112 9c784fb3 Dimitris Aragiorgis
  @param opts: the command line options selected by the user
113 9c784fb3 Dimitris Aragiorgis
  @type args: list
114 9c784fb3 Dimitris Aragiorgis
  @param args: a list of length 3 with network, nodegorup
115 9c784fb3 Dimitris Aragiorgis
  @rtype: int
116 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
117 9c784fb3 Dimitris Aragiorgis

118 9c784fb3 Dimitris Aragiorgis
  """
119 9c784fb3 Dimitris Aragiorgis
  network = args[0]
120 9c784fb3 Dimitris Aragiorgis
  groups = args[1]
121 9c784fb3 Dimitris Aragiorgis
122 9c784fb3 Dimitris Aragiorgis
  #TODO: allow comma separated group names
123 9c784fb3 Dimitris Aragiorgis
  if groups == 'all':
124 9c784fb3 Dimitris Aragiorgis
    cl = GetClient()
125 9c784fb3 Dimitris Aragiorgis
    (groups, ) = cl.QueryGroups([], ['name'], False)
126 9c784fb3 Dimitris Aragiorgis
  else:
127 9c784fb3 Dimitris Aragiorgis
    groups = [groups]
128 9c784fb3 Dimitris Aragiorgis
129 9c784fb3 Dimitris Aragiorgis
  for group in groups:
130 9c784fb3 Dimitris Aragiorgis
    op = opcodes.OpNetworkDisconnect(group_name=group,
131 9c784fb3 Dimitris Aragiorgis
                                     network_name=network,
132 9c784fb3 Dimitris Aragiorgis
                                     conflicts_check=opts.conflicts_check)
133 9c784fb3 Dimitris Aragiorgis
    SubmitOpCode(op, opts=opts)
134 9c784fb3 Dimitris Aragiorgis
135 9c784fb3 Dimitris Aragiorgis
136 9c784fb3 Dimitris Aragiorgis
def ListNetworks(opts, args):
137 9c784fb3 Dimitris Aragiorgis
  """List Ip pools and their properties.
138 9c784fb3 Dimitris Aragiorgis

139 9c784fb3 Dimitris Aragiorgis
  @param opts: the command line options selected by the user
140 9c784fb3 Dimitris Aragiorgis
  @type args: list
141 9c784fb3 Dimitris Aragiorgis
  @param args: networks to list, or empty for all
142 9c784fb3 Dimitris Aragiorgis
  @rtype: int
143 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
144 9c784fb3 Dimitris Aragiorgis

145 9c784fb3 Dimitris Aragiorgis
  """
146 9c784fb3 Dimitris Aragiorgis
  desired_fields = ParseFields(opts.output, _LIST_DEF_FIELDS)
147 9c784fb3 Dimitris Aragiorgis
  fmtoverride = {
148 9c784fb3 Dimitris Aragiorgis
    "group_list": (",".join, False),
149 9c784fb3 Dimitris Aragiorgis
    "inst_list": (",".join, False),
150 8140e24f Dimitris Aragiorgis
    "tags": (",".join, False),
151 9c784fb3 Dimitris Aragiorgis
  }
152 9c784fb3 Dimitris Aragiorgis
153 9c784fb3 Dimitris Aragiorgis
  return GenericList(constants.QR_NETWORK, desired_fields, args, None,
154 9c784fb3 Dimitris Aragiorgis
                     opts.separator, not opts.no_headers,
155 9c784fb3 Dimitris Aragiorgis
                     verbose=opts.verbose, format_override=fmtoverride)
156 9c784fb3 Dimitris Aragiorgis
157 9c784fb3 Dimitris Aragiorgis
158 9c784fb3 Dimitris Aragiorgis
def ListNetworkFields(opts, args):
159 9c784fb3 Dimitris Aragiorgis
  """List network fields.
160 9c784fb3 Dimitris Aragiorgis

161 9c784fb3 Dimitris Aragiorgis
  @param opts: the command line options selected by the user
162 9c784fb3 Dimitris Aragiorgis
  @type args: list
163 9c784fb3 Dimitris Aragiorgis
  @param args: fields to list, or empty for all
164 9c784fb3 Dimitris Aragiorgis
  @rtype: int
165 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
166 9c784fb3 Dimitris Aragiorgis

167 9c784fb3 Dimitris Aragiorgis
  """
168 9c784fb3 Dimitris Aragiorgis
  return GenericListFields(constants.QR_NETWORK, args, opts.separator,
169 9c784fb3 Dimitris Aragiorgis
                           not opts.no_headers)
170 9c784fb3 Dimitris Aragiorgis
171 9c784fb3 Dimitris Aragiorgis
172 beb81ea5 Dimitris Aragiorgis
def ShowNetworkConfig(_, args):
173 9c784fb3 Dimitris Aragiorgis
  """Show network information.
174 9c784fb3 Dimitris Aragiorgis

175 9c784fb3 Dimitris Aragiorgis
  @type args: list
176 9c784fb3 Dimitris Aragiorgis
  @param args: should either be an empty list, in which case
177 9c784fb3 Dimitris Aragiorgis
      we show information about all nodes, or should contain
178 9c784fb3 Dimitris Aragiorgis
      a list of networks (names or UUIDs) to be queried for information
179 9c784fb3 Dimitris Aragiorgis
  @rtype: int
180 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
181 9c784fb3 Dimitris Aragiorgis

182 9c784fb3 Dimitris Aragiorgis
  """
183 9c784fb3 Dimitris Aragiorgis
  cl = GetClient()
184 9c784fb3 Dimitris Aragiorgis
  result = cl.QueryNetworks(fields=["name", "network", "gateway",
185 9c784fb3 Dimitris Aragiorgis
                                    "network6", "gateway6",
186 9c784fb3 Dimitris Aragiorgis
                                    "mac_prefix", "network_type",
187 9c784fb3 Dimitris Aragiorgis
                                    "free_count", "reserved_count",
188 9c784fb3 Dimitris Aragiorgis
                                    "map", "group_list", "inst_list",
189 9c784fb3 Dimitris Aragiorgis
                                    "external_reservations"],
190 9c784fb3 Dimitris Aragiorgis
                            names=args, use_locking=False)
191 9c784fb3 Dimitris Aragiorgis
192 9c784fb3 Dimitris Aragiorgis
  for (name, network, gateway, network6, gateway6,
193 9c784fb3 Dimitris Aragiorgis
       mac_prefix, network_type, free_count, reserved_count,
194 beb81ea5 Dimitris Aragiorgis
       mapping, group_list, instances, ext_res) in result:
195 9c784fb3 Dimitris Aragiorgis
    size = free_count + reserved_count
196 9c784fb3 Dimitris Aragiorgis
    ToStdout("Network name: %s", name)
197 9c784fb3 Dimitris Aragiorgis
    ToStdout("  subnet: %s", network)
198 9c784fb3 Dimitris Aragiorgis
    ToStdout("  gateway: %s", gateway)
199 9c784fb3 Dimitris Aragiorgis
    ToStdout("  subnet6: %s", network6)
200 9c784fb3 Dimitris Aragiorgis
    ToStdout("  gateway6: %s", gateway6)
201 9c784fb3 Dimitris Aragiorgis
    ToStdout("  mac prefix: %s", mac_prefix)
202 9c784fb3 Dimitris Aragiorgis
    ToStdout("  type: %s", network_type)
203 9c784fb3 Dimitris Aragiorgis
    ToStdout("  size: %d", size)
204 9c784fb3 Dimitris Aragiorgis
    ToStdout("  free: %d (%.2f%%)", free_count,
205 3c286190 Dimitris Aragiorgis
             100 * float(free_count) / float(size))
206 9c784fb3 Dimitris Aragiorgis
    ToStdout("  usage map:")
207 9c784fb3 Dimitris Aragiorgis
    idx = 0
208 beb81ea5 Dimitris Aragiorgis
    for line in wrap(mapping, width=64):
209 9c784fb3 Dimitris Aragiorgis
      ToStdout("     %s %s %d", str(idx).rjust(3), line.ljust(64), idx + 63)
210 9c784fb3 Dimitris Aragiorgis
      idx += 64
211 9c784fb3 Dimitris Aragiorgis
    ToStdout("         (X) used    (.) free")
212 9c784fb3 Dimitris Aragiorgis
213 9c784fb3 Dimitris Aragiorgis
    if ext_res:
214 9c784fb3 Dimitris Aragiorgis
      ToStdout("  externally reserved IPs:")
215 9c784fb3 Dimitris Aragiorgis
      for line in wrap(ext_res, width=64):
216 9c784fb3 Dimitris Aragiorgis
        ToStdout("    %s" % line)
217 9c784fb3 Dimitris Aragiorgis
218 9c784fb3 Dimitris Aragiorgis
    if group_list:
219 9c784fb3 Dimitris Aragiorgis
      ToStdout("  connected to node groups:")
220 9c784fb3 Dimitris Aragiorgis
      for group in group_list:
221 9c784fb3 Dimitris Aragiorgis
        ToStdout("    %s", group)
222 9c784fb3 Dimitris Aragiorgis
    else:
223 9c784fb3 Dimitris Aragiorgis
      ToStdout("  not connected to any node group")
224 9c784fb3 Dimitris Aragiorgis
225 9c784fb3 Dimitris Aragiorgis
    if instances:
226 9c784fb3 Dimitris Aragiorgis
      ToStdout("  used by %d instances:", len(instances))
227 9c784fb3 Dimitris Aragiorgis
      for inst in instances:
228 9c784fb3 Dimitris Aragiorgis
        ((ips, networks), ) = cl.QueryInstances([inst],
229 9c784fb3 Dimitris Aragiorgis
                                                ["nic.ips", "nic.networks"],
230 9c784fb3 Dimitris Aragiorgis
                                                use_locking=False)
231 9c784fb3 Dimitris Aragiorgis
232 3c286190 Dimitris Aragiorgis
        l = lambda value: ", ".join(str(idx) + ":" + str(ip)
233 9c784fb3 Dimitris Aragiorgis
                                    for idx, (ip, net) in enumerate(value)
234 9c784fb3 Dimitris Aragiorgis
                                      if net == name)
235 9c784fb3 Dimitris Aragiorgis
236 beb81ea5 Dimitris Aragiorgis
        ToStdout("    %s : %s", inst, l(zip(ips, networks)))
237 9c784fb3 Dimitris Aragiorgis
    else:
238 9c784fb3 Dimitris Aragiorgis
      ToStdout("  not used by any instances")
239 9c784fb3 Dimitris Aragiorgis
240 9c784fb3 Dimitris Aragiorgis
241 9c784fb3 Dimitris Aragiorgis
def SetNetworkParams(opts, args):
242 9c784fb3 Dimitris Aragiorgis
  """Modifies an IP address pool's parameters.
243 9c784fb3 Dimitris Aragiorgis

244 9c784fb3 Dimitris Aragiorgis
  @param opts: the command line options selected by the user
245 9c784fb3 Dimitris Aragiorgis
  @type args: list
246 9c784fb3 Dimitris Aragiorgis
  @param args: should contain only one element, the node group name
247 9c784fb3 Dimitris Aragiorgis

248 9c784fb3 Dimitris Aragiorgis
  @rtype: int
249 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
250 9c784fb3 Dimitris Aragiorgis

251 9c784fb3 Dimitris Aragiorgis
  """
252 9c784fb3 Dimitris Aragiorgis
253 9c784fb3 Dimitris Aragiorgis
  # TODO: add "network": opts.network,
254 9c784fb3 Dimitris Aragiorgis
  all_changes = {
255 9c784fb3 Dimitris Aragiorgis
    "gateway": opts.gateway,
256 9c784fb3 Dimitris Aragiorgis
    "add_reserved_ips": _HandleReservedIPs(opts.add_reserved_ips),
257 9c784fb3 Dimitris Aragiorgis
    "remove_reserved_ips": _HandleReservedIPs(opts.remove_reserved_ips),
258 9c784fb3 Dimitris Aragiorgis
    "mac_prefix": opts.mac_prefix,
259 9c784fb3 Dimitris Aragiorgis
    "network_type": opts.network_type,
260 9c784fb3 Dimitris Aragiorgis
    "gateway6": opts.gateway6,
261 9c784fb3 Dimitris Aragiorgis
    "network6": opts.network6,
262 9c784fb3 Dimitris Aragiorgis
  }
263 9c784fb3 Dimitris Aragiorgis
264 9c784fb3 Dimitris Aragiorgis
  if all_changes.values().count(None) == len(all_changes):
265 9c784fb3 Dimitris Aragiorgis
    ToStderr("Please give at least one of the parameters.")
266 9c784fb3 Dimitris Aragiorgis
    return 1
267 9c784fb3 Dimitris Aragiorgis
268 beb81ea5 Dimitris Aragiorgis
  # pylint: disable=W0142
269 beb81ea5 Dimitris Aragiorgis
  op = opcodes.OpNetworkSetParams(network_name=args[0], **all_changes)
270 9c784fb3 Dimitris Aragiorgis
271 9c784fb3 Dimitris Aragiorgis
  # TODO: add feedback to user, e.g. list the modifications
272 9c784fb3 Dimitris Aragiorgis
  SubmitOrSend(op, opts)
273 9c784fb3 Dimitris Aragiorgis
274 9c784fb3 Dimitris Aragiorgis
275 9c784fb3 Dimitris Aragiorgis
def RemoveNetwork(opts, args):
276 9c784fb3 Dimitris Aragiorgis
  """Remove an IP address pool from the cluster.
277 9c784fb3 Dimitris Aragiorgis

278 9c784fb3 Dimitris Aragiorgis
  @param opts: the command line options selected by the user
279 9c784fb3 Dimitris Aragiorgis
  @type args: list
280 9c784fb3 Dimitris Aragiorgis
  @param args: a list of length 1 with the id of the IP address pool to remove
281 9c784fb3 Dimitris Aragiorgis
  @rtype: int
282 9c784fb3 Dimitris Aragiorgis
  @return: the desired exit code
283 9c784fb3 Dimitris Aragiorgis

284 9c784fb3 Dimitris Aragiorgis
  """
285 9c784fb3 Dimitris Aragiorgis
  (network_name,) = args
286 9c784fb3 Dimitris Aragiorgis
  op = opcodes.OpNetworkRemove(network_name=network_name, force=opts.force)
287 9c784fb3 Dimitris Aragiorgis
  SubmitOpCode(op, opts=opts)
288 9c784fb3 Dimitris Aragiorgis
289 9c784fb3 Dimitris Aragiorgis
290 9c784fb3 Dimitris Aragiorgis
commands = {
291 9c784fb3 Dimitris Aragiorgis
  "add": (
292 9c784fb3 Dimitris Aragiorgis
    AddNetwork, ARGS_ONE_NETWORK,
293 8140e24f Dimitris Aragiorgis
    [DRY_RUN_OPT, NETWORK_OPT, GATEWAY_OPT, ADD_RESERVED_IPS_OPT, TAG_ADD_OPT,
294 9c784fb3 Dimitris Aragiorgis
     MAC_PREFIX_OPT, NETWORK_TYPE_OPT, NETWORK6_OPT, GATEWAY6_OPT],
295 9c784fb3 Dimitris Aragiorgis
    "<network_name>", "Add a new IP network to the cluster"),
296 9c784fb3 Dimitris Aragiorgis
  "list": (
297 9c784fb3 Dimitris Aragiorgis
    ListNetworks, ARGS_MANY_NETWORKS,
298 9c784fb3 Dimitris Aragiorgis
    [NOHDR_OPT, SEP_OPT, FIELDS_OPT, VERBOSE_OPT],
299 9c784fb3 Dimitris Aragiorgis
    "[<network_id>...]",
300 9c784fb3 Dimitris Aragiorgis
    "Lists the IP networks in the cluster. The available fields can be shown"
301 9c784fb3 Dimitris Aragiorgis
    " using the \"list-fields\" command (see the man page for details)."
302 9c784fb3 Dimitris Aragiorgis
    " The default list is (in order): %s." % utils.CommaJoin(_LIST_DEF_FIELDS)),
303 9c784fb3 Dimitris Aragiorgis
  "list-fields": (
304 9c784fb3 Dimitris Aragiorgis
    ListNetworkFields, [ArgUnknown()], [NOHDR_OPT, SEP_OPT], "[fields...]",
305 9c784fb3 Dimitris Aragiorgis
    "Lists all available fields for networks"),
306 9c784fb3 Dimitris Aragiorgis
  "info": (
307 9c784fb3 Dimitris Aragiorgis
    ShowNetworkConfig, ARGS_MANY_NETWORKS, [],
308 9c784fb3 Dimitris Aragiorgis
    "[<network_name>...]", "Show information about the network(s)"),
309 9c784fb3 Dimitris Aragiorgis
  "modify": (
310 9c784fb3 Dimitris Aragiorgis
    SetNetworkParams, ARGS_ONE_NETWORK,
311 9c784fb3 Dimitris Aragiorgis
    [DRY_RUN_OPT, SUBMIT_OPT, ADD_RESERVED_IPS_OPT, REMOVE_RESERVED_IPS_OPT,
312 9c784fb3 Dimitris Aragiorgis
     GATEWAY_OPT, MAC_PREFIX_OPT, NETWORK_TYPE_OPT, NETWORK6_OPT, GATEWAY6_OPT],
313 9c784fb3 Dimitris Aragiorgis
    "<network_name>", "Alters the parameters of a network"),
314 9c784fb3 Dimitris Aragiorgis
  "connect": (
315 9c784fb3 Dimitris Aragiorgis
    MapNetwork,
316 9c784fb3 Dimitris Aragiorgis
    [ArgNetwork(min=1, max=1), ArgGroup(min=1, max=1),
317 9c784fb3 Dimitris Aragiorgis
     ArgUnknown(min=1, max=1), ArgUnknown(min=1, max=1)],
318 9c784fb3 Dimitris Aragiorgis
    [NOCONFLICTSCHECK_OPT],
319 9c784fb3 Dimitris Aragiorgis
    "<network_name> <node_group> <mode> <link>",
320 9c784fb3 Dimitris Aragiorgis
    "Map a given network to the specified node group"
321 9c784fb3 Dimitris Aragiorgis
    " with given mode and link (netparams)"),
322 9c784fb3 Dimitris Aragiorgis
  "disconnect": (
323 9c784fb3 Dimitris Aragiorgis
    UnmapNetwork,
324 9c784fb3 Dimitris Aragiorgis
    [ArgNetwork(min=1, max=1), ArgGroup(min=1, max=1)],
325 9c784fb3 Dimitris Aragiorgis
    [NOCONFLICTSCHECK_OPT],
326 9c784fb3 Dimitris Aragiorgis
    "<network_name> <node_group>",
327 9c784fb3 Dimitris Aragiorgis
    "Unmap a given network from a specified node group"),
328 9c784fb3 Dimitris Aragiorgis
  "remove": (
329 9c784fb3 Dimitris Aragiorgis
    RemoveNetwork, ARGS_ONE_NETWORK, [FORCE_OPT, DRY_RUN_OPT],
330 9c784fb3 Dimitris Aragiorgis
    "[--dry-run] <network_id>",
331 9c784fb3 Dimitris Aragiorgis
    "Remove an (empty) network from the cluster"),
332 8140e24f Dimitris Aragiorgis
  "list-tags": (
333 8140e24f Dimitris Aragiorgis
    ListTags, ARGS_ONE_NETWORK, [],
334 8140e24f Dimitris Aragiorgis
    "<network_name>", "List the tags of the given network"),
335 8140e24f Dimitris Aragiorgis
  "add-tags": (
336 8140e24f Dimitris Aragiorgis
    AddTags, [ArgNetwork(min=1, max=1), ArgUnknown()],
337 8140e24f Dimitris Aragiorgis
    [TAG_SRC_OPT, PRIORITY_OPT, SUBMIT_OPT],
338 8140e24f Dimitris Aragiorgis
    "<network_name> tag...", "Add tags to the given network"),
339 8140e24f Dimitris Aragiorgis
  "remove-tags": (
340 8140e24f Dimitris Aragiorgis
    RemoveTags, [ArgNetwork(min=1, max=1), ArgUnknown()],
341 8140e24f Dimitris Aragiorgis
    [TAG_SRC_OPT, PRIORITY_OPT, SUBMIT_OPT],
342 8140e24f Dimitris Aragiorgis
    "<network_name> tag...", "Remove tags from given network"),
343 9c784fb3 Dimitris Aragiorgis
}
344 9c784fb3 Dimitris Aragiorgis
345 9c784fb3 Dimitris Aragiorgis
346 9c784fb3 Dimitris Aragiorgis
def Main():
347 8140e24f Dimitris Aragiorgis
  return GenericMain(commands, override={"tag_type": constants.TAG_NETWORK})