diff --git a/shade/__init__.py b/shade/__init__.py index 107737aba..1d081ee39 100644 --- a/shade/__init__.py +++ b/shade/__init__.py @@ -556,24 +556,26 @@ class OpenStackCloud(object): return self.get_volume( name_or_id, cache=False, error=False) is not None - def get_server_by_id(self, server_id): - for server in self.nova_client.servers.list(): - if server.id == server_id: - return server - return None - - def get_server_by_name(self, server_name): - for server in self.nova_client.servers.list(): - if server.name == server_name: - return server - return None - - def get_server_id(self, server_name): - server = self.get_server_by_name(server_name) + def get_server_id(self, name_or_id): + server = self.get_server(name_or_id) if server: return server.id return None + def _get_server_ip(self, server, **kwargs): + addrs = meta.find_nova_addresses(server.addresses, *kwargs) + if not addrs: + return None + return addrs[0] + + def get_server_private_ip(self, server): + return self._get_server_ip( + server, ext_tag='fixed', key_name='private') + + def get_server_public_ip(self, server): + return self._get_server_ip( + server, ext_tag='floating', key_name='public') + def get_server(self, name_or_id): for server in self.list_servers(): if name_or_id in (server.name, server.id): diff --git a/shade/meta.py b/shade/meta.py index db3354b06..c0baa0078 100644 --- a/shade/meta.py +++ b/shade/meta.py @@ -13,16 +13,18 @@ # limitations under the License. -def find_nova_addresses(addresses, ext_tag, key_name=None): +def find_nova_addresses(addresses, ext_tag=None, key_name=None, version=4): ret = [] for (k, v) in addresses.iteritems(): if key_name and k == key_name: - ret.extend([addrs['addr'] for addrs in v]) + ret.extend([addrs['addr'] for addrs in v + if addrs['version'] == version]) else: for interface_spec in v: if ('OS-EXT-IPS:type' in interface_spec - and interface_spec['OS-EXT-IPS:type'] == ext_tag): + and interface_spec['OS-EXT-IPS:type'] == ext_tag + and interface_spec['version'] == version): ret.append(interface_spec['addr']) return ret