def check_image_size(task): """Check if the requested image is larger than the root partition size. Does nothing for whole-disk images. :param task: a TaskManager instance containing the node to act on. :raises: InstanceDeployFailure if size of the image is greater than root partition. """ if task.node.driver_internal_info['is_whole_disk_image']: # The root partition is already created and populated, no use # validating its size return i_info = deploy_utils.parse_instance_info(task.node) image_path = deploy_utils._get_image_file_path(task.node.uuid) image_mb = disk_utils.get_image_mb(image_path) root_mb = 1024 * int(i_info['root_gb']) if image_mb > root_mb: msg = (_('Root partition is too small for requested image. Image ' 'virtual size: %(image_mb)d MB, Root size: %(root_mb)d MB') % { 'image_mb': image_mb, 'root_mb': root_mb }) raise exception.InstanceDeployFailure(msg)
def get_deploy_info(node, address, iqn, port=None, lun='1', conv_flags=None): """Returns the information required for doing iSCSI deploy in a dictionary. :param node: ironic node object :param address: iSCSI address :param iqn: iSCSI iqn for the target disk :param port: iSCSI port, defaults to one specified in the configuration :param lun: iSCSI lun, defaults to '1' :param conv_flags: flag that will modify the behaviour of the image copy to disk. :raises: MissingParameterValue, if some required parameters were not passed. :raises: InvalidParameterValue, if any of the parameters have invalid value. """ i_info = deploy_utils.parse_instance_info(node) params = { 'address': address, 'port': port or CONF.iscsi.portal_port, 'iqn': iqn, 'lun': lun, 'image_path': deploy_utils._get_image_file_path(node.uuid), 'node_uuid': node.uuid} is_whole_disk_image = node.driver_internal_info['is_whole_disk_image'] if not is_whole_disk_image: params.update({'root_mb': i_info['root_mb'], 'swap_mb': i_info['swap_mb'], 'ephemeral_mb': i_info['ephemeral_mb'], 'preserve_ephemeral': i_info['preserve_ephemeral'], 'boot_option': deploy_utils.get_boot_option(node), 'boot_mode': _get_boot_mode(node), 'cpu_arch': node.properties.get('cpu_arch')}) # Append disk label if specified disk_label = deploy_utils.get_disk_label(node) if disk_label is not None: params['disk_label'] = disk_label missing = [key for key in params if params[key] is None] if missing: raise exception.MissingParameterValue( _("Parameters %s were not passed to ironic" " for deploy.") % missing) # configdrive is nullable params['configdrive'] = i_info.get('configdrive') if is_whole_disk_image: return params if conv_flags: params['conv_flags'] = conv_flags # ephemeral_format is nullable params['ephemeral_format'] = i_info.get('ephemeral_format') return params
def check_image_size(task): """Check if the requested image is larger than the root partition size. Does nothing for whole-disk images. :param task: a TaskManager instance containing the node to act on. :raises: InstanceDeployFailure if size of the image is greater than root partition. """ if task.node.driver_internal_info['is_whole_disk_image']: # The root partition is already created and populated, no use # validating its size return i_info = deploy_utils.parse_instance_info(task.node) image_path = deploy_utils._get_image_file_path(task.node.uuid) image_mb = disk_utils.get_image_mb(image_path) root_mb = 1024 * int(i_info['root_gb']) if image_mb > root_mb: msg = (_('Root partition is too small for requested image. Image ' 'virtual size: %(image_mb)d MB, Root size: %(root_mb)d MB') % {'image_mb': image_mb, 'root_mb': root_mb}) raise exception.InstanceDeployFailure(msg)
def get_deploy_info(node, address, iqn, port=None, lun='1', conv_flags=None): """Returns the information required for doing iSCSI deploy in a dictionary. :param node: ironic node object :param address: iSCSI address :param iqn: iSCSI iqn for the target disk :param port: iSCSI port, defaults to one specified in the configuration :param lun: iSCSI lun, defaults to '1' :param conv_flags: flag that will modify the behaviour of the image copy to disk. :raises: MissingParameterValue, if some required parameters were not passed. :raises: InvalidParameterValue, if any of the parameters have invalid value. """ i_info = deploy_utils.parse_instance_info(node) params = { 'address': address, 'port': port or CONF.iscsi.portal_port, 'iqn': iqn, 'lun': lun, 'image_path': deploy_utils._get_image_file_path(node.uuid), 'node_uuid': node.uuid} is_whole_disk_image = node.driver_internal_info['is_whole_disk_image'] if not is_whole_disk_image: params.update({'root_mb': i_info['root_mb'], 'swap_mb': i_info['swap_mb'], 'ephemeral_mb': i_info['ephemeral_mb'], 'preserve_ephemeral': i_info['preserve_ephemeral'], 'boot_option': deploy_utils.get_boot_option(node), 'boot_mode': boot_mode_utils.get_boot_mode(node)}) cpu_arch = node.properties.get('cpu_arch') if cpu_arch is not None: params['cpu_arch'] = cpu_arch # Append disk label if specified disk_label = deploy_utils.get_disk_label(node) if disk_label is not None: params['disk_label'] = disk_label missing = [key for key in params if params[key] is None] if missing: raise exception.MissingParameterValue( _("Parameters %s were not passed to ironic" " for deploy.") % missing) # configdrive is nullable params['configdrive'] = i_info.get('configdrive') if is_whole_disk_image: return params if conv_flags: params['conv_flags'] = conv_flags # ephemeral_format is nullable params['ephemeral_format'] = i_info.get('ephemeral_format') return params