def create_box_img(self, temp_image_dir): """ Create the virtual machine image for the Virtualbox vagrant provider. This function creates the vmdk disk image and the ovf file. The latter is created via the class :class:`kiwi.storage.subformat.template.virtualbox_ovf.VirtualboxOvfTemplate`. """ vmdk = DiskFormatVmdk(self.xml_state, self.root_dir, self.target_dir) vmdk.create_image_format() box_img = os.sep.join([temp_image_dir, 'box.vmdk']) Command.run( [ 'mv', self.get_target_file_path_for_format(vmdk.image_format), box_img ] ) box_ovf = os.sep.join([temp_image_dir, 'box.ovf']) ovf_template = VirtualboxOvfTemplate() disk_image_capacity = self.vagrantconfig.get_virtualsize() or 42 xml_description_specification = self.xml_state \ .get_description_section().specification with open(box_ovf, "w") as ovf_file: ovf_file.write( ovf_template.get_template().substitute({ 'vm_name': self.xml_state.xml_data.name, 'disk_image_capacity': disk_image_capacity, 'vm_description': xml_description_specification }) ) return [box_img, box_ovf]
def __new__(self, name, xml_state, root_dir, target_dir): # noqa: C901 custom_args = xml_state.get_build_type_format_options() if name == 'qcow2': return DiskFormatQcow2(xml_state, root_dir, target_dir, custom_args) elif name == 'vdi': return DiskFormatVdi(xml_state, root_dir, target_dir, custom_args) elif name == 'vhd': return DiskFormatVhd(xml_state, root_dir, target_dir, custom_args) elif name == 'vhdx': return DiskFormatVhdx(xml_state, root_dir, target_dir, custom_args) elif name == 'vhd-fixed': disk_tag = xml_state.build_type.get_vhdfixedtag() if disk_tag: custom_args.update({'--tag': disk_tag}) return DiskFormatVhdFixed(xml_state, root_dir, target_dir, custom_args) elif name == 'gce': gce_license_tag = xml_state.build_type.get_gcelicense() if gce_license_tag: custom_args.update({'--tag': gce_license_tag}) return DiskFormatGce(xml_state, root_dir, target_dir, custom_args) elif name == 'vmdk' or name == 'ova': vmdisk_section = xml_state.get_build_type_vmdisk_section() if vmdisk_section: disk_mode = vmdisk_section.get_diskmode() disk_controller = vmdisk_section.get_controller() if disk_mode: custom_args.update( {'subformat={0}'.format(disk_mode): None}) if disk_controller: custom_args.update( {'adapter_type={0}'.format(disk_controller): None}) if name == 'vmdk': return DiskFormatVmdk(xml_state, root_dir, target_dir, custom_args) else: return DiskFormatOva(xml_state, root_dir, target_dir, custom_args) elif name == 'vagrant': vagrant_config = xml_state.get_build_type_vagrant_config_section() if vagrant_config: custom_args.update({'vagrantconfig': vagrant_config}) provider = vagrant_config.get_provider() else: provider = 'undefined' if provider == 'libvirt': return DiskFormatVagrantLibVirt(xml_state, root_dir, target_dir, custom_args) else: raise KiwiDiskFormatSetupError( 'No support for {0} format with {1} provider'.format( name, provider)) elif name == 'raw': return DiskFormatBase(xml_state, root_dir, target_dir, custom_args) else: raise KiwiDiskFormatSetupError( 'No support for {0} disk format'.format(name))
def setup(self, mock_machine): self.context_manager_mock = Mock() self.file_mock = Mock() self.enter_mock = Mock() self.exit_mock = Mock() self.enter_mock.return_value = self.file_mock setattr(self.context_manager_mock, '__enter__', self.enter_mock) setattr(self.context_manager_mock, '__exit__', self.exit_mock) mock_machine.return_value = 'x86_64' xml_data = Mock() xml_data.get_name = Mock(return_value='some-disk-image') xml_data.get_displayname = Mock(return_value=None) self.xml_state = Mock() self.xml_state.xml_data = xml_data self.xml_state.get_image_version = Mock(return_value='1.2.3') self.xml_state.get_build_type_vmconfig_entries = Mock( return_value=['custom entry 1', 'custom entry 2']) self.machine_setup = Mock() self.xml_state.get_build_type_machine_section = Mock( return_value=self.machine_setup) self.machine_setup.get_HWversion = Mock(return_value='42') self.machine_setup.get_guestOS = Mock(return_value='suse') self.machine_setup.get_memory = Mock(return_value='4096') self.machine_setup.get_ncpus = Mock(return_value='2') self.iso_setup = Mock() self.xml_state.get_build_type_vmdvd_section = Mock( return_value=self.iso_setup) self.iso_setup.get_controller = Mock(return_value='ide') self.iso_setup.get_id = Mock(return_value='0') self.network_setup = [Mock()] self.xml_state.get_build_type_vmnic_entries = Mock( return_value=self.network_setup) self.network_setup[0].get_interface = Mock(return_value='0') self.network_setup[0].get_mac = Mock(return_value='98:90:96:a0:3c:58') self.network_setup[0].get_mode = Mock(return_value='bridged') self.network_setup[0].get_driver = Mock(return_value='e1000') self.disk_setup = Mock() self.xml_state.get_build_type_vmdisk_section = Mock( return_value=self.disk_setup) self.disk_setup.get_controller = Mock(return_value='lsilogic') self.disk_setup.get_id = Mock(return_value='0') self.runtime_config = Mock() self.runtime_config.get_bundle_compression.return_value = True kiwi.storage.subformat.base.RuntimeConfig = Mock( return_value=self.runtime_config) self.disk_format = DiskFormatVmdk(self.xml_state, 'root_dir', 'target_dir')
def __new__(self, name, xml_state, root_dir, target_dir): if name == 'qcow2': return DiskFormatQcow2(xml_state, root_dir, target_dir) elif name == 'vdi': return DiskFormatVdi(xml_state, root_dir, target_dir) elif name == 'vhd': return DiskFormatVhd(xml_state, root_dir, target_dir) elif name == 'vhd-fixed': custom_args = None disk_tag = xml_state.build_type.get_vhdfixedtag() if disk_tag: custom_args = {'--tag': disk_tag} return DiskFormatVhdFixed(xml_state, root_dir, target_dir, custom_args) elif name == 'gce': custom_args = None gce_license_tag = xml_state.build_type.get_gcelicense() if gce_license_tag: custom_args = {'--tag': gce_license_tag} return DiskFormatGce(xml_state, root_dir, target_dir, custom_args) elif name == 'vmdk': custom_args = None vmdisk_section = xml_state.get_build_type_vmdisk_section() if vmdisk_section: custom_args = {} disk_mode = vmdisk_section.get_diskmode() disk_controller = vmdisk_section.get_controller() if disk_mode: custom_args['subformat=%s' % disk_mode] = None if disk_controller: custom_args['adapter_type=%s' % disk_controller] = None return DiskFormatVmdk(xml_state, root_dir, target_dir, custom_args) elif name == 'vagrant': vagrant_config = xml_state.get_build_type_vagrant_config_section() if vagrant_config: provider = vagrant_config.get_provider() else: provider = 'undefined' if provider == 'libvirt': return DiskFormatVagrantLibVirt( xml_state, root_dir, target_dir, {'vagrantconfig': vagrant_config}) else: raise KiwiDiskFormatSetupError( 'No support for {0} format with {1} provider'.format( name, provider)) elif name == 'raw': return DiskFormatBase(xml_state, root_dir, target_dir) else: raise KiwiDiskFormatSetupError( 'No support for {0} disk format'.format(name))
def post_init(self, custom_args): """ vmdk disk format post initialization method Store qemu options as list from custom args dict :param dict custom_args: custom qemu arguments dictionary """ ovftype = self.xml_state.get_build_type_machine_section().get_ovftype() if ovftype != 'vmware': raise KiwiFormatSetupError('Unsupported ovftype %s' % ovftype) self.image_format = 'ova' self.options = self.get_qemu_option_list(custom_args) self.vmdk = DiskFormatVmdk(self.xml_state, self.root_dir, self.target_dir, custom_args)
def create_box_img(self, temp_image_dir: str) -> List[str]: """ Create the vmdk image for the Virtualbox vagrant provider. This function creates the vmdk disk image and the ovf file. The latter is created via the class :class:`VirtualboxOvfTemplate`. :param str temp_image_dir: Path to the temporary directory used to build the box image :return: A list of files relevant for the virtualbox box to be included in the vagrant box :rtype: list """ vmdk = DiskFormatVmdk(self.xml_state, self.root_dir, self.target_dir) vmdk.create_image_format() box_img = os.sep.join([temp_image_dir, 'box.vmdk']) Command.run([ 'mv', self.get_target_file_path_for_format(vmdk.image_format), box_img ]) box_ovf = os.sep.join([temp_image_dir, 'box.ovf']) ovf_template = VirtualboxOvfTemplate() disk_image_capacity = self.vagrantconfig.get_virtualsize() or 42 xml_description_specification = self.xml_state \ .get_description_section().specification with open(box_ovf, "w") as ovf_file: ovf_file.write(ovf_template.get_template().substitute({ 'root_uuid': self.xml_state.get_root_filesystem_uuid(), 'vm_name': self.xml_state.xml_data.name, 'disk_image_capacity': disk_image_capacity, 'vm_description': xml_description_specification })) return [box_img, box_ovf]
def setup(self, mock_machine): mock_machine.return_value = 'x86_64' xml_data = mock.Mock() xml_data.get_name = mock.Mock(return_value='some-disk-image') xml_data.get_displayname = mock.Mock(return_value=None) self.xml_state = mock.Mock() self.xml_state.xml_data = xml_data self.xml_state.get_image_version = mock.Mock(return_value='1.2.3') self.machine_setup = mock.Mock() self.xml_state.get_build_type_machine_section = mock.Mock( return_value=self.machine_setup) self.machine_setup.get_HWversion = mock.Mock(return_value='42') self.machine_setup.get_guestOS = mock.Mock(return_value='suse') self.machine_setup.get_memory = mock.Mock(return_value='4096') self.machine_setup.get_ncpus = mock.Mock(return_value='2') self.iso_setup = mock.Mock() self.xml_state.get_build_type_vmdvd_section = mock.Mock( return_value=self.iso_setup) self.iso_setup.get_controller = mock.Mock(return_value='ide') self.iso_setup.get_id = mock.Mock(return_value='0') self.network_setup = mock.Mock() self.xml_state.get_build_type_vmnic_section = mock.Mock( return_value=self.network_setup) self.network_setup.get_interface = mock.Mock(return_value='0') self.network_setup.get_mac = mock.Mock( return_value='98:90:96:a0:3c:58') self.network_setup.get_mode = mock.Mock(return_value='bridged') self.network_setup.get_driver = mock.Mock(return_value='e1000') self.disk_setup = mock.Mock() self.xml_state.get_build_type_vmdisk_section = mock.Mock( return_value=self.disk_setup) self.disk_setup.get_controller = mock.Mock(return_value='lsilogic') self.disk_setup.get_id = mock.Mock(return_value='0') self.disk_format = DiskFormatVmdk(self.xml_state, 'root_dir', 'target_dir') self.vmdk_header_update = dedent(''' encoding="UTF-8" dd-out ddb.toolsInstallType = "4" ddb.toolsVersion = "9350" ''').strip() self.vmdk_settings_formatted = dedent(''' #!/usr/bin/env vmware # kiwi generated VMware settings file config.version = "8" tools.syncTime = "true" uuid.action = "create" virtualHW.version = "42" displayName = "some-disk-image" guestOS = "suse" priority.grabbed = "normal" priority.ungrabbed = "normal" powerType.powerOff = "soft" powerType.powerOn = "soft" powerType.suspend = "soft" powerType.reset = "soft" memsize = "4096" numvcpus = "2" scsi0.present = "true" scsi0.sharedBus = "none" scsi0.virtualDev = "lsilogic" scsi0:0.present = "true" scsi0:0.fileName = "target_dir/some-disk-image.x86_64-1.2.3.vmdk" scsi0:0.deviceType = "scsi-hardDisk" ethernet0.present = "true" ethernet0.allow64bitVmxnet = "true" ethernet0.addressType = "static" ethernet0.address = "98:90:96:a0:3c:58" ethernet0.virtualDev = "e1000" ethernet0.connectionType = "bridged" ide0:0.present = "true" ide0:0.deviceType = "cdrom-raw" ide0:0.autodetect = "true" ide0:0.startConnected = "true" usb.present = "true" ''').strip() + '\n' self.vmdk_settings = '' for entry in self.vmdk_settings_formatted.split('\n'): if entry: self.vmdk_settings += entry.strip() + '\n'