Add consistent methods for returning dicts
There are enough places that want dicts that we should just have API calls for it. Several of the places want to do slightly smarter things when doing that too. Co-Authored-By: David Shrewsbury <shrewsbury.dave@gmail.com> Change-Id: I08245a89e5b497b9fe50af7d3538976b1ac82257
This commit is contained in:
parent
bea5220e5a
commit
8f1ca24bb8
@ -402,9 +402,17 @@ class OpenStackCloud(object):
|
||||
def list_servers(self):
|
||||
return self.nova_client.servers.list()
|
||||
|
||||
def list_server_dicts(self):
|
||||
return [self.get_openstack_vars(server)
|
||||
for server in self.list_servers()]
|
||||
|
||||
def list_keypairs(self):
|
||||
return self.nova_client.keypairs.list()
|
||||
|
||||
def list_keypair_dicts(self):
|
||||
return [meta.obj_to_dict(keypair)
|
||||
for keypair in self.list_keypairs()]
|
||||
|
||||
def create_keypair(self, name, public_key):
|
||||
return self.nova_client.keypairs.create(name, public_key)
|
||||
|
||||
@ -464,6 +472,12 @@ class OpenStackCloud(object):
|
||||
return image
|
||||
return None
|
||||
|
||||
def get_image_dict(self, name_or_id, exclude=None):
|
||||
image = self.get_image(name_or_id, exclude)
|
||||
if not image:
|
||||
return image
|
||||
return meta.obj_to_dict(image)
|
||||
|
||||
def create_image(
|
||||
self, name, filename, container='images',
|
||||
md5=None, sha256=None,
|
||||
@ -575,19 +589,11 @@ class OpenStackCloud(object):
|
||||
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')
|
||||
return meta.get_server_private_ip(server)
|
||||
|
||||
def get_server_public_ip(self, server):
|
||||
return self._get_server_ip(
|
||||
server, ext_tag='floating', key_name='public')
|
||||
return meta.get_server_public_ip(server)
|
||||
|
||||
def get_server(self, name_or_id):
|
||||
for server in self.list_servers():
|
||||
@ -595,6 +601,12 @@ class OpenStackCloud(object):
|
||||
return server
|
||||
return None
|
||||
|
||||
def get_server_dict(self, name_or_id):
|
||||
server = self.get_server(name_or_id)
|
||||
if not server:
|
||||
return server
|
||||
return self.get_openstack_vars(server)
|
||||
|
||||
def get_server_meta(self, server):
|
||||
server_vars = meta.get_hostvars_from_server(self, server)
|
||||
groups = meta.get_groups_from_server(self, server, server_vars)
|
||||
@ -606,6 +618,9 @@ class OpenStackCloud(object):
|
||||
return secgroup
|
||||
return None
|
||||
|
||||
def get_openstack_vars(self, server):
|
||||
return meta.get_hostvars_from_server(self, server)
|
||||
|
||||
def add_ip_from_pool(self, server, pools):
|
||||
|
||||
# instantiate FloatingIPManager object
|
||||
|
@ -34,6 +34,21 @@ def find_nova_addresses(addresses, ext_tag=None, key_name=None, version=4):
|
||||
return ret
|
||||
|
||||
|
||||
def get_server_ip(server, **kwargs):
|
||||
addrs = find_nova_addresses(server.addresses, **kwargs)
|
||||
if not addrs:
|
||||
return None
|
||||
return addrs[0]
|
||||
|
||||
|
||||
def get_server_private_ip(server):
|
||||
return get_server_ip(server, ext_tag='fixed', key_name='private')
|
||||
|
||||
|
||||
def get_server_public_ip(server):
|
||||
return get_server_ip(server, ext_tag='floating', key_name='public')
|
||||
|
||||
|
||||
def get_groups_from_server(cloud, server, server_vars):
|
||||
groups = []
|
||||
|
||||
@ -77,20 +92,17 @@ def get_groups_from_server(cloud, server, server_vars):
|
||||
|
||||
|
||||
def get_hostvars_from_server(cloud, server, mounts=None):
|
||||
server_vars = dict()
|
||||
server_vars = obj_to_dict(server)
|
||||
|
||||
# Fist, add an IP address
|
||||
if (cloud.private):
|
||||
interface_ips = find_nova_addresses(
|
||||
getattr(server, 'addresses'), 'fixed', 'private')
|
||||
server_vars['public_v4'] = get_server_public_ip(server)
|
||||
server_vars['private_v4'] = get_server_private_ip(server)
|
||||
if cloud.private:
|
||||
interface_ip = server_vars['private_v4']
|
||||
else:
|
||||
interface_ips = find_nova_addresses(
|
||||
getattr(server, 'addresses'), 'floating', 'public')
|
||||
|
||||
if interface_ips:
|
||||
# TODO(mordred): I want this to be richer, "first" is not best
|
||||
server_vars['interface_ip'] = interface_ips[0]
|
||||
|
||||
server_vars.update(obj_to_dict(server))
|
||||
interface_ip = server_vars['public_v4']
|
||||
if interface_ip:
|
||||
server_vars['interface_ip'] = interface_ip
|
||||
|
||||
server_vars['region'] = cloud.region
|
||||
server_vars['cloud'] = cloud.name
|
||||
|
Loading…
x
Reference in New Issue
Block a user