From d8dcf3c9425272dae2f9344bdd9015ab5d13c4b8 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Fri, 13 Feb 2009 13:49:06 +0000 Subject: [PATCH] SetInstanceParams: export nic changes to hooks Currently we export the old instance "as is" and any nic changes get lost, so hooks won't know of a different ip, bridge, or mac address. This patch fixes it by putting the nics in the override dict, if any changes are done. Reviewed-by: iustinp --- lib/cmdlib.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index a9141288f..2bc0bae27 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -5722,7 +5722,37 @@ class LUSetInstanceParams(LogicalUnit): args['memory'] = self.be_new[constants.BE_MEMORY] if constants.BE_VCPUS in self.be_new: args['vcpus'] = self.be_new[constants.BE_VCPUS] - # FIXME: readd disk/nic changes + # TODO: export disk changes. Note: _BuildInstanceHookEnv* don't export disk + # information at all. + if self.op.nics: + args['nics'] = [] + nic_override = dict(self.op.nics) + for idx, nic in enumerate(self.instance.nics): + if idx in nic_override: + this_nic_override = nic_override[idx] + else: + this_nic_override = {} + if 'ip' in this_nic_override: + ip = this_nic_override['ip'] + else: + ip = nic.ip + if 'bridge' in this_nic_override: + bridge = this_nic_override['bridge'] + else: + bridge = nic.bridge + if 'mac' in this_nic_override: + mac = this_nic_override['mac'] + else: + mac = nic.mac + args['nics'].append((ip, bridge, mac)) + if constants.DDM_ADD in nic_override: + ip = nic_override[constants.DDM_ADD].get('ip', None) + bridge = nic_override[constants.DDM_ADD]['bridge'] + mac = nic_override[constants.DDM_ADD]['mac'] + args['nics'].append((ip, bridge, mac)) + elif constants.DDM_REMOVE in nic_override: + del args['nics'][-1] + env = _BuildInstanceHookEnvByObject(self, self.instance, override=args) nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes) return env, nl, nl -- GitLab