diff options
author | spisarski <s.pisarski@cablelabs.com> | 2018-02-22 11:42:52 -0700 |
---|---|---|
committer | spisarski <s.pisarski@cablelabs.com> | 2018-02-22 11:42:52 -0700 |
commit | c711acf8ae3e4ad6f746500747857bcc9fd6f7be (patch) | |
tree | 4eeba467b4f42b37e935ccfff6b547bd11c65778 /snaps/openstack/create_instance.py | |
parent | f3553913925b8ee5869c8e06047d6e4161a968c7 (diff) |
Changed pattern on how objects lookup themselves by name and project.
The pattern being replaced has unwittingly added the requirement that
all creator credentials must be of type 'admin' as when looking up
the associated project ID required a call to keystone.projects.list().
As the SNAPS integration tests were always creating users with an 'admin'
role, this issue was not caught. As part of this patch, integration test
users will no longer be admin.
JIRA: SNAPS-274
Change-Id: I02957f69e31a9d4dfa63362d371f061687e59fbf
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
Diffstat (limited to 'snaps/openstack/create_instance.py')
-rw-r--r-- | snaps/openstack/create_instance.py | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/snaps/openstack/create_instance.py b/snaps/openstack/create_instance.py index dcb73cd..18f5d1a 100644 --- a/snaps/openstack/create_instance.py +++ b/snaps/openstack/create_instance.py @@ -19,7 +19,8 @@ from novaclient.exceptions import NotFound from snaps.config.vm_inst import VmInstanceConfig, FloatingIpConfig from snaps.openstack.openstack_creator import OpenStackComputeObject -from snaps.openstack.utils import glance_utils, cinder_utils, settings_utils +from snaps.openstack.utils import ( + glance_utils, cinder_utils, settings_utils, keystone_utils) from snaps.openstack.utils import neutron_utils from snaps.openstack.utils import nova_utils from snaps.openstack.utils.nova_utils import RebootType @@ -30,7 +31,6 @@ __author__ = 'spisarski' logger = logging.getLogger('create_instance') POLL_INTERVAL = 3 -VOL_DETACH_TIMEOUT = 120 STATUS_ACTIVE = 'ACTIVE' STATUS_DELETED = 'DELETED' @@ -74,6 +74,7 @@ class OpenStackVmInstance(OpenStackComputeObject): super(self.__class__, self).initialize() self.__neutron = neutron_utils.neutron_client(self._os_creds) + self.__keystone = keystone_utils.keystone_client(self._os_creds) self.__ports = self.__query_ports(self.instance_settings.port_settings) self.__lookup_existing_vm_by_name() @@ -104,7 +105,7 @@ class OpenStackVmInstance(OpenStackComputeObject): within the project """ server = nova_utils.get_server( - self._nova, self.__neutron, + self._nova, self.__neutron, self.__keystone, vm_inst_settings=self.instance_settings) if server: if server.name == self.instance_settings.name: @@ -135,8 +136,9 @@ class OpenStackVmInstance(OpenStackComputeObject): """ glance = glance_utils.glance_client(self._os_creds) self.__vm = nova_utils.create_server( - self._nova, self.__neutron, glance, self.instance_settings, - self.image_settings, self.project_id, self.keypair_settings) + self._nova, self.__keystone, self.__neutron, glance, + self.instance_settings, self.image_settings, + self._os_creds.project_name, self.keypair_settings) logger.info('Created instance with name - %s', self.instance_settings.name) @@ -166,14 +168,14 @@ class OpenStackVmInstance(OpenStackComputeObject): if volume and self.vm_active(block=True): vm = nova_utils.attach_volume( - self._nova, self.__neutron, self.__vm, volume, - self.project_id, timeout=VOL_DETACH_TIMEOUT) + self._nova, self.__neutron, self.__keystone, self.__vm, + volume, self._os_creds.project_name) if vm: self.__vm = vm else: - logger.warn('Volume [%s] not attached within timeout ' - 'of [%s]', volume.name, VOL_DETACH_TIMEOUT) + logger.warn( + 'Volume [%s] attachment timeout ', volume.name) else: logger.warn('Unable to attach volume named [%s]', volume_name) @@ -216,7 +218,7 @@ class OpenStackVmInstance(OpenStackComputeObject): floating_ip_setting.router_name) if ext_gateway and self.vm_active(block=True): floating_ip = neutron_utils.create_floating_ip( - self.__neutron, ext_gateway, port.id) + self.__neutron, self.__keystone, ext_gateway, port.id) self.__floating_ip_dict[floating_ip_setting.name] = floating_ip logger.info( @@ -272,8 +274,8 @@ class OpenStackVmInstance(OpenStackComputeObject): cinder, volume_rec['id']) if volume: vm = nova_utils.detach_volume( - self._nova, self.__neutron, self.__vm, volume, - self.project_id, timeout=VOL_DETACH_TIMEOUT) + self._nova, self.__neutron, self.__keystone, self.__vm, + volume, self._os_creds.project_name) if vm: self.__vm = vm else: @@ -318,8 +320,8 @@ class OpenStackVmInstance(OpenStackComputeObject): for port_setting in port_settings: port = neutron_utils.get_port( - self.__neutron, port_settings=port_setting, - project_id=self.project_id) + self.__neutron, self.__keystone, port_settings=port_setting, + project_name=self._os_creds.project_name) if port: ports.append((port_setting.name, port)) @@ -337,7 +339,7 @@ class OpenStackVmInstance(OpenStackComputeObject): for port_setting in port_settings: port = neutron_utils.get_port( - self.__neutron, port_settings=port_setting) + self.__neutron, self.__keystone, port_settings=port_setting) if not port: port = neutron_utils.create_port( self.__neutron, self._os_creds, port_setting) @@ -359,7 +361,8 @@ class OpenStackVmInstance(OpenStackComputeObject): :return: Server object """ return nova_utils.get_server_object_by_id( - self._nova, self.__neutron, self.__vm.id, self.project_id) + self._nova, self.__neutron, self.__keystone, self.__vm.id, + self._os_creds.project_name) def get_console_output(self): """ @@ -507,7 +510,8 @@ class OpenStackVmInstance(OpenStackComputeObject): STATUS_ACTIVE, block, self.instance_settings.vm_boot_timeout, poll_interval): self.__vm = nova_utils.get_server_object_by_id( - self._nova, self.__neutron, self.__vm.id, self.project_id) + self._nova, self.__neutron, self.__keystone, self.__vm.id, + self._os_creds.project_name) return True return False @@ -774,21 +778,22 @@ class OpenStackVmInstance(OpenStackComputeObject): self._nova, self.__vm, reboot_type=reboot_type) -def generate_creator(os_creds, vm_inst, image_config, project_id, +def generate_creator(os_creds, vm_inst, image_config, project_name, keypair_config=None): """ Initializes an OpenStackVmInstance object :param os_creds: the OpenStack credentials :param vm_inst: the SNAPS-OO VmInst domain object :param image_config: the associated ImageConfig object - :param project_id: the associated project ID + :param project_name: the associated project ID :param keypair_config: the associated KeypairConfig object (optional) :return: an initialized OpenStackVmInstance object """ nova = nova_utils.nova_client(os_creds) + keystone = keystone_utils.keystone_client(os_creds) neutron = neutron_utils.neutron_client(os_creds) derived_inst_config = settings_utils.create_vm_inst_config( - nova, neutron, vm_inst, project_id) + nova, keystone, neutron, vm_inst, project_name) derived_inst_creator = OpenStackVmInstance( os_creds, derived_inst_config, image_config, keypair_config) |