def _get_ipxe_kernel_ramdisk(task, pxe_info): pxe_opts = {} node = task.node for label, option in (('deploy_kernel', 'deployment_aki_path'), ('deploy_ramdisk', 'deployment_ari_path')): image_href = pxe_info[label][0] if (CONF.pxe.ipxe_use_swift and service_utils.is_glance_image(image_href)): pxe_opts[option] = images.get_temp_url_for_glance_image( task.context, image_href) else: pxe_opts[option] = '/'.join([CONF.deploy.http_url, node.uuid, label]) # NOTE(pas-ha) do not use Swift TempURLs for kernel and ramdisk # of user image when boot_option is not local, # as this will break instance reboot later when temp urls have timed out. if 'kernel' in pxe_info: pxe_opts['aki_path'] = '/'.join( [CONF.deploy.http_url, node.uuid, 'kernel']) if 'ramdisk' in pxe_info: pxe_opts['ari_path'] = '/'.join( [CONF.deploy.http_url, node.uuid, 'ramdisk']) return pxe_opts
def build_deploy_pxe_options(task, pxe_info, mode='deploy', ipxe_enabled=False): pxe_opts = {} node = task.node kernel_label = '%s_kernel' % mode ramdisk_label = '%s_ramdisk' % mode for label, option in ((kernel_label, 'deployment_aki_path'), (ramdisk_label, 'deployment_ari_path')): if ipxe_enabled: image_href = pxe_info[label][0] if (CONF.pxe.ipxe_use_swift and service_utils.is_glance_image(image_href)): pxe_opts[option] = images.get_temp_url_for_glance_image( task.context, image_href) else: pxe_opts[option] = '/'.join( [CONF.deploy.http_url, node.uuid, label]) else: pxe_opts[option] = get_path_relative_to_tftp_root( pxe_info[label][1]) if ipxe_enabled: pxe_opts['initrd_filename'] = ramdisk_label return pxe_opts
def test_get_temp_url_for_glance_image(self, image_service_mock): direct_url = "swift+http://host/v1/AUTH_xx/con/obj" image_info = {"id": "qwe", "properties": {"direct_url": direct_url}} glance_service_mock = image_service_mock.return_value glance_service_mock.swift_temp_url.return_value = "temp-url" glance_service_mock.show.return_value = image_info temp_url = images.get_temp_url_for_glance_image("context", "glance_uuid") glance_service_mock.show.assert_called_once_with("glance_uuid") self.assertEqual("temp-url", temp_url)
def test_get_temp_url_for_glance_image(self, image_service_mock): direct_url = 'swift+http://host/v1/AUTH_xx/con/obj' image_info = {'id': 'qwe', 'properties': {'direct_url': direct_url}} glance_service_mock = image_service_mock.return_value glance_service_mock.swift_temp_url.return_value = 'temp-url' glance_service_mock.show.return_value = image_info temp_url = images.get_temp_url_for_glance_image( 'context', 'glance_uuid') glance_service_mock.show.assert_called_once_with('glance_uuid') self.assertEqual('temp-url', temp_url)
def test_get_temp_url_for_glance_image(self, image_service_mock): direct_url = 'swift+http://host/v1/AUTH_xx/con/obj' image_info = {'id': 'qwe', 'properties': {'direct_url': direct_url}} glance_service_mock = image_service_mock.return_value glance_service_mock.swift_temp_url.return_value = 'temp-url' glance_service_mock.show.return_value = image_info temp_url = images.get_temp_url_for_glance_image('context', 'glance_uuid') glance_service_mock.show.assert_called_once_with('glance_uuid') self.assertEqual('temp-url', temp_url)
def _build_deploy_pxe_options(task, pxe_info): pxe_opts = {} node = task.node for label, option in (('deploy_kernel', 'deployment_aki_path'), ('deploy_ramdisk', 'deployment_ari_path')): if CONF.pxe.ipxe_enabled: image_href = pxe_info[label][0] if (CONF.pxe.ipxe_use_swift and service_utils.is_glance_image(image_href)): pxe_opts[option] = images.get_temp_url_for_glance_image( task.context, image_href) else: pxe_opts[option] = '/'.join( [CONF.deploy.http_url, node.uuid, label]) else: pxe_opts[option] = pxe_utils.get_path_relative_to_tftp_root( pxe_info[label][1]) return pxe_opts
def _build_deploy_pxe_options(task, pxe_info): pxe_opts = {} node = task.node for label, option in (('deploy_kernel', 'deployment_aki_path'), ('deploy_ramdisk', 'deployment_ari_path')): if CONF.pxe.ipxe_enabled: image_href = pxe_info[label][0] if (CONF.pxe.ipxe_use_swift and service_utils.is_glance_image(image_href)): pxe_opts[option] = images.get_temp_url_for_glance_image( task.context, image_href) else: pxe_opts[option] = '/'.join([CONF.deploy.http_url, node.uuid, label]) else: pxe_opts[option] = pxe_utils.get_path_relative_to_tftp_root( pxe_info[label][1]) return pxe_opts
def setup_vmedia_for_boot(task, boot_iso, parameters=None): """Sets up the node to boot from the given ISO image. This method attaches the given boot_iso on the node and passes the required parameters to it via virtual floppy image. :param task: a TaskManager instance containing the node to act on. :param boot_iso: a bootable ISO image to attach to. Should be either of below: * A Swift object - It should be of format ``swift:<object-name>``. It is assumed that the image object is present in CONF.ilo.swift_ilo_container; * A Glance image - It should be format ``glance://<glance-image-uuid>`` or just ``<glance-image-uuid>``; * An HTTP URL. :param parameters: the parameters to pass in the virtual floppy image in a dictionary. This is optional. :raises: ImageCreationFailed, if it failed while creating the floppy image. :raises: SwiftOperationError, if any operation with Swift fails. :raises: IloOperationError, if attaching virtual media failed. """ LOG.info("Setting up node %s to boot from virtual media", task.node.uuid) if parameters: floppy_image_temp_url = _prepare_floppy_image(task, parameters) attach_vmedia(task.node, 'FLOPPY', floppy_image_temp_url) boot_iso_url = None parsed_ref = urlparse.urlparse(boot_iso) if parsed_ref.scheme == 'swift': swift_api = swift.SwiftAPI() container = CONF.ilo.swift_ilo_container object_name = parsed_ref.path timeout = CONF.ilo.swift_object_expiry_timeout boot_iso_url = swift_api.get_temp_url( container, object_name, timeout) elif service_utils.is_glance_image(boot_iso): boot_iso_url = ( images.get_temp_url_for_glance_image(task.context, boot_iso)) attach_vmedia(task.node, 'CDROM', boot_iso_url or boot_iso)
def setup_vmedia_for_boot(task, boot_iso, parameters=None): """Sets up the node to boot from the given ISO image. This method attaches the given boot_iso on the node and passes the required parameters to it via virtual floppy image. :param task: a TaskManager instance containing the node to act on. :param boot_iso: a bootable ISO image to attach to. Should be either of below: * A Swift object - It should be of format 'swift:<object-name>'. It is assumed that the image object is present in CONF.ilo.swift_ilo_container; * A Glance image - It should be format 'glance://<glance-image-uuid>' or just <glance-image-uuid>; * An HTTP(S) URL. :param parameters: the parameters to pass in the virtual floppy image in a dictionary. This is optional. :raises: ImageCreationFailed, if it failed while creating the floppy image. :raises: SwiftOperationError, if any operation with Swift fails. :raises: IloOperationError, if attaching virtual media failed. """ LOG.info(_LI("Setting up node %s to boot from virtual media"), task.node.uuid) if parameters: floppy_image_temp_url = _prepare_floppy_image(task, parameters) attach_vmedia(task.node, 'FLOPPY', floppy_image_temp_url) boot_iso_url = None parsed_ref = urlparse.urlparse(boot_iso) if parsed_ref.scheme == 'swift': swift_api = swift.SwiftAPI() container = CONF.ilo.swift_ilo_container object_name = parsed_ref.path timeout = CONF.ilo.swift_object_expiry_timeout boot_iso_url = swift_api.get_temp_url( container, object_name, timeout) elif service_utils.is_glance_image(boot_iso): boot_iso_url = ( images.get_temp_url_for_glance_image(task.context, boot_iso)) attach_vmedia(task.node, 'CDROM', boot_iso_url or boot_iso)
def setup_vmedia_for_boot(task, boot_iso, parameters=None): """Sets up the node to boot from the given ISO image. This method attaches the given boot_iso on the node and passes the required parameters to it via virtual floppy image. :param task: a TaskManager instance containing the node to act on. :param boot_iso: a bootable ISO image to attach to. The boot iso should be present in either Glance or in Swift. If present in Glance, it should be of format 'glance:<glance-image-uuid>'. If present in Swift, it should be of format 'swift:<object-name>'. It is assumed that object is present in CONF.ilo.swift_ilo_container. :param parameters: the parameters to pass in the virtual floppy image in a dictionary. This is optional. :raises: ImageCreationFailed, if it failed while creating the floppy image. :raises: SwiftOperationError, if any operation with Swift fails. :raises: IloOperationError, if attaching virtual media failed. """ LOG.info(_LI("Setting up node %s to boot from virtual media"), task.node.uuid) if parameters: floppy_image_temp_url = _prepare_floppy_image(task, parameters) attach_vmedia(task.node, 'FLOPPY', floppy_image_temp_url) boot_iso_temp_url = None scheme, boot_iso_ref = boot_iso.split(':') if scheme == 'swift': swift_api = swift.SwiftAPI() container = CONF.ilo.swift_ilo_container object_name = boot_iso_ref timeout = CONF.ilo.swift_object_expiry_timeout boot_iso_temp_url = swift_api.get_temp_url(container, object_name, timeout) elif scheme == 'glance': glance_uuid = boot_iso_ref boot_iso_temp_url = images.get_temp_url_for_glance_image(task.context, glance_uuid) attach_vmedia(task.node, 'CDROM', boot_iso_temp_url)
def build_deploy_pxe_options(task, pxe_info, mode='deploy', ipxe_enabled=False): pxe_opts = {} node = task.node kernel_label = '%s_kernel' % mode ramdisk_label = '%s_ramdisk' % mode for label, option in ((kernel_label, 'deployment_aki_path'), (ramdisk_label, 'deployment_ari_path')): if ipxe_enabled: image_href = pxe_info[label][0] if (CONF.pxe.ipxe_use_swift and service_utils.is_glance_image(image_href)): pxe_opts[option] = images.get_temp_url_for_glance_image( task.context, image_href) else: pxe_opts[option] = '/'.join([CONF.deploy.http_url, node.uuid, label]) else: pxe_opts[option] = get_path_relative_to_tftp_root( pxe_info[label][1]) if ipxe_enabled: pxe_opts['initrd_filename'] = ramdisk_label return pxe_opts