diff options
Diffstat (limited to 'snaps/openstack/utils/nova_utils.py')
-rw-r--r-- | snaps/openstack/utils/nova_utils.py | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/snaps/openstack/utils/nova_utils.py b/snaps/openstack/utils/nova_utils.py index 8297db9..e15484c 100644 --- a/snaps/openstack/utils/nova_utils.py +++ b/snaps/openstack/utils/nova_utils.py @@ -115,17 +115,18 @@ def create_server(nova, neutron, glance, instance_config, image_config, server = nova.servers.create(**args) - return __map_os_server_obj_to_vm_inst(server) + return __map_os_server_obj_to_vm_inst(neutron, server) else: raise NovaException( 'Cannot create instance, image cannot be located with name %s', image_config.name) -def get_server(nova, vm_inst_settings=None, server_name=None): +def get_server(nova, neutron, vm_inst_settings=None, server_name=None): """ Returns a VmInst object for the first server instance found. :param nova: the Nova client + :param neutron: the Neutron client :param vm_inst_settings: the VmInstanceConfig object from which to build the query if not None :param server_name: the server with this name to return if vm_inst_settings @@ -140,7 +141,7 @@ def get_server(nova, vm_inst_settings=None, server_name=None): servers = nova.servers.list(search_opts=search_opts) for server in servers: - return __map_os_server_obj_to_vm_inst(server) + return __map_os_server_obj_to_vm_inst(neutron, server) def get_server_connection(nova, vm_inst_settings=None, server_name=None): @@ -164,9 +165,10 @@ def get_server_connection(nova, vm_inst_settings=None, server_name=None): return server.links[0] -def __map_os_server_obj_to_vm_inst(os_server): +def __map_os_server_obj_to_vm_inst(neutron, os_server): """ Returns a VmInst object for an OpenStack Server object + :param neutron: the Neutron client (when None, ports will be empty) :param os_server: the OpenStack server object :return: an equivalent SNAPS-OO VmInst domain object """ @@ -177,6 +179,14 @@ def __map_os_server_obj_to_vm_inst(os_server): if sec_group.get('name'): sec_grp_names.append(sec_group.get('name')) + out_ports = list() + if len(os_server.networks) > 0: + for net_name, ips in os_server.networks.items(): + network = neutron_utils.get_network(neutron, network_name=net_name) + ports = neutron_utils.get_ports(neutron, network, ips) + for port in ports: + out_ports.append(port) + volumes = None if hasattr(os_server, 'os-extended-volumes:volumes_attached'): volumes = getattr(os_server, 'os-extended-volumes:volumes_attached') @@ -184,7 +194,7 @@ def __map_os_server_obj_to_vm_inst(os_server): return VmInst( name=os_server.name, inst_id=os_server.id, image_id=os_server.image['id'], flavor_id=os_server.flavor['id'], - networks=os_server.networks, keypair_name=os_server.key_name, + ports=out_ports, keypair_name=os_server.key_name, sec_grp_names=sec_grp_names, volume_ids=volumes) @@ -234,26 +244,28 @@ def get_server_console_output(nova, server): return None -def get_latest_server_object(nova, server): +def get_latest_server_object(nova, neutron, server): """ Returns a server with a given id :param nova: the Nova client + :param neutron: the Neutron client :param server: the old server object :return: the list of servers or None if not found """ server = __get_latest_server_os_object(nova, server) - return __map_os_server_obj_to_vm_inst(server) + return __map_os_server_obj_to_vm_inst(neutron, server) -def get_server_object_by_id(nova, server_id): +def get_server_object_by_id(nova, neutron, server_id): """ Returns a server with a given id :param nova: the Nova client + :param neutron: the Neutron client :param server_id: the server's id :return: an SNAPS-OO VmInst object or None if not found """ server = __get_latest_server_os_object_by_id(nova, server_id) - return __map_os_server_obj_to_vm_inst(server) + return __map_os_server_obj_to_vm_inst(neutron, server) def get_server_security_group_names(nova, server): @@ -282,6 +294,7 @@ def get_server_info(nova, server): return vm._info return None + def reboot_server(nova, server, reboot_type=None): """ Returns a dictionary of a VMs info as returned by OpenStack @@ -707,10 +720,11 @@ def update_quotas(nova, project_id, compute_quotas): return nova.quotas.update(project_id, **update_values) -def attach_volume(nova, server, volume, timeout=None): +def attach_volume(nova, neutron, server, volume, timeout=None): """ Attaches a volume to a server :param nova: the nova client + :param neutron: the neutron client :param server: the VMInst domain object :param volume: the Volume domain object :param timeout: denotes the amount of time to block to determine if the @@ -722,20 +736,21 @@ def attach_volume(nova, server, volume, timeout=None): if timeout: start_time = time.time() while time.time() < start_time + timeout: - vm = get_server_object_by_id(nova, server.id) + vm = get_server_object_by_id(nova, neutron, server.id) for vol_dict in vm.volume_ids: if volume.id == vol_dict['id']: return vm return None else: - return get_server_object_by_id(nova, server.id) + return get_server_object_by_id(nova, neutron, server.id) -def detach_volume(nova, server, volume, timeout=None): +def detach_volume(nova, neutron, server, volume, timeout=None): """ Attaches a volume to a server :param nova: the nova client + :param neutron: the neutron client :param server: the VMInst domain object :param volume: the Volume domain object :param timeout: denotes the amount of time to block to determine if the @@ -747,7 +762,7 @@ def detach_volume(nova, server, volume, timeout=None): if timeout: start_time = time.time() while time.time() < start_time + timeout: - vm = get_server_object_by_id(nova, server.id) + vm = get_server_object_by_id(nova, neutron, server.id) found = False for vol_dict in vm.volume_ids: if volume.id == vol_dict['id']: @@ -758,7 +773,7 @@ def detach_volume(nova, server, volume, timeout=None): return None else: - return get_server_object_by_id(nova, server.id) + return get_server_object_by_id(nova, neutron, server.id) class RebootType(enum.Enum): |