Bug 683 Modify the ovf_converter tool to have a option for adding a cd/dvd device
Change-Id: Ibc754d0b2bd68ddb788252299f888a64dfa598f4
Signed-off-by: Ananda Baitharu <ananda.baitharu@riftio.com>
diff --git a/tools/OVF_converter/format_converter/converter.py b/tools/OVF_converter/format_converter/converter.py
index 3c647a9..ca2a369 100644
--- a/tools/OVF_converter/format_converter/converter.py
+++ b/tools/OVF_converter/format_converter/converter.py
@@ -33,6 +33,8 @@
MODULE_DIR = os.path.dirname(__file__)
OVF_TEMPLATE_PATH = os.path.join(os.path.dirname(MODULE_DIR),
"ovf_template/template.xml")
+IDE_CDROM_XML_PATH = os.path.join(os.path.dirname(MODULE_DIR),
+ "ovf_template/ide_cdrom.xml")
OS_INFO_FILE_PATH = os.path.join(os.path.dirname(MODULE_DIR),
"config/os_type.yaml")
DISK_CONTROLLER_INFO_FILE_PATH = os.path.join(os.path.dirname(MODULE_DIR),
@@ -62,7 +64,7 @@
def __init__(self, source_img_path, output_location=None, output_ovf_name=None,
memory=None, cpu=None, disk=None, os_type=None,
- disk_controller=None,
+ disk_controller=None, cdrom=None,
options={'subformat':'streamOptimized'}):
"""
Constructor to initialize object of class OVFConverter
@@ -126,6 +128,7 @@
self.memory = str(memory) if memory is not None else None
self.cpu = str(cpu) if cpu is not None else None
self.os_type=str(os_type).strip() if os_type else None
+ self.cdrom = cdrom
if self.os_type:
self.osID , self.osType = self.__get_osType()
@@ -363,8 +366,14 @@
resource_subtype.getparent().remove(resource_subtype)
if "resourceSubType" in self.disk_controller_info:
resource_subtype.text = self.disk_controller_info["resourceSubType"]
+ if self.cdrom:
+ last_item = list(virtualHardwareSection.iterfind('xmlns:Item',nsmap))[-1]
+ ide_cdrom_items_etree = ET.parse(IDE_CDROM_XML_PATH)
+ ide_cdrom_items = list(ide_cdrom_items_etree.iterfind('Item'))
+ for item in ide_cdrom_items:
+ last_item.addnext(item)
- #Save output OVF
+ # Save output OVF
OVF_tree.write(self.output_path, xml_declaration=True,encoding='utf-8',
method="xml" )
diff --git a/tools/OVF_converter/format_converter/ovf_converter_cli.py b/tools/OVF_converter/format_converter/ovf_converter_cli.py
index 209c05d..a505bfe 100644
--- a/tools/OVF_converter/format_converter/ovf_converter_cli.py
+++ b/tools/OVF_converter/format_converter/ovf_converter_cli.py
@@ -68,6 +68,9 @@
" (default controller SCSI with lsilogicsas) "\
"(SATA, IDE, Paravirtual, Buslogic, Lsilogic, Lsilogicsas) (optional)")
+ parser.add_argument("--cdrom", action="store_true",
+ help="whether to include a cd/dvd device (optional)")
+
args = parser.parse_args()
if args.path:
@@ -79,6 +82,7 @@
disk=args.disk,
os_type=args.osType,
disk_controller=args.disk_Controller,
+ cdrom=args.cdrom,
)
print("#### Start OVF conversion ####")
diff --git a/tools/OVF_converter/ovf_template/ide_cdrom.xml b/tools/OVF_converter/ovf_template/ide_cdrom.xml
new file mode 100644
index 0000000..ffab392
--- /dev/null
+++ b/tools/OVF_converter/ovf_template/ide_cdrom.xml
@@ -0,0 +1,19 @@
+<Items>
+ <Item xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">
+ <rasd:AddressOnParent>0</rasd:AddressOnParent>
+ <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
+ <rasd:Description>CD/DVD Drive</rasd:Description>
+ <rasd:ElementName>CD/DVD Drive 1</rasd:ElementName>
+ <rasd:HostResource/>
+ <rasd:InstanceID>3002</rasd:InstanceID>
+ <rasd:Parent>50</rasd:Parent>
+ <rasd:ResourceType>15</rasd:ResourceType>
+ </Item>
+ <Item xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">
+ <rasd:Address>1</rasd:Address>
+ <rasd:Description>IDE Controller</rasd:Description>
+ <rasd:ElementName>IDE Controller 1</rasd:ElementName>
+ <rasd:InstanceID>50</rasd:InstanceID>
+ <rasd:ResourceType>5</rasd:ResourceType>
+ </Item>
+</Items>
diff --git a/tools/OVF_converter/readme.txt b/tools/OVF_converter/readme.txt
index 0e6117b..f74acb1 100644
--- a/tools/OVF_converter/readme.txt
+++ b/tools/OVF_converter/readme.txt
@@ -119,7 +119,7 @@
root@ubuntu:/home/vmware/OVF_converter# ovf_converter -h
Usage: ovf_converter_cli.py [-h] [-v] [-o OUTPUT_LOCATION] [-n OVF_NAME]
[-m MEMORY] [-c CPU] [-d DISK] [-s OSTYPE]
- [-dc DISK_CONTROLLER]
+ [-dc DISK_CONTROLLER] [--cdrom]
path
OVF converter to convert .qcow2 or raw image into OVF
@@ -151,6 +151,7 @@
required disk controller type (default controller SCSI
with lsilogicsas) (SATA, IDE, Paravirtual, Buslogic,
lsilogic, lsilogicsas) (optional)
+ --cdrom whether to include a cd/dvd device (optional)
o Create OVF file from qcow2 or raw disk image as: