#
#
-# Copyright (C) 2011 Google Inc.
+# Copyright (C) 2011, 2012 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
"""IP pool related commands"""
-# pylint: disable-msg=W0401,W0614
+# pylint: disable=W0401,W0614
# W0401: Wildcard import ganeti.cli
# W0614: Unused import %s from wildcard import (since we need cli)
#: default list of fields for L{ListNetworks}
-_LIST_DEF_FIELDS = ["name", "network", "gateway", "group_cnt", "group_list"]
+_LIST_DEF_FIELDS = ["name", "network", "gateway",
+ "network_type", "mac_prefix", "group_list", "tags"]
def _HandleReservedIPs(ips):
return utils.UnescapeAndSplit(ips, sep=",")
return None
+
def AddNetwork(opts, args):
"""Add a network to the cluster.
"""
(network_name, ) = args
- op = opcodes.OpNetworkAdd(network_name=network_name,
- gateway=opts.gateway,
- network=opts.network,
- gateway6=opts.gateway6,
- network6=opts.network6,
- mac_prefix=opts.mac_prefix,
- network_type=opts.network_type,
- add_reserved_ips=_HandleReservedIPs(opts.add_reserved_ips))
+ if opts.tags is not None:
+ tags = opts.tags.split(",")
+ else:
+ tags = []
+
+ op = opcodes.OpNetworkAdd(
+ network_name=network_name,
+ gateway=opts.gateway,
+ network=opts.network,
+ gateway6=opts.gateway6,
+ network6=opts.network6,
+ mac_prefix=opts.mac_prefix,
+ network_type=opts.network_type,
+ add_reserved_ips=_HandleReservedIPs(opts.add_reserved_ips),
+ conflicts_check=opts.conflicts_check,
+ tags=tags)
SubmitOpCode(op, opts=opts)
mode = args[2]
link = args[3]
- #TODO: allow comma separated group names
- if groups == 'all':
+ # TODO: allow comma separated group names
+ if groups == "all":
cl = GetClient()
- (groups, ) = cl.QueryGroups([], ['name'], False)
+ (groups, ) = cl.QueryGroups([], ["name"], False)
else:
groups = [groups]
groups = args[1]
#TODO: allow comma separated group names
- if groups == 'all':
+ if groups == "all":
cl = GetClient()
- (groups, ) = cl.QueryGroups([], ['name'], False)
+ (groups, ) = cl.QueryGroups([], ["name"], False)
else:
groups = [groups]
fmtoverride = {
"group_list": (",".join, False),
"inst_list": (",".join, False),
+ "tags": (",".join, False),
}
return GenericList(constants.QR_NETWORK, desired_fields, args, None,
not opts.no_headers)
-def ShowNetworkConfig(opts, args):
+def ShowNetworkConfig(_, args):
"""Show network information.
- @param opts: the command line options selected by the user
@type args: list
@param args: should either be an empty list, in which case
we show information about all nodes, or should contain
"mac_prefix", "network_type",
"free_count", "reserved_count",
"map", "group_list", "inst_list",
- "external_reservations"],
+ "external_reservations",
+ "serial_no", "uuid"],
names=args, use_locking=False)
for (name, network, gateway, network6, gateway6,
mac_prefix, network_type, free_count, reserved_count,
- map, group_list, instances, ext_res) in result:
+ mapping, group_list, instances, ext_res, serial, uuid) in result:
size = free_count + reserved_count
ToStdout("Network name: %s", name)
- ToStdout(" subnet: %s", network)
- ToStdout(" gateway: %s", gateway)
- ToStdout(" subnet6: %s", network6)
- ToStdout(" gateway6: %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))
- ToStdout(" usage map:")
+ ToStdout("UUID: %s", uuid)
+ ToStdout("Serial number: %d", serial)
+ ToStdout(" Subnet: %s", network)
+ ToStdout(" Gateway: %s", gateway)
+ 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))
+ ToStdout(" Usage map:")
idx = 0
- for line in wrap(map, width=64):
+ for line in wrap(mapping, width=64):
ToStdout(" %s %s %d", str(idx).rjust(3), line.ljust(64), idx + 63)
idx += 64
ToStdout(" (X) used (.) free")
["nic.ips", "nic.networks"],
use_locking=False)
- l = lambda value: ", ".join(`idx`+":"+str(ip)
+ l = lambda value: ", ".join(str(idx) + ":" + str(ip)
for idx, (ip, net) in enumerate(value)
if net == name)
- ToStdout(" %s : %s", inst, l(zip(ips,networks)))
+ ToStdout(" %s : %s", inst, l(zip(ips, networks)))
else:
ToStdout(" not used by any instances")
ToStderr("Please give at least one of the parameters.")
return 1
- op = opcodes.OpNetworkSetParams(network_name=args[0],
- # pylint: disable-msg=W0142
- **all_changes)
+ # pylint: disable=W0142
+ op = opcodes.OpNetworkSetParams(network_name=args[0], **all_changes)
# TODO: add feedback to user, e.g. list the modifications
SubmitOrSend(op, opts)
"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],
+ MAC_PREFIX_OPT, NETWORK_TYPE_OPT, NETWORK6_OPT, GATEWAY6_OPT,
+ NOCONFLICTSCHECK_OPT, TAG_ADD_OPT],
"<network_name>", "Add a new IP network to the cluster"),
"list": (
ListNetworks, ARGS_MANY_NETWORKS,
RemoveNetwork, ARGS_ONE_NETWORK, [FORCE_OPT, DRY_RUN_OPT],
"[--dry-run] <network_id>",
"Remove an (empty) network from the cluster"),
+ "list-tags": (
+ ListTags, ARGS_ONE_NETWORK, [],
+ "<network_name>", "List the tags of the given network"),
+ "add-tags": (
+ AddTags, [ArgNetwork(min=1, max=1), ArgUnknown()],
+ [TAG_SRC_OPT, PRIORITY_OPT, SUBMIT_OPT],
+ "<network_name> tag...", "Add tags to the given network"),
+ "remove-tags": (
+ RemoveTags, [ArgNetwork(min=1, max=1), ArgUnknown()],
+ [TAG_SRC_OPT, PRIORITY_OPT, SUBMIT_OPT],
+ "<network_name> tag...", "Remove tags from given network"),
}
def Main():
- return GenericMain(commands)
+ return GenericMain(commands, override={"tag_type": constants.TAG_NETWORK})