def _attach_volume_vmdk(self, connection_info, instance, adapter_type=None): """Attach vmdk volume storage to VM instance.""" vm_ref = vm_util.get_vm_ref(self._session, instance) LOG.debug("_attach_volume_vmdk: %s", connection_info, instance=instance) data = connection_info['data'] volume_ref = self._get_volume_ref(data['volume']) # Get details required for adding disk device such as # adapter_type, disk_type vmdk = vm_util.get_vmdk_info(self._session, volume_ref) adapter_type = adapter_type or vmdk.adapter_type # IDE does not support disk hotplug if adapter_type == constants.ADAPTER_TYPE_IDE: state = vm_util.get_vm_state(self._session, instance) if state.lower() != 'poweredoff': raise exception.Invalid(_('%s does not support disk ' 'hotplug.') % adapter_type) # Attach the disk to virtual machine instance self.attach_disk_to_vm(vm_ref, instance, adapter_type, vmdk.disk_type, vmdk_path=vmdk.path) # Store the uuid of the volume_device self._update_volume_details(vm_ref, data['volume_id'], vmdk.device.backing.uuid) LOG.debug("Attached VMDK: %s", connection_info, instance=instance)
def _detach_volume_vmdk(self, connection_info, instance): """Detach volume storage to VM instance.""" vm_ref = vm_util.get_vm_ref(self._session, instance) # Detach Volume from VM LOG.debug("_detach_volume_vmdk: %s", connection_info, instance=instance) data = connection_info['data'] volume_ref = self._get_volume_ref(data['volume']) device = self._get_vmdk_backed_disk_device(vm_ref, data) # Get details required for adding disk device such as # adapter_type, disk_type vmdk = vm_util.get_vmdk_info(self._session, volume_ref) # IDE does not support disk hotplug if vmdk.adapter_type == constants.ADAPTER_TYPE_IDE: state = vm_util.get_vm_state(self._session, instance) if state.lower() != 'poweredoff': raise exception.Invalid(_('%s does not support disk ' 'hotplug.') % vmdk.adapter_type) self._consolidate_vmdk_volume(instance, vm_ref, device, volume_ref, adapter_type=vmdk.adapter_type, disk_type=vmdk.disk_type) self.detach_disk_from_vm(vm_ref, instance, device) # Remove key-value pair <volume_id, vmdk_uuid> from instance's # extra config. Setting value to empty string will remove the key. self._update_volume_details(vm_ref, data['volume_id'], "") LOG.debug("Detached VMDK: %s", connection_info, instance=instance)
def _attach_volume_vmdk(self, connection_info, instance, adapter_type=None): """Attach vmdk volume storage to VM instance.""" vm_ref = vm_util.get_vm_ref(self._session, instance) LOG.debug("_attach_volume_vmdk: %s", connection_info, instance=instance) data = connection_info['data'] volume_ref = self._get_volume_ref(data['volume']) # Get details required for adding disk device such as # adapter_type, disk_type vmdk = vm_util.get_vmdk_info(self._session, volume_ref) adapter_type = adapter_type or vmdk.adapter_type # IDE does not support disk hotplug if adapter_type == constants.ADAPTER_TYPE_IDE: state = vm_util.get_vm_state(self._session, instance) if state != power_state.SHUTDOWN: raise exception.Invalid(_('%s does not support disk ' 'hotplug.') % adapter_type) # Attach the disk to virtual machine instance self.attach_disk_to_vm(vm_ref, instance, adapter_type, vmdk.disk_type, vmdk_path=vmdk.path) # Store the uuid of the volume_device self._update_volume_details(vm_ref, data['volume_id'], vmdk.device.backing.uuid) LOG.debug("Attached VMDK: %s", connection_info, instance=instance)
def resume_state_on_host_boot(self, context, instance, network_info, block_device_info=None): """resume guest state when a host is booted.""" # Check if the instance is running already and avoid doing # anything if it is. state = vm_util.get_vm_state(self._session, instance) ignored_states = ["poweredon", "suspended"] if state.lower() in ignored_states: return # Instance is not up and could be in an unknown state. # Be as absolute as possible about getting it back into # a known and running state. self.reboot(context, instance, network_info, "hard", block_device_info)
def _detach_volume_fcd(self, connection_info, instance): """Detach fcd volume storage to VM instance.""" vm_ref = vm_util.get_vm_ref(self._session, instance) data = connection_info['data'] adapter_type = data['adapter_type'] if adapter_type == constants.ADAPTER_TYPE_IDE: state = vm_util.get_vm_state(self._session, instance) if state != power_state.SHUTDOWN: raise exception.Invalid(_('%s does not support disk ' 'hotplug.') % adapter_type) vm_util.detach_fcd(self._session, vm_ref, data['id'])
def resume_state_on_host_boot(self, context, instance, network_info, block_device_info=None): """resume guest state when a host is booted.""" # Check if the instance is running already and avoid doing # anything if it is. state = vm_util.get_vm_state(self._session, instance) ignored_states = ['poweredon', 'suspended'] if state.lower() in ignored_states: return # Instance is not up and could be in an unknown state. # Be as absolute as possible about getting it back into # a known and running state. self.reboot(context, instance, network_info, 'hard', block_device_info)
def _attach_volume_fcd(self, connection_info, instance): """Attach fcd volume storage to VM instance.""" LOG.debug("_attach_volume_fcd: %s", connection_info, instance=instance) vm_ref = vm_util.get_vm_ref(self._session, instance) data = connection_info['data'] adapter_type = data['adapter_type'] if adapter_type == constants.ADAPTER_TYPE_IDE: state = vm_util.get_vm_state(self._session, instance) if state != power_state.SHUTDOWN: raise exception.Invalid(_('%s does not support disk ' 'hotplug.') % adapter_type) self._attach_fcd(vm_ref, adapter_type, data['id'], data['ds_ref_val']) LOG.debug("Attached fcd: %s", connection_info, instance=instance)
def _detach_volume_vmdk(self, connection_info, instance): """Detach volume storage to VM instance.""" vm_ref = vm_util.get_vm_ref(self._session, instance) # Detach Volume from VM LOG.debug("_detach_volume_vmdk: %s", connection_info, instance=instance) data = connection_info['data'] volume_ref = self._get_volume_ref(data['volume']) device = self._get_vmdk_backed_disk_device(vm_ref, data) hardware_devices = vm_util.get_hardware_devices(self._session, vm_ref) adapter_type = None for hw_device in hardware_devices: if hw_device.key == device.controllerKey: adapter_type = vm_util.CONTROLLER_TO_ADAPTER_TYPE.get( hw_device.__class__.__name__) break # IDE does not support disk hotplug if adapter_type == constants.ADAPTER_TYPE_IDE: state = vm_util.get_vm_state(self._session, instance) if state != power_state.SHUTDOWN: raise exception.Invalid( _('%s does not support disk ' 'hotplug.') % adapter_type) disk_type = vm_util._get_device_disk_type(device) self._consolidate_vmdk_volume(instance, vm_ref, device, volume_ref, adapter_type=adapter_type, disk_type=disk_type) self.detach_disk_from_vm(vm_ref, instance, device) # Remove key-value pair <volume_id, vmdk_uuid> from instance's # extra config. Setting value to empty string will remove the key. self._update_volume_details(vm_ref, data['volume_id'], "") LOG.debug("Detached VMDK: %s", connection_info, instance=instance)