From 238246415007957e5806ccc5914d0b6d09387a18 Mon Sep 17 00:00:00 2001 From: Luca Bigliardi <shammash@google.com> Date: Wed, 30 Sep 2009 14:51:11 +0100 Subject: [PATCH] Extend confd instances ips query The query now accepts a link parameter. Signed-off-by: Luca Bigliardi <shammash@google.com> Reviewed-by: Guido Trotter <ultrotter@google.com> --- lib/confd/querylib.py | 12 +++++------- lib/ssconf.py | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py index 5ede415f7..46d25cb33 100644 --- a/lib/confd/querylib.py +++ b/lib/confd/querylib.py @@ -212,19 +212,17 @@ class MasterCandidatesPipsQuery(ConfdQuery): class InstancesIpsQuery(ConfdQuery): """A query for instances IPs. - It returns the list of instances IPs. + It returns the list of IPs of NICs connected to the requested link or all the + instances IPs if no link is submitted. """ def Exec(self, query): """InstancesIpsQuery main execution. """ - if query is None: - status = constants.CONFD_REPL_STATUS_OK - answer = self.reader.GetInstancesIps() - else: - status = constants.CONFD_REPL_STATUS_ERROR - answer = "non-empty instances IPs query" + link = query + status = constants.CONFD_REPL_STATUS_OK + answer = self.reader.GetInstancesIps(link) return status, answer diff --git a/lib/ssconf.py b/lib/ssconf.py index a0ba135a4..582564a73 100644 --- a/lib/ssconf.py +++ b/lib/ssconf.py @@ -34,6 +34,7 @@ from ganeti import errors from ganeti import constants from ganeti import utils from ganeti import serializer +from ganeti import objects SSCONF_LOCK_TIMEOUT = 10 @@ -101,12 +102,18 @@ class SimpleConfigReader(object): self._ip_to_instance = {} self._instances_ips = [] + self._inst_ips_by_link = {} + c_nparams = self._config_data['cluster']['nicparams'][constants.PP_DEFAULT] for iname in self._config_data['instances']: instance = self._config_data['instances'][iname] for nic in instance['nics']: if 'ip' in nic and nic['ip']: self._instances_ips.append(nic['ip']) self._ip_to_instance[nic['ip']] = iname + params = objects.FillDict(c_nparams, nic['nicparams']) + if not params['link'] in self._inst_ips_by_link: + self._inst_ips_by_link[params['link']] = [] + self._inst_ips_by_link[params['link']].append(nic['ip']) self._nodes_primary_ips = [] self._mc_primary_ips = [] @@ -203,8 +210,13 @@ class SimpleConfigReader(object): def GetMasterCandidatesPrimaryIps(self): return self._mc_primary_ips - def GetInstancesIps(self): - return self._instances_ips + def GetInstancesIps(self, link): + if link is None: + return self._instances_ips + if link in self._inst_ips_by_link: + return self._inst_ips_by_link[link] + else: + return [] class SimpleStore(object): -- GitLab