Skip to content

Commit 2af3e2d

Browse files
committed
import_libvirt: import metadata file in domain description
1 parent e22405d commit 2af3e2d

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

packer-templates/import_libvirt.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@
2727
POOL_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

3943
def 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)

packer-templates/template_domain.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<domain type='kvm'>
22
<name>{}</name>
33
<memory unit='MB'>1500</memory>
4+
<description>{}</description>
45
<vcpu placement='static'>1</vcpu>
56
<os>
67
<type arch='x86_64' machine='pc'>hvm</type>

0 commit comments

Comments
 (0)