From 875d2f23d76d4dfb4f962f578aaae7bc089af5a7 Mon Sep 17 00:00:00 2001 From: Nikolas Hermanns Date: Fri, 18 Mar 2016 10:26:37 +0100 Subject: Configure the infra VMs over DHA This commit enables the full configuration of the VM(fuel/controller/compute) defintion through the dha file. Change-Id: I4e78334d1e5aec1e98667343390283587f0b3ea5 --- deploy/environments/execution_environment.py | 31 +++++++++++++++++++++++----- deploy/environments/libvirt_environment.py | 7 ++++--- deploy/environments/virtual_fuel.py | 5 +++-- 3 files changed, 33 insertions(+), 10 deletions(-) (limited to 'deploy/environments') diff --git a/deploy/environments/execution_environment.py b/deploy/environments/execution_environment.py index c2e7a0b23..2a4e39e08 100644 --- a/deploy/environments/execution_environment.py +++ b/deploy/environments/execution_environment.py @@ -50,7 +50,30 @@ class ExecutionEnvironment(object): for file in disk_files: delete(file) - def define_vm(self, vm_name, temp_vm_file, disk_path, number_cpus): + def overwrite_xml(self, vm_xml, vm_definition_overwrite): + for key, value in vm_definition_overwrite.iteritems(): + if key == 'attribute_equlas': + continue + if key == 'value': + vm_xml.text = str(value) + return + if key == 'attribute': + for attr_key, attr_value in value.iteritems(): + vm_xml.set(attr_key, str(attr_value)) + return + + if isinstance(value, dict): + only_when_attribute = value.get('attribute_equlas') + for xml_element in vm_xml.xpath(key): + if only_when_attribute: + for attr_key, attr_value in \ + only_when_attribute.iteritems(): + if attr_value != xml_element.get(attr_key): + continue + self.overwrite_xml(xml_element, value) + + def define_vm(self, vm_name, temp_vm_file, disk_path, + vm_definition_overwrite): log('Creating VM %s with disks %s' % (vm_name, disk_path)) with open(temp_vm_file) as f: vm_xml = etree.parse(f) @@ -60,10 +83,8 @@ class ExecutionEnvironment(object): uuids = vm_xml.xpath('/domain/uuid') for uuid in uuids: uuid.getparent().remove(uuid) - if number_cpus: - vcpus = vm_xml.xpath('/domain/vcpu') - for vcpu in vcpus: - vcpu.text = str(number_cpus) + self.overwrite_xml(vm_xml.xpath('/domain')[0], + vm_definition_overwrite) disks = vm_xml.xpath('/domain/devices/disk') for disk in disks: if (disk.get('type') == 'file' and diff --git a/deploy/environments/libvirt_environment.py b/deploy/environments/libvirt_environment.py index 380262c7e..c9fa41fd7 100644 --- a/deploy/environments/libvirt_environment.py +++ b/deploy/environments/libvirt_environment.py @@ -49,11 +49,12 @@ class LibvirtEnvironment(ExecutionEnvironment): check_file_exists(vm_template) disk_path = '%s/%s.raw' % (self.storage_dir, vm_name) self.create_storage(node_id, disk_path, disk_sizes) - number_cpus = self.dha.get_number_cpus( - self.dea.get_node_main_role(node_id, self.fuel_node_id)) temp_vm_file = '%s/%s' % (temp_dir, vm_name) exec_cmd('cp %s %s' % (vm_template, temp_vm_file)) - self.define_vm(vm_name, temp_vm_file, disk_path, number_cpus) + vm_definition_overwrite = self.dha.get_vm_definition( + self.dea.get_node_main_role(node_id, self.fuel_node_id)) + self.define_vm(vm_name, temp_vm_file, disk_path, + vm_definition_overwrite) delete(temp_dir) def start_vms(self): diff --git a/deploy/environments/virtual_fuel.py b/deploy/environments/virtual_fuel.py index 62082185f..cb3bc6c51 100644 --- a/deploy/environments/virtual_fuel.py +++ b/deploy/environments/virtual_fuel.py @@ -55,12 +55,13 @@ class VirtualFuel(ExecutionEnvironment): disk_path = '%s/%s.raw' % (self.storage_dir, vm_name) disk_sizes = self.dha.get_disks() disk_size = disk_sizes['fuel'] - number_cpus = self.dha.get_number_cpus('fuel') exec_cmd('qemu-img create -f qcow2 %s %s' % (disk_path, disk_size)) temp_vm_file = '%s/%s' % (temp_dir, vm_name) exec_cmd('cp %s %s' % (vm_template, temp_vm_file)) self.set_vm_nic(temp_vm_file) - self.define_vm(vm_name, temp_vm_file, disk_path, number_cpus) + vm_definition_overwrite = self.dha.get_vm_definition('fuel') + self.define_vm(vm_name, temp_vm_file, disk_path, + vm_definition_overwrite) delete(temp_dir) def setup_environment(self): -- cgit 1.2.3-korg