2727POOL_PATH = Path (SCRIPT_DIR / POOL_DIR_PATH_REL ).resolve ()
2828
2929
30- def prepare_domain_xml (vm_name , osw_image_path ):
30+ def prepare_domain_xml (vm_name , osw_image_path , metadata_path ):
3131 with open ('template_domain.xml' ) as templ :
3232 domain_xml = templ .read ()
33- domain_xml = domain_xml .format (vm_name , osw_image_path )
34- root = tree .fromstring (domain_xml )
35- domain_xml = tree .tostring (root ).decode ()
36- return domain_xml
33+ with open (metadata_path ) as metadata_file :
34+ # we need to escape some JSON characters which are not valid in XML
35+ # TODO find a Python library to do that
36+ esc_metadata = metadata_file .read ().replace ('"' , '"' )
37+ domain_xml = domain_xml .format (vm_name , esc_metadata , osw_image_path )
38+ root = tree .fromstring (domain_xml )
39+ domain_xml = tree .tostring (root ).decode ()
40+ return domain_xml
3741
3842
3943def setup_storage_pool (con , pool_name ):
@@ -75,7 +79,7 @@ def append_qcow(disk_image):
7579 return disk_image
7680
7781
78- def setup_domain (con , vm_name , pool , pool_path , disk_image ):
82+ def setup_domain (con , vm_name , pool , pool_path , disk_image , metadata ):
7983 # check if domain is already defined
8084 domain_name = '{}-{}' .format (PREFIX , disk_image .stem )
8185 if not vm_name :
@@ -87,7 +91,7 @@ def setup_domain(con, vm_name, pool, pool_path, disk_image):
8791 # move image to oswatcher pool
8892 osw_image_path = pool_path / disk_image .name
8993 shutil .move (str (disk_image ), str (osw_image_path ))
90- domain_xml = prepare_domain_xml (vm_name , osw_image_path )
94+ domain_xml = prepare_domain_xml (vm_name , osw_image_path , metadata )
9195 con .defineXML (domain_xml )
9296 logging .info ('Domain %s defined.' , vm_name )
9397 domain = con .lookupByName (vm_name )
@@ -113,8 +117,12 @@ def main(args):
113117
114118 for disk_image in disk_image_list :
115119 disk_image = Path (disk_image ).absolute ()
120+ metadata = disk_image .with_suffix ('.json' )
121+ if not metadata .exists ():
122+ logging .error ('Could not find metadata file for image: %s' , str (disk_image ))
123+ raise RuntimeError ('Fail to find metadata file' )
116124 pool , pool_path = setup_storage_pool (con , pool_name )
117- setup_domain (con , vm_name , pool , pool_path , disk_image )
125+ setup_domain (con , vm_name , pool , pool_path , disk_image , metadata )
118126 # remove output-qemu
119127 logging .info ('Removing output-qemu' )
120128 output_qemu_path = Path (SCRIPT_DIR / PACKER_OUTPUT_DIR )
0 commit comments