diff options
Diffstat (limited to 'deploy')
-rw-r--r-- | deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml | 48 | ||||
-rw-r--r-- | deploy/deploy-config.py | 51 | ||||
-rw-r--r-- | deploy/dha_adapters/hardware_adapter.py | 8 | ||||
-rw-r--r-- | deploy/environments/execution_environment.py | 33 | ||||
-rw-r--r-- | deploy/environments/libvirt_environment.py | 7 | ||||
-rw-r--r-- | deploy/environments/virtual_fuel.py | 5 | ||||
-rw-r--r-- | deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario_0.0.5.yaml | 180 | ||||
-rw-r--r-- | deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario_0.0.4.yaml | 155 | ||||
-rw-r--r-- | deploy/scenario/scenario.yaml | 4 |
9 files changed, 468 insertions, 23 deletions
diff --git a/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml b/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml index 851509871..07faeb1f2 100644 --- a/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml +++ b/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml @@ -37,7 +37,47 @@ disks: 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 + diff --git a/deploy/deploy-config.py b/deploy/deploy-config.py index a0a44c1ed..d1e9cd47a 100644 --- a/deploy/deploy-config.py +++ b/deploy/deploy-config.py @@ -78,6 +78,13 @@ def parse_arguments(): 'output_path': args.output_path} return kwargs +def warning(msg): + red = '\033[0;31m' + NC = '\033[0m' + print('%(red)s WARNING: %(msg)s %(NC)s' % {'red': red, + 'msg': msg, + 'NC': NC}) + def setup_yaml(): represent_dict_order = lambda self, data: self.represent_mapping('tag:yaml.org,2002:map', data.items()) yaml.add_representer(collections.OrderedDict, represent_dict_order) @@ -90,14 +97,52 @@ def sha_uri(uri): sha1.update(data) return sha1.hexdigest() +def merge_fuel_plugin_version_list(list1, list2): + final_list = [] + # When the plugin version in not there in list1 it will + # not be copied + for e_l1 in list1: + plugin_version = e_l1.get('metadata', + {'plugin_version', None}).get('plugin_version') + plugin_version_found = False + for e_l2 in list2: + if plugin_version == e_l2.get('metadata', + {'plugin_version', + None}).get('plugin_version'): + final_list.append(dict(mergedicts(e_l1, e_l2))) + plugin_version_found = True + if not plugin_version_found: + final_list.append(e_l1) + return final_list + +def merge_lists(list1, list2): + if list1 and list2: + if isinstance(list1[0], dict): + if 'plugin_version' in list1[0].get('metadata', {}): + return merge_fuel_plugin_version_list(list1, list2) + else: + warning("Lists with dictionary inside are not merge able! " + "List2 will overwrite List1. " + "List1: %s; List2: %s" + % (list1, list2)) + return list2 + else: + return list2 + elif list1: + return list1 + else: + return list2 + def mergedicts(dict1, dict2): for k in set(dict1.keys()).union(dict2.keys()): if k in dict1 and k in dict2: if isinstance(dict1[k], dict) and isinstance(dict2[k], dict): yield (k, dict(mergedicts(dict1[k], dict2[k]))) + elif isinstance(dict1[k], list) and isinstance(dict2[k], list): + yield (k, merge_lists(dict1[k], dict2[k])) else: - # If one of the values is not a dict, you can't continue - # merging it. + # If one of the values is not a dict nor a list, + # you can't continue merging it. # Value from second dict overrides one in first and we move on. yield (k, dict2[k]) elif k in dict1: @@ -194,7 +239,7 @@ if deploy_scenario_conf["stack-extensions"]: module_comments.append(str(module_conf['plugin-config-metadata']['comment'])) module_conf.pop('plugin-config-metadata') final_dea_conf['settings']['editable'].update(module_conf) - scenario_module_override_conf = module['module-config-override'] + scenario_module_override_conf = module.get('module-config-override') if scenario_module_override_conf: dea_scenario_module_override_conf = {} dea_scenario_module_override_conf['settings'] = {} diff --git a/deploy/dha_adapters/hardware_adapter.py b/deploy/dha_adapters/hardware_adapter.py index 55bb4002e..aa59581ee 100644 --- a/deploy/dha_adapters/hardware_adapter.py +++ b/deploy/dha_adapters/hardware_adapter.py @@ -59,7 +59,7 @@ class HardwareAdapter(object): 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) diff --git a/deploy/environments/execution_environment.py b/deploy/environments/execution_environment.py index c2e7a0b23..af0e130dd 100644 --- a/deploy/environments/execution_environment.py +++ b/deploy/environments/execution_environment.py @@ -50,7 +50,32 @@ 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): + if not vm_definition_overwrite: + return + 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 +85,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): diff --git a/deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario_0.0.5.yaml b/deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario_0.0.5.yaml new file mode 100644 index 000000000..2941a726e --- /dev/null +++ b/deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario_0.0.5.yaml @@ -0,0 +1,180 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# jonas.bjurel@ericsson.com +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +############################################################################### # Description: +# This .yaml configuration file defines the configuration of the fuel +# deployment and is passed as an argument to deploy.sh +# eg. deploy.sh -c https://artifact.opnfv.org/fuel/config +# This will make build.sh fetch this configuration file and configure the +# deployment accordingly. +# After the deployment, a copy of this file gets uploaded to fuel: +# /root/deploy-config.yaml, as well as the sha-1 sum of this file: +# /root/deploy-config.sha1 +############################################################################## + +############################################################################## +# deployment configuration meta-data +deployment-scenario-metadata: + title: NFV KVM HA deployment + version: 0.0.5 + created: Mar 18 2016 + comment: Ceph cannot be assigned to compute, ceph is collocated with one of the controllers + +############################################################################## +# Stack extentions are opnfv added value features in form of a fuel-plugin +# plug-ins listed below will be enabled and configured according to the +# <module-config-base-uri>/<module-config-name>_<module-config-version>.yaml +# It does so by copying the config file to the local plugin config directory +stack-extensions: + - module: fuel-plugin-qemu + module-config-name: fuel-nfvkvm + module-config-version: 0.0.2 + module-config-override: + # Module config overrides + +############################################################################## +# By editing the override-config sections below, you can override arbitrary +# configuration name-space settings +dea-override-config: + environment: + net_segment_type: tun + nodes: + - id: 1 + interfaces: interfaces_1 + role: mongo,controller + transformations: transformations_1 + - id: 2 + interfaces: interfaces_1 + role: controller,ceph-osd + transformations: transformations_1 + - id: 3 + interfaces: interfaces_1 + role: controller + transformations: transformations_1 + - id: 4 + interfaces: interfaces_1 + role: compute + transformations: transformations_1 + - id: 5 + interfaces: interfaces_1 + role: compute + transformations: transformations_1 + + settings: + editable: + storage: + ephemeral_ceph: + description: Configures Nova to store ephemeral volumes in RBD. This works best if Ceph is enabled for volumes and images, too. Enables live migration of all types of Ceph backed VMs (without this option, live migration will only work with VMs launched from Cinder volumes). + label: Ceph RBD for ephemeral volumes (Nova) + type: checkbox + value: false + weight: 75 + images_ceph: + description: Configures Glance to use the Ceph RBD backend to store images. If enabled, this option will prevent Swift from installing. + label: Ceph RBD for images (Glance) + restrictions: + - settings:storage.images_vcenter.value == true: Only one Glance backend could be selected. + type: checkbox + value: false + weight: 30 + images_vcenter: + description: Configures Glance to use the vCenter/ESXi backend to store images. If enabled, this option will prevent Swift from installing. + label: VMware vCenter/ESXi datastore for images (Glance) + restrictions: + - action: hide + condition: settings:common.use_vcenter.value != true + - condition: settings:storage.images_ceph.value == true + message: Only one Glance backend could be selected. + type: checkbox + value: false + weight: 35 + iser: + description: 'High performance block storage: Cinder volumes over iSER protocol (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC, and will use a dedicated virtual function for the storage network.' + label: iSER protocol for volumes (Cinder) + restrictions: + - settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value != 'kvm' + - action: hide + condition: not ('experimental' in version:feature_groups) + type: checkbox + value: false + weight: 11 + metadata: + group: storage + label: Storage Backends + weight: 60 + objects_ceph: + description: Configures RadosGW front end for Ceph RBD. This exposes S3 and Swift API Interfaces. If enabled, this option will prevent Swift from installing. + label: Ceph RadosGW for objects (Swift API) + type: checkbox + value: false + weight: 80 + osd_pool_size: + description: Configures the default number of object replicas in Ceph. This number must be equal to or lower than the number of deployed 'Storage - Ceph OSD' nodes. + label: Ceph object replication factor + regex: + error: Invalid number + source: ^[1-9]\d*$ + type: text + value: '1' + weight: 85 + volumes_block_device: + description: High performance block device storage. It is recommended to have at least one Storage - Cinder Block Device + label: Cinder Block device driver + restrictions: + - settings:storage.volumes_ceph.value == true + type: checkbox + value: false + weight: 15 + volumes_ceph: + description: Configures Cinder to store volumes in Ceph RBD images. + label: Ceph RBD for volumes (Cinder) + restrictions: + - settings:storage.volumes_lvm.value == true or settings:storage.volumes_block_device.value == true + type: checkbox + value: true + weight: 20 + volumes_lvm: + description: It is recommended to have at least one Storage - Cinder LVM node. + label: Cinder LVM over iSCSI for volumes + restrictions: + - settings:storage.volumes_ceph.value == true + type: checkbox + value: false + weight: 10 + +dha-override-config: + nodes: + - id: 1 + libvirtName: controller1 + libvirtTemplate: templates/virtual_environment/vms/controller.xml + - id: 2 + libvirtName: controller2 + libvirtTemplate: templates/virtual_environment/vms/controller.xml + - id: 3 + libvirtName: controller3 + libvirtTemplate: templates/virtual_environment/vms/controller.xml + - id: 4 + libvirtName: compute1 + libvirtTemplate: templates/virtual_environment/vms/compute.xml + - id: 5 + libvirtName: compute2 + libvirtTemplate: templates/virtual_environment/vms/compute.xml + - id: 6 + libvirtName: fuel-master + libvirtTemplate: templates/virtual_environment/vms/fuel.xml + isFuel: yes + username: root + password: r00tme + + +############################################################################## +# The verification pipeline may populate the section below with arbitrary +# testing information, which post deploy can be retreived from the fuel master: +# /root/deploy-config.yaml +test: diff --git a/deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario_0.0.4.yaml b/deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario_0.0.4.yaml new file mode 100644 index 000000000..08fc041e3 --- /dev/null +++ b/deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario_0.0.4.yaml @@ -0,0 +1,155 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# jonas.bjurel@ericsson.com +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +############################################################################### # Description: +# This .yaml configuration file defines the configuration of the fuel +# deployment and is passed as an argument to deploy.sh +# eg. deploy.sh -c https://artifact.opnfv.org/fuel/config +# This will make build.sh fetch this configuration file and configure the +# deployment accordingly. +# After the deployment, a copy of this file gets uploaded to fuel: +# /root/deploy-config.yaml, as well as the sha-1 sum of this file: +# /root/deploy-config.sha1 +############################################################################## + +############################################################################## +# deployment configuration meta-data +deployment-scenario-metadata: + title: NFV KVM NO-HA deployment + version: 0.0.4 + created: Mar 18 2016 + comment: Ceph cannot be assigned to compute, using a seperate node for it + +############################################################################## +# Stack extentions are opnfv added value features in form of a fuel-plugin +# plug-ins listed below will be enabled and configured according to the +# <module-config-base-uri>/<module-config-name>_<module-config-version>.yaml +# It does so by copying the config file to the local plugin config directory +stack-extensions: + - module: fuel-plugin-qemu + module-config-name: fuel-nfvkvm + module-config-version: 0.0.2 + module-config-override: + # Module config overrides + +############################################################################## +# By editing the override-config sections below, you can override arbitrary +# configuration name-space settings +dea-override-config: + environment: + net_segment_type: tun + nodes: + - id: 1 + interfaces: interfaces_1 + role: mongo,controller + transformations: transformations_1 + - id: 2 + interfaces: interfaces_1 + role: ceph-osd + transformations: transformations_1 + - id: 3 + interfaces: interfaces_1 + role: compute + transformations: transformations_1 + - id: 4 + interfaces: interfaces_1 + role: compute + transformations: transformations_1 + + settings: + editable: + storage: + ephemeral_ceph: + description: Configures Nova to store ephemeral volumes in RBD. This works best if Ceph is enabled for volumes and images, too. Enables live migration of all types of Ceph backed VMs (without this option, live migration will only work with VMs launched from Cinder volumes). + label: Ceph RBD for ephemeral volumes (Nova) + type: checkbox + value: false + weight: 75 + images_ceph: + description: Configures Glance to use the Ceph RBD backend to store images. If enabled, this option will prevent Swift from installing. + label: Ceph RBD for images (Glance) + restrictions: + - settings:storage.images_vcenter.value == true: Only one Glance backend could be selected. + type: checkbox + value: false + weight: 30 + images_vcenter: + description: Configures Glance to use the vCenter/ESXi backend to store images. If enabled, this option will prevent Swift from installing. + label: VMware vCenter/ESXi datastore for images (Glance) + restrictions: + - action: hide + condition: settings:common.use_vcenter.value != true + - condition: settings:storage.images_ceph.value == true + message: Only one Glance backend could be selected. + type: checkbox + value: false + weight: 35 + iser: + description: 'High performance block storage: Cinder volumes over iSER protocol (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC, and will use a dedicated virtual function for the storage network.' + label: iSER protocol for volumes (Cinder) + restrictions: + - settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value != 'kvm' + - action: hide + condition: not ('experimental' in version:feature_groups) + type: checkbox + value: false + weight: 11 + metadata: + group: storage + label: Storage Backends + weight: 60 + objects_ceph: + description: Configures RadosGW front end for Ceph RBD. This exposes S3 and Swift API Interfaces. If enabled, this option will prevent Swift from installing. + label: Ceph RadosGW for objects (Swift API) + type: checkbox + value: false + weight: 80 + osd_pool_size: + description: Configures the default number of object replicas in Ceph. This number must be equal to or lower than the number of deployed 'Storage - Ceph OSD' nodes. + label: Ceph object replication factor + regex: + error: Invalid number + source: ^[1-9]\d*$ + type: text + value: '1' + weight: 85 + volumes_block_device: + description: High performance block device storage. It is recommended to have at least one Storage - Cinder Block Device + label: Cinder Block device driver + restrictions: + - settings:storage.volumes_ceph.value == true + type: checkbox + value: false + weight: 15 + volumes_ceph: + description: Configures Cinder to store volumes in Ceph RBD images. + label: Ceph RBD for volumes (Cinder) + restrictions: + - settings:storage.volumes_lvm.value == true or settings:storage.volumes_block_device.value == true + type: checkbox + value: true + weight: 20 + volumes_lvm: + description: It is recommended to have at least one Storage - Cinder LVM node. + label: Cinder LVM over iSCSI for volumes + restrictions: + - settings:storage.volumes_ceph.value == true + type: checkbox + value: false + weight: 10 + +dha-override-config: +# disks: +# contrail: 500G + +############################################################################## +# The verification pipeline may populate the section below with arbitrary +# testing information, which post deploy can be retreived from the fuel master: +# /root/deploy-config.yaml +test: diff --git a/deploy/scenario/scenario.yaml b/deploy/scenario/scenario.yaml index f7d06510c..90f7b8367 100644 --- a/deploy/scenario/scenario.yaml +++ b/deploy/scenario/scenario.yaml @@ -53,10 +53,10 @@ os-onos-nofeature-noha: configfile: no-ha_onos_heat_ceilometer_scenario_0.0.4.yaml os-nosdn-kvm-ha: - configfile: ha_nfv-kvm_heat_ceilometer_scenario_0.0.4.yaml + configfile: ha_nfv-kvm_heat_ceilometer_scenario_0.0.5.yaml os-nosdn-kvm-noha: - configfile: no-ha_nfv-kvm_heat_ceilometer_scenario_0.0.3.yaml + configfile: no-ha_nfv-kvm_heat_ceilometer_scenario_0.0.4.yaml os-nosdn-ovs-ha: configfile: ha_nfv-ovs_heat_ceilometer_scenario_0.0.4.yaml |