LGTM
On Tue, Jun 17, 2014 at 11:17:47AM +0200, 'Klaus Aehlig' via ganeti-devel wrote: > > > 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
