controller: 100G
compute: 100G
-number_cpus:
- # Entry is not mandatory! If it is left empty
- # the default is 2 cpus per node
- controller: 2
+# Here the infrastructure VMs can be defined.
+# The entries are not mandatory! If it is left empty
+# the default defined in deploy/templates will
+# be used.
+define_vms:
+ fuel:
+ vcpu:
+ value: 2
+ memory:
+ attribute_equlas:
+ unit: KiB
+ value: 8388608
+ currentMemory:
+ attribute_equlas:
+ unit: KiB
+ value: 8388608
+ devices:
+ interface:
+ # With attribute_equlas someone can define which
+ # interface type is meant
+ attribute_equlas:
+ type: network
+ # This will overwrite the type of the model of
+ # the interface
+ model:
+ attribute:
+ type: e1000
+ controller:
+ devices:
+ interface:
+ attribute_equlas:
+ type: network
+ model:
+ attribute:
+ type: e1000
+ compute:
+ devices:
+ interface:
+ attribute_equlas:
+ type: network
+ model:
+ attribute:
+ type: e1000
+
def get_disks(self):
return self.dha_struct['disks']
- def get_number_cpus(self, role):
- role_cpus_dict = self.dha_struct.get('number_cpus')
- if role_cpus_dict:
- return role_cpus_dict.get(role)
+ def get_vm_definition(self, role):
+ vm_definition = self.dha_struct.get('define_vms')
+ if vm_definition:
+ return vm_definition.get(role)
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)
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
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):
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):