commit ec5d7b679bfff011899bce162a5cd5ea46a68a1b
Merge: e4e926c 6b47261
Author: Klaus Aehlig <[email protected]>
Date: Tue Jun 17 11:02:35 2014 +0200
Merge branch 'stable-2.10' into stable-2.11
* stable-2.10
Export VLAN nicparam to NIC configuration scripts
Fix gnt-network client to accept vlan info
Fix query mechanism wrt networks and vlans
Fix LUNetwork* hooks to comply with docs
Fix LUNetworkConnect wrt vlan
Conflicts:
lib/client/gnt_network.py
lib/cmdlib/network.py
qa/qa_network.py
src/Ganeti/OpParams.hs
Resolution:
lib/cmdlib/network.py: use stable-2.11 version
lib/client/gnt_network.py: use stable-2.10 version
Rest: union of changes
Signed-off-by: Klaus Aehlig <[email protected]>
diff --cc lib/client/gnt_network.py
index ee06c81,6f67091..f988515
--- a/lib/client/gnt_network.py
+++ b/lib/client/gnt_network.py
@@@ -111,10 -112,11 +112,12 @@@ def ConnectNetwork(opts, args)
"""
cl = GetClient()
+ qcl = GetClient(query=True)
- (network, mode, link) = args[:3]
- groups = _GetDefaultGroups(qcl, args[3:])
+ network = args[0]
+ nicparams = objects.FillDict(constants.NICC_DEFAULTS, opts.nicparams)
+
+ groups = _GetDefaultGroups(cl, args[1:])
# TODO: Change logic to support "--submit"
for group in groups:
diff --cc lib/cmdlib/network.py
index 143646b,d93f2dd..dbaf9e8
--- a/lib/cmdlib/network.py
+++ b/lib/cmdlib/network.py
@@@ -390,7 -392,128 +390,6 @@@ class LUNetworkSetParams(LogicalUnit)
self.cfg.Update(self.network, feedback_fn)
-
-class NetworkQuery(QueryBase):
- FIELDS = query.NETWORK_FIELDS
-
- def ExpandNames(self, lu):
- lu.needed_locks = {}
- lu.share_locks = ShareAll()
-
- self.do_locking = self.use_locking
-
- all_networks = lu.cfg.GetAllNetworksInfo()
- name_to_uuid = dict((n.name, n.uuid) for n in all_networks.values())
-
- if self.names:
- missing = []
- self.wanted = []
-
- for name in self.names:
- if name in name_to_uuid:
- self.wanted.append(name_to_uuid[name])
- else:
- missing.append(name)
-
- if missing:
- raise errors.OpPrereqError("Some networks do not exist: %s" % missing,
- errors.ECODE_NOENT)
- else:
- self.wanted = locking.ALL_SET
-
- if self.do_locking:
- lu.needed_locks[locking.LEVEL_NETWORK] = self.wanted
- if query.NETQ_INST in self.requested_data:
- lu.needed_locks[locking.LEVEL_INSTANCE] = locking.ALL_SET
- if query.NETQ_GROUP in self.requested_data:
- lu.needed_locks[locking.LEVEL_NODEGROUP] = locking.ALL_SET
-
- def DeclareLocks(self, lu, level):
- pass
-
- def _GetQueryData(self, lu):
- """Computes the list of networks and their attributes.
-
- """
- all_networks = lu.cfg.GetAllNetworksInfo()
-
- network_uuids = self._GetNames(lu, all_networks.keys(),
- locking.LEVEL_NETWORK)
-
- do_instances = query.NETQ_INST in self.requested_data
- do_groups = query.NETQ_GROUP in self.requested_data
-
- network_to_instances = None
- network_to_groups = None
-
- # For NETQ_GROUP, we need to map network->[groups]
- if do_groups:
- all_groups = lu.cfg.GetAllNodeGroupsInfo()
- network_to_groups = dict((uuid, []) for uuid in network_uuids)
- for _, group in all_groups.iteritems():
- for net_uuid in network_uuids:
- netparams = group.networks.get(net_uuid, None)
- if netparams:
- info = (group.name, netparams[constants.NIC_MODE],
- netparams[constants.NIC_LINK],
- netparams[constants.NIC_VLAN])
-
- network_to_groups[net_uuid].append(info)
-
- if do_instances:
- all_instances = lu.cfg.GetAllInstancesInfo()
- network_to_instances = dict((uuid, []) for uuid in network_uuids)
- for instance in all_instances.values():
- for nic in instance.nics:
- if nic.network in network_uuids:
- network_to_instances[nic.network].append(instance.name)
- break
-
- if query.NETQ_STATS in self.requested_data:
- stats = \
- dict((uuid,
- self._GetStats(network.AddressPool(all_networks[uuid])))
- for uuid in network_uuids)
- else:
- stats = None
-
- return query.NetworkQueryData([all_networks[uuid]
- for uuid in network_uuids],
- network_to_groups,
- network_to_instances,
- stats)
-
- @staticmethod
- def _GetStats(pool):
- """Returns statistics for a network address pool.
-
- """
- return {
- "free_count": pool.GetFreeCount(),
- "reserved_count": pool.GetReservedCount(),
- "map": pool.GetMap(),
- "external_reservations":
- utils.CommaJoin(pool.GetExternalReservations()),
- }
-
-
-class LUNetworkQuery(NoHooksLU):
- """Logical unit for querying networks.
-
- """
- REQ_BGL = False
-
- def CheckArguments(self):
- self.nq = NetworkQuery(qlang.MakeSimpleFilter("name", self.op.names),
- self.op.output_fields, self.op.use_locking)
-
- def ExpandNames(self):
- self.nq.ExpandNames(self)
-
- def Exec(self, feedback_fn):
- return self.nq.OldStyleQuery(self)
-
--
def _FmtNetworkConflict(details):
"""Utility for L{_NetworkConflictCheck}.
diff --cc qa/qa_network.py
index ffd069a,63919e0..4dd532f
--- a/qa/qa_network.py
+++ b/qa/qa_network.py
@@@ -100,10 -85,8 +102,12 @@@ def TestNetworkConnect()
AssertCommand(["gnt-group", "add", group1])
AssertCommand(["gnt-network", "add", "--network", "192.0.2.0/24", network1])
+ AssertCommand(["gnt-network", "connect", network1, mode, link, group1])
+
+ TestNetworkList()
+
+ AssertCommand(["gnt-network", "connect", "--nic-parameters", nicparams,
+ network1, group1])
AssertCommand(["gnt-network", "disconnect", network1, group1])
AssertCommand(["gnt-group", "remove", group1])
diff --cc src/Ganeti/OpParams.hs
index 54817d1,ae00822..170cf50
--- a/src/Ganeti/OpParams.hs
+++ b/src/Ganeti/OpParams.hs
@@@ -1680,8 -1632,7 +1681,13 @@@ pNetworkLink
withDoc "Network link when connecting to a group" $
simpleField "network_link" [t| NonEmptyString |]
+pAdminStateSource :: Field
+pAdminStateSource =
+ withDoc "Who last changed the instance admin state" .
+ optionalField $
+ simpleField "admin_state_source" [t| AdminStateSource |]
++
+ pNetworkVlan :: Field
+ pNetworkVlan =
+ withDoc "Network vlan when connecting to a group" $
+ simpleField "network_vlan" [t| String |]
diff --cc test/hs/Test/Ganeti/OpCodes.hs
index b152ed7,383a621..d1d7a49
--- a/test/hs/Test/Ganeti/OpCodes.hs
+++ b/test/hs/Test/Ganeti/OpCodes.hs
@@@ -365,9 -361,11 +365,9 @@@ instance Arbitrary OpCodes.OpCode wher
genMaybe (listOf genIPv4Address)
"OP_NETWORK_CONNECT" ->
OpCodes.OpNetworkConnect <$> genNameNE <*> genNameNE <*>
- arbitrary <*> genNameNE <*> arbitrary
+ arbitrary <*> genNameNE <*> arbitrary <*> arbitrary
"OP_NETWORK_DISCONNECT" ->
OpCodes.OpNetworkDisconnect <$> genNameNE <*> genNameNE
- "OP_NETWORK_QUERY" ->
- OpCodes.OpNetworkQuery <$> genFieldsNE <*> arbitrary <*> genNamesNE
"OP_RESTRICTED_COMMAND" ->
OpCodes.OpRestrictedCommand <$> arbitrary <*> genNodeNamesNE <*>
return Nothing <*> genNameNE
--
Klaus Aehlig
Google Germany GmbH, Dienerstr. 12, 80331 Muenchen
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschaeftsfuehrer: Graham Law, Christine Elizabeth Flores