X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwcal%2Fplugins%2Fvala%2Frwcal_openstack%2Frwcal_openstack.py;h=2be896a5b9d9f3c3f2ae2ad460d6d941210f9938;hb=af56fd26335608dac8bdb1095f8a588277bdc8a1;hp=8a4c33740092f61e1a4a3effd4ea150a4c14b25d;hpb=7203e6545b8957eef84f60845285b3256269637e;p=osm%2FSO.git diff --git a/rwcal/plugins/vala/rwcal_openstack/rwcal_openstack.py b/rwcal/plugins/vala/rwcal_openstack/rwcal_openstack.py index 8a4c3374..2be896a5 100644 --- a/rwcal/plugins/vala/rwcal_openstack/rwcal_openstack.py +++ b/rwcal/plugins/vala/rwcal_openstack/rwcal_openstack.py @@ -40,7 +40,7 @@ from gi.repository import ( RwTypes, RwcalYang) -PREPARE_VM_CMD = "prepare_vm.py --auth_url {auth_url} --username {username} --password {password} --tenant_name {tenant_name} --mgmt_network {mgmt_network} --server_id {server_id} --port_metadata" +PREPARE_VM_CMD = "prepare_vm.py --auth_url {auth_url} --username {username} --password {password} --tenant_name {tenant_name} --region {region} --user_domain {user_domain} --project_domain {project_domain} --mgmt_network {mgmt_network} --server_id {server_id} --port_metadata " rwstatus_exception_map = { IndexError: RwTypes.RwStatus.NOTFOUND, KeyError: RwTypes.RwStatus.NOTFOUND, @@ -95,7 +95,8 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): mgmt_network = account.openstack.mgmt_network, cert_validate = account.openstack.cert_validate, user_domain_name = account.openstack.user_domain, - project_domain_name = account.openstack.project_domain) + project_domain_name = account.openstack.project_domain, + region = account.openstack.region) except (KeystoneExceptions.Unauthorized, KeystoneExceptions.AuthorizationFailure, NeutronException.NotFound) as e: raise @@ -389,14 +390,12 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): with self._use_driver(account) as drv: ### If floating_ip is required and we don't have one, better fail before any further allocation + pool_name = None + floating_ip = False if vminfo.has_field('allocate_public_address') and vminfo.allocate_public_address: if account.openstack.has_field('floating_ip_pool'): pool_name = account.openstack.floating_ip_pool - else: - pool_name = None - floating_ip = self._allocate_floating_ip(drv, pool_name) - else: - floating_ip = None + floating_ip = True if vminfo.has_field('cloud_init') and vminfo.cloud_init.has_field('userdata'): kwargs['userdata'] = vminfo.cloud_init.userdata @@ -1266,17 +1265,17 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): vdu.public_ip = interface['addr'] # Look for any metadata - for key, value in vm_info['metadata'].items(): - if key == 'node_id': - vdu.node_id = value - else: - custommetadata = vdu.custom_boot_data.custom_meta_data.add() - custommetadata.name = key - custommetadata.value = str(value) +# for key, value in vm_info['metadata'].items(): +# if key == 'node_id': +# vdu.node_id = value +# else: +# custommetadata = vdu.supplemental_boot_data.custom_meta_data.add() +# custommetadata.name = key +# custommetadata.value = str(value) # Look for config_drive if ('config_drive' in vm_info): - vdu.custom_boot_data.custom_drive = vm_info['config_drive'] + vdu.supplemental_boot_data.boot_data_drive = vm_info['config_drive'] if ('image' in vm_info) and ('id' in vm_info['image']): vdu.image_id = vm_info['image']['id'] if ('flavor' in vm_info) and ('id' in vm_info['flavor']): @@ -1500,6 +1499,10 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): else: raise NotImplementedError("Port Type: %s not supported" %(c_point.type_yang)) + # By default port gets created with post_security enaled as True + if 'port_security_enabled' in c_point: + kwargs['port_security_enabled'] = c_point.port_security_enabled + with self._use_driver(account) as drv: if c_point.has_field('security_group'): group = drv.neutron_security_group_by_name(c_point.security_group) @@ -1916,14 +1919,12 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): with self._use_driver(account) as drv: ### If floating_ip is required and we don't have one, better fail before any further allocation + floating_ip = False + pool_name = None if vduinfo.has_field('allocate_public_address') and vduinfo.allocate_public_address: if account.openstack.has_field('floating_ip_pool'): pool_name = account.openstack.floating_ip_pool - else: - pool_name = None - floating_ip = self._allocate_floating_ip(drv, pool_name) - else: - floating_ip = None + floating_ip = True if vduinfo.has_field('vdu_init') and vduinfo.vdu_init.has_field('userdata'): kwargs['userdata'] = vduinfo.vdu_init.userdata @@ -1944,21 +1945,21 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): metadata['node_id'] = vduinfo.node_id if pci_assignement is not None: metadata['pci_assignement'] = pci_assignement - if vduinfo.has_field('custom_boot_data'): - if vduinfo.custom_boot_data.has_field('custom_meta_data'): - for custom_meta_item in vduinfo.custom_boot_data.custom_meta_data: + if vduinfo.has_field('supplemental_boot_data'): + if vduinfo.supplemental_boot_data.has_field('custom_meta_data'): + for custom_meta_item in vduinfo.supplemental_boot_data.custom_meta_data: if custom_meta_item.data_type == "STRING": metadata[custom_meta_item.name] = custom_meta_item.value elif custom_meta_item.data_type == "JSON": metadata[custom_meta_item.name] = tornado.escape.json_decode(custom_meta_item.value) else: raise OpenstackCALOperationFailure("Create-vdu operation failed. Unsupported data-type {} for custom-meta-data name {} ".format(custom_meta_item.data_type, custom_meta_item.name)) - if vduinfo.custom_boot_data.has_field('custom_config_files'): - for custom_config_file in vduinfo.custom_boot_data.custom_config_files: + if vduinfo.supplemental_boot_data.has_field('config_file'): + for custom_config_file in vduinfo.supplemental_boot_data.config_file: files[custom_config_file.dest] = custom_config_file.source - if vduinfo.custom_boot_data.has_field('custom_drive'): - if vduinfo.custom_boot_data.custom_drive is True: + if vduinfo.supplemental_boot_data.has_field('boot_data_drive'): + if vduinfo.supplemental_boot_data.boot_data_drive is True: config_drive = True kwargs['metadata'] = metadata @@ -1983,7 +1984,7 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): # Only support image->volume for volume in vduinfo.volumes: block_map = dict() - block_map['boot_index'] = volume.boot_params.boot_priority + block_map['boot_index'] = volume.boot_priority if "image" in volume: # Support image->volume # Match retrived image info with volume based image name and checksum @@ -2003,9 +2004,9 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): block_map['destination_type'] = "volume" block_map['volume_size'] = volume.size block_map['delete_on_termination'] = True - if volume.guest_params.has_field('device_type') and volume.guest_params.device_type == 'cdrom': + if volume.has_field('device_type') and volume.device_type == 'cdrom': block_map['device_type'] = 'cdrom' - if volume.guest_params.has_field('device_bus') and volume.guest_params.device_bus == 'ide': + if volume.has_field('device_bus') and volume.device_bus == 'ide': block_map['disk_bus'] = 'ide' kwargs['block_device_mapping_v2'].append(block_map) @@ -2013,7 +2014,7 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): with self._use_driver(account) as drv: vm_id = drv.nova_server_create(**kwargs) if floating_ip: - self.prepare_vdu_on_boot(account, vm_id, floating_ip, vduinfo.volumes) + self.prepare_vdu_on_boot(account, vm_id, floating_ip, pool_name, vduinfo.volumes) return vm_id @@ -2064,15 +2065,6 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): mgmt_network_id = None with self._use_driver(account) as drv: mgmt_network_id = drv._mgmt_network_id - ### If floating_ip is required and we don't have one, better fail before any further allocation - if vdu_init.has_field('allocate_public_address') and vdu_init.allocate_public_address: - if account.openstack.has_field('floating_ip_pool'): - pool_name = account.openstack.floating_ip_pool - else: - pool_name = None - floating_ip = self._allocate_floating_ip(drv, pool_name) - else: - floating_ip = None port_list = [] network_list = [] @@ -2154,16 +2146,12 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): err_str = ("VDU Volume source not supported yet") self.log.error(err_str) raise OpenstackCALOperationFailure("Create-vdu operation failed. Error- %s" % err_str) - if "guest_params" not in volume: - err_str = ("VDU Volume destination parameters '%s' not defined") + if not volume.has_field('device_type'): + err_str = ("VDU Volume destination type not defined") self.log.error(err_str) raise OpenstackCALOperationFailure("Create-vdu operation failed. Error- %s" % err_str) - if not volume.guest_params.has_field('device_type'): - err_str = ("VDU Volume destination type '%s' not defined") - self.log.error(err_str) - raise OpenstackCALOperationFailure("Create-vdu operation failed. Error- %s" % err_str) - if volume.guest_params.device_type not in ['disk', 'cdrom'] : - err_str = ("VDU Volume destination type '%s' not supported" % volume.guest_params.device_type) + if volume.device_type not in ['disk', 'cdrom'] : + err_str = ("VDU Volume destination type '%s' not supported" % volume.device_type) self.log.error(err_str) raise OpenstackCALOperationFailure("Create-vdu operation failed. Error- %s" % err_str) @@ -2227,21 +2215,25 @@ class RwcalOpenstackPlugin(GObject.Object, RwCal.Cloud): - def prepare_vdu_on_boot(self, account, server_id, floating_ip, volumes=None): - cmd = PREPARE_VM_CMD.format(auth_url = account.openstack.auth_url, - username = account.openstack.key, - password = account.openstack.secret, - tenant_name = account.openstack.tenant, - mgmt_network = account.openstack.mgmt_network, - server_id = server_id) - - if floating_ip is not None: - cmd += (" --floating_ip "+ floating_ip.ip) + def prepare_vdu_on_boot(self, account, server_id, floating_ip, pool_name, volumes=None): + cmd = PREPARE_VM_CMD.format(auth_url = account.openstack.auth_url, + username = account.openstack.key, + password = account.openstack.secret, + tenant_name = account.openstack.tenant, + region = account.openstack.region, + user_domain = account.openstack.user_domain, + project_domain = account.openstack.project_domain, + mgmt_network = account.openstack.mgmt_network, + server_id = server_id) + if floating_ip: + cmd += " --floating_ip" + if pool_name: + cmd += (" --pool_name " + pool_name) vol_metadata = False if volumes is not None: for volume in volumes: - if volume.guest_params.has_field('custom_meta_data'): + if volume.has_field('custom_meta_data'): vol_metadata = True break