X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwcal%2Fplugins%2Fvala%2Frwcal_openstack%2Frift%2Frwcal%2Fopenstack%2Futils%2Fcompute.py;h=be7a969fb09284b72a97d5ca98aadb267e4bdbd0;hb=48b1b3ccc360b7ef9f45253cdfb65f7490dfcbe1;hp=55382017dee623142b458bc3e40fcdfff1f9d0e9;hpb=ee71ccf6da85650a8fbd2019293535082f017b78;p=osm%2FSO.git diff --git a/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/utils/compute.py b/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/utils/compute.py index 55382017..be7a969f 100644 --- a/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/utils/compute.py +++ b/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/utils/compute.py @@ -173,6 +173,31 @@ class ComputeUtils(object): %(image_name, checksum)) return image['id'] + def resolve_volume_n_validate(self, volume_ref): + """ + Resolve the volume reference + + Arguments: + volume_ref (string): Name of volume reference + + Raises VolumeValidateError in case of Errors + """ + + for vol in self.driver._cinder_volume_list: + voldict = vol.to_dict() + if 'display_name' in voldict and voldict['display_name'] == volume_ref: + if 'status' in voldict: + if voldict['status'] == 'available': + return voldict['id'] + else: + self.log.error("Volume %s not in available state. Current state: %s", + volume_ref, voldict['status']) + raise VolumeValidateError("Volume with name %s found in incorrect (%s) state" + %(volume_ref, voldict['status'])) + + self.log.info("No volume found with matching name: %s ", volume_ref) + raise VolumeValidateError("No volume found with matching name: %s " %(volume_ref)) + def make_vdu_volume_args(self, volume, vdu_params): """ Arguments: @@ -186,23 +211,27 @@ class ComputeUtils(object): """ kwargs = dict() - if volume.has_field('volume_ref'): - self.log.error("Unsupported option found for volume: %s", volume.name) - raise VolumeValidateError("Unsupported option found for volume: %s" - %(volume.name)) - - kwargs['boot_index'] = volume.boot_priority + if 'boot_priority' in volume: + # Rift-only field + kwargs['boot_index'] = volume.boot_priority if volume.has_field("image"): # Support image->volume kwargs['source_type'] = "image" kwargs['uuid'] = self.resolve_image_n_validate(volume.image, volume.image_checksum) + kwargs['delete_on_termination'] = True + elif "volume_ref" in volume: + # Support volume-ref->volume (only ref) + # Rift-only field + kwargs['source_type'] = "volume" + kwargs['uuid'] = self.resolve_volume_n_validate(volume.volume_ref) + kwargs['delete_on_termination'] = False else: # Support blank->volume kwargs['source_type'] = "blank" + kwargs['delete_on_termination'] = True kwargs['device_name'] = volume.name kwargs['destination_type'] = "volume" kwargs['volume_size'] = volume.size - kwargs['delete_on_termination'] = True if volume.has_field('device_type'): if volume.device_type in ['cdrom', 'disk']: @@ -211,26 +240,16 @@ class ComputeUtils(object): self.log.error("Unsupported device_type <%s> found for volume: %s", volume.device_type, volume.name) raise VolumeValidateError("Unsupported device_type <%s> found for volume: %s" - %(volume.device_type, volume.name)) - else: - self.log.error("Mandatory field not specified for volume: %s", - volume.name) - raise VolumeValidateError("Mandatory field not specified for volume: %s" - %(volume.name)) + %(volume.device_type, volume.name)) if volume.has_field('device_bus'): if volume.device_bus in ['ide', 'virtio', 'scsi']: kwargs['disk_bus'] = volume.device_bus else: - self.log.error("Unsupported device_bus <%s> found for volume: %s", - volume.device_bus, volume.name) - raise VolumeValidateError("Unsupported device_bus <%s> found for volume: %s" - %(volume.device_bus, volume.name)) - else: - self.log.error("Mandatory field not specified for volume: %s", - volume.name) - raise VolumeValidateError("Mandatory field not specified for volume: %s" - %(volume.name)) + self.log.error("Unsupported device_type <%s> found for volume: %s", + volume.device_type, volume.name) + raise VolumeValidateError("Unsupported device_type <%s> found for volume: %s" + %(volume.device_type, volume.name)) return kwargs @@ -311,7 +330,6 @@ class ComputeUtils(object): try: # Rift model only if vdu_params.supplemental_boot_data.has_field('custom_meta_data'): - metadata = dict() for cm in vdu_params.supplemental_boot_data.custom_meta_data: metadata[cm.name] = cm.value kwargs['metadata'] = metadata @@ -555,10 +573,14 @@ class ComputeUtils(object): volume.name = (v['device']).split('/')[2] volume.volume_id = v['volumeId'] details = self.driver.cinder_volume_get(volume.volume_id) - for k, v in details.metadata.items(): - vd = volume.custom_meta_data.add() - vd.name = k - vd.value = v + try: + # Rift only + for k, v in details.metadata.items(): + vd = volume.custom_meta_data.add() + vd.name = k + vd.value = v + except Exception as e: + pass except Exception as e: self.log.exception("Exception %s occured during volume list parsing", str(e)) continue @@ -604,9 +626,6 @@ class ComputeUtils(object): vdu.vdu_id = vm_info['id'] vdu.cloud_type = 'openstack' - if 'config_drive' in vm_info: - 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'] @@ -637,7 +656,11 @@ class ComputeUtils(object): ha = vdu.host_aggregate.add() ha.from_dict(aggr.as_dict()) - vdu.node_id, vdu.supplemental_boot_data = self._parse_vdu_boot_config_data(vm_info) + node_id, boot_data = self._parse_vdu_boot_config_data(vm_info) + if node_id: + vdu.node_id = node_id + if boot_data: + vdu.supplemental_boot_data = boot_data cp_list = self._parse_vdu_cp_info(vdu.vdu_id) for cp in cp_list: