From bef972ea691f73527a845cd8a8b89f1958eb9cb2 Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Sun, 5 Aug 2018 19:36:01 +0200 Subject: [scenarios] Differentiate virtual node roles Split scenario yaml definitions for virtual.nodes based on node role ('infra', 'control' or 'compute'), to be leveraged later to contruct node lists based on said role. This moves the responsability of filtering node names in scenario files (based on 'virtual' or 'baremetal' type) to xdf_data.sh.j2, simplifying scenario templates. By keeping all nodes (both virtual and baremetal) in scenario files, we can later determine the role (and implicitly the hostname) for a MaaS-managed node based on its index in the virtual.nodes.control structure. JIRA: FUEL-382 Change-Id: I1f83a307631f4166ee1c57ef598c44876b962f97 Signed-off-by: Alexandru Avadanii --- mcp/config/scenario/os-nosdn-nofeature-ha.yaml.j2 | 25 ++++++-------- mcp/config/scenario/os-nosdn-nofeature-noha.yaml | 13 ++++--- mcp/config/scenario/os-nosdn-ovs-ha.yaml.j2 | 25 ++++++-------- mcp/config/scenario/os-nosdn-ovs-noha.yaml | 13 ++++--- mcp/config/scenario/os-odl-nofeature-ha.yaml.j2 | 25 ++++++-------- mcp/config/scenario/os-odl-nofeature-noha.yaml | 15 +++++---- mcp/config/scenario/os-odl-ovs-noha.yaml | 15 +++++---- mcp/config/scenario/os-ovn-nofeature-ha.yaml.j2 | 25 ++++++-------- mcp/config/scenario/os-ovn-nofeature-noha.yaml | 11 +++--- mcp/scripts/lib.sh | 1 + mcp/scripts/xdf_data.sh.j2 | 41 +++++++++++++++++++---- 11 files changed, 121 insertions(+), 88 deletions(-) diff --git a/mcp/config/scenario/os-nosdn-nofeature-ha.yaml.j2 b/mcp/config/scenario/os-nosdn-nofeature-ha.yaml.j2 index 26938262e..7eb604e65 100644 --- a/mcp/config/scenario/os-nosdn-nofeature-ha.yaml.j2 +++ b/mcp/config/scenario/os-nosdn-nofeature-ha.yaml.j2 @@ -21,25 +21,22 @@ cluster: - networks virtual: nodes: - - cfg01 + infra: + - cfg01 {%- if nm.cluster.has_baremetal_nodes %} - - mas01 -{%- endif %} -{#- Most likely, controllers will always have the same type and number (3) #} -{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %} - - kvm01 - - kvm02 - - kvm03 -{%- endif %} -{#- Later, we might have mixed computes here, for hybrid multi-arch testing #} -{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %} - - cmp001 - - cmp002 + - mas01 {%- endif %} + control: + - kvm01 + - kvm02 + - kvm03 + compute: + - cmp001 + - cmp002 + # Below values are only used for each node if said node is virtual cfg01: vcpus: 4 ram: 6144 - # Below values are only used when nodes are defined in virtual.nodes above mas01: vcpus: 4 ram: 6144 diff --git a/mcp/config/scenario/os-nosdn-nofeature-noha.yaml b/mcp/config/scenario/os-nosdn-nofeature-noha.yaml index 5c5e77ceb..8a3a33db0 100644 --- a/mcp/config/scenario/os-nosdn-nofeature-noha.yaml +++ b/mcp/config/scenario/os-nosdn-nofeature-noha.yaml @@ -14,11 +14,14 @@ cluster: - networks virtual: nodes: - - cfg01 - - ctl01 - - cmp001 - - cmp002 - - gtw01 + infra: + - cfg01 + control: + - ctl01 + - gtw01 + compute: + - cmp001 + - cmp002 ctl01: vcpus: 4 ram: 14336 diff --git a/mcp/config/scenario/os-nosdn-ovs-ha.yaml.j2 b/mcp/config/scenario/os-nosdn-ovs-ha.yaml.j2 index f9ab7c3fb..da9938ce0 100644 --- a/mcp/config/scenario/os-nosdn-ovs-ha.yaml.j2 +++ b/mcp/config/scenario/os-nosdn-ovs-ha.yaml.j2 @@ -22,25 +22,22 @@ cluster: - networks virtual: nodes: - - cfg01 + infra: + - cfg01 {%- if nm.cluster.has_baremetal_nodes %} - - mas01 -{%- endif %} -{#- Most likely, controllers will always have the same type and number (3) #} -{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %} - - kvm01 - - kvm02 - - kvm03 -{%- endif %} -{#- Later, we might have mixed computes here, for hybrid multi-arch testing #} -{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %} - - cmp001 - - cmp002 + - mas01 {%- endif %} + control: + - kvm01 + - kvm02 + - kvm03 + compute: + - cmp001 + - cmp002 + # Below values are only used for each node if said node is virtual cfg01: vcpus: 4 ram: 6144 - # Below values are only used when nodes are defined in virtual.nodes above mas01: vcpus: 4 ram: 6144 diff --git a/mcp/config/scenario/os-nosdn-ovs-noha.yaml b/mcp/config/scenario/os-nosdn-ovs-noha.yaml index 19e7946d1..795b73064 100644 --- a/mcp/config/scenario/os-nosdn-ovs-noha.yaml +++ b/mcp/config/scenario/os-nosdn-ovs-noha.yaml @@ -15,11 +15,14 @@ cluster: - networks virtual: nodes: - - cfg01 - - ctl01 - - cmp001 - - cmp002 - - gtw01 + infra: + - cfg01 + control: + - ctl01 + - gtw01 + compute: + - cmp001 + - cmp002 ctl01: vcpus: 4 ram: 14336 diff --git a/mcp/config/scenario/os-odl-nofeature-ha.yaml.j2 b/mcp/config/scenario/os-odl-nofeature-ha.yaml.j2 index c48f18c51..fbedbc6b9 100644 --- a/mcp/config/scenario/os-odl-nofeature-ha.yaml.j2 +++ b/mcp/config/scenario/os-odl-nofeature-ha.yaml.j2 @@ -22,25 +22,22 @@ cluster: - networks virtual: nodes: - - cfg01 + infra: + - cfg01 {%- if nm.cluster.has_baremetal_nodes %} - - mas01 -{%- endif %} -{#- Most likely, controllers will always have the same type and number (3) #} -{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %} - - kvm01 - - kvm02 - - kvm03 -{%- endif %} -{#- Later, we might have mixed computes here, for hybrid multi-arch testing #} -{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %} - - cmp001 - - cmp002 + - mas01 {%- endif %} + control: + - kvm01 + - kvm02 + - kvm03 + compute: + - cmp001 + - cmp002 + # Below values are only used for each node if said node is virtual cfg01: vcpus: 4 ram: 6144 - # Below values are only used when nodes are defined in virtual.nodes above mas01: vcpus: 4 ram: 6144 diff --git a/mcp/config/scenario/os-odl-nofeature-noha.yaml b/mcp/config/scenario/os-odl-nofeature-noha.yaml index ec04ee87a..d0a490ef9 100644 --- a/mcp/config/scenario/os-odl-nofeature-noha.yaml +++ b/mcp/config/scenario/os-odl-nofeature-noha.yaml @@ -15,12 +15,15 @@ cluster: - networks virtual: nodes: - - cfg01 - - ctl01 - - cmp001 - - cmp002 - - gtw01 - - odl01 + infra: + - cfg01 + control: + - ctl01 + - gtw01 + - odl01 + compute: + - cmp001 + - cmp002 ctl01: vcpus: 4 ram: 14336 diff --git a/mcp/config/scenario/os-odl-ovs-noha.yaml b/mcp/config/scenario/os-odl-ovs-noha.yaml index 083e7e646..29e6842ac 100644 --- a/mcp/config/scenario/os-odl-ovs-noha.yaml +++ b/mcp/config/scenario/os-odl-ovs-noha.yaml @@ -16,12 +16,15 @@ cluster: - networks virtual: nodes: - - cfg01 - - ctl01 - - cmp001 - - cmp002 - - gtw01 - - odl01 + infra: + - cfg01 + control: + - ctl01 + - gtw01 + - odl01 + compute: + - cmp001 + - cmp002 ctl01: vcpus: 4 ram: 14336 diff --git a/mcp/config/scenario/os-ovn-nofeature-ha.yaml.j2 b/mcp/config/scenario/os-ovn-nofeature-ha.yaml.j2 index 218b5dece..f81779b8a 100644 --- a/mcp/config/scenario/os-ovn-nofeature-ha.yaml.j2 +++ b/mcp/config/scenario/os-ovn-nofeature-ha.yaml.j2 @@ -21,25 +21,22 @@ cluster: - networks virtual: nodes: - - cfg01 + infra: + - cfg01 {%- if nm.cluster.has_baremetal_nodes %} - - mas01 -{%- endif %} -{#- Most likely, controllers will always have the same type and number (3) #} -{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %} - - kvm01 - - kvm02 - - kvm03 -{%- endif %} -{#- Later, we might have mixed computes here, for hybrid multi-arch testing #} -{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %} - - cmp001 - - cmp002 + - mas01 {%- endif %} + control: + - kvm01 + - kvm02 + - kvm03 + compute: + - cmp001 + - cmp002 + # Below values are only used for each node if said node is virtual cfg01: vcpus: 4 ram: 6144 - # Below values are only used when nodes are defined in virtual.nodes above mas01: vcpus: 4 ram: 6144 diff --git a/mcp/config/scenario/os-ovn-nofeature-noha.yaml b/mcp/config/scenario/os-ovn-nofeature-noha.yaml index 7036340bf..fc4086670 100644 --- a/mcp/config/scenario/os-ovn-nofeature-noha.yaml +++ b/mcp/config/scenario/os-ovn-nofeature-noha.yaml @@ -13,10 +13,13 @@ cluster: - networks virtual: nodes: - - cfg01 - - ctl01 - - cmp001 - - cmp002 + infra: + - cfg01 + control: + - ctl01 + compute: + - cmp001 + - cmp002 ctl01: vcpus: 4 ram: 14336 diff --git a/mcp/scripts/lib.sh b/mcp/scripts/lib.sh index 9c12bff64..4e4f36908 100644 --- a/mcp/scripts/lib.sh +++ b/mcp/scripts/lib.sh @@ -407,6 +407,7 @@ function create_vms { # create vms with specified options for serialized_vnode_data in "${vnodes[@]}"; do + if [ -z "${serialized_vnode_data}" ]; then continue; fi IFS=',' read -r -a vnode_data <<< "${serialized_vnode_data}" # prepare network args diff --git a/mcp/scripts/xdf_data.sh.j2 b/mcp/scripts/xdf_data.sh.j2 index 8c9d5d969..bc0107761 100644 --- a/mcp/scripts/xdf_data.sh.j2 +++ b/mcp/scripts/xdf_data.sh.j2 @@ -11,7 +11,14 @@ # Data derived from XDF (PDF/IDF/SDF/etc), used as input in deploy.sh # +{%- import 'net_map.j2' as nm with context -%} {%- set arch = conf[conf.MCP_JUMP_ARCH] -%} +{%- set V = conf.virtual -%} +{%- set section_map = { + 'infra': -1, + 'control': nm.ctl01.idx, + 'compute': nm.cmp001.idx +} -%} {%- macro bash_arr(_l) -%} ({%- for n in _l -%}'{{ n }}' {% endfor -%}) @@ -24,16 +31,38 @@ {#- Pack all vnode data as string -#} {%- macro serialize_vnodes() -%} - {%- set V = conf.virtual -%} {%- set arr = [] -%} - {%- for n in V.nodes -%} - {%- if n not in V -%}{%- do V.update({n: {}}) -%}{%- endif -%} - {%- do arr.append(pack([n, V[n].ram or arch.default.ram, - V[n].vcpus or arch.default.vcpus])) -%} + {%- for section in section_map -%} + {%- for n in V.nodes[section] -%} + {%- if section_map[section] < 0 or conf.nodes[section_map[section] + loop.index0].node.type == 'virtual' -%} + {%- if n not in V -%}{%- do V.update({n: {}}) -%}{%- endif -%} + {%- do arr.append(pack([n, V[n].ram or arch.default.ram, + V[n].vcpus or arch.default.vcpus])) -%} + {%- endif -%} + {%- endfor -%} {%- endfor -%} '{{ pack(arr, '|') }}' {%- endmacro -%} +{#- Return a bash array of node names or a Salt query, optionally filtered by type #} +{%- macro filter_nodes(type, output_as_query = False, sections = section_map) -%} + {%- set arr = [] -%} + {%- for section in sections -%} + {%- for n in V.nodes[section] -%} + {%- if ( (section_map[section] < 0 and type == 'virtual') or + (section_map[section] >= 0 and + conf.nodes[section_map[section] + loop.index0].node.type in type) ) -%} + {%- do arr.append(n) -%} + {%- endif -%} + {%- endfor -%} + {%- endfor -%} + {%- if output_as_query -%} + '{{ arr | join('* or ') }}*' + {%- else -%} + {{ bash_arr(arr) }} + {%- endif -%} +{%- endmacro -%} + {#- Pack apt_pkg data as string -#} {%- macro serialize_apt_pkg() -%} {%- set arr = [] -%} @@ -59,7 +88,7 @@ OPNFV_BRIDGES=( export CLUSTER_DOMAIN={{ conf.cluster.domain }} cluster_states={{ bash_arr(conf.cluster.states) }} -virtual_nodes={{ bash_arr(conf.virtual.nodes) }} +virtual_nodes={{ filter_nodes('virtual') }} base_image={{ arch.base_image }} # Serialize vnode data as ',,|,,[...]' -- cgit 1.2.3-korg From a5c7084e2c7711ebfafec56a39afab91d236585f Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Sat, 4 Aug 2018 18:32:45 +0200 Subject: [states] baremetal_init: Parameterize kvm hosts Instead of hardcoding the 'kvm' hostnames, use new targeting mechanism based on scenario-specific node names, preparing for baremetal noha scenario integration. JIRA: FUEL-382 Change-Id: If336aa1ac130749e4df7bffaf27a55513dd4f267 Signed-off-by: Alexandru Avadanii --- mcp/config/states/baremetal_init | 26 +++++++++++++++----------- mcp/scripts/xdf_data.sh.j2 | 1 + 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/mcp/config/states/baremetal_init b/mcp/config/states/baremetal_init index 3e5f659fd..f363e4a1a 100755 --- a/mcp/config/states/baremetal_init +++ b/mcp/config/states/baremetal_init @@ -11,25 +11,29 @@ CI_DEBUG=${CI_DEBUG:-0}; [[ "${CI_DEBUG}" =~ (false|0) ]] || set -x # shellcheck disable=SC1090 source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/lib.sh" +source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/xdf_data.sh" + +cluster_nodes_query="${control_nodes_query} or cmp*" +compute_nodes_query='cmp*' # KVM, compute node prereqs # patch the networking module for Debian based distros debian_ip_source=/usr/lib/python2.7/dist-packages/salt/modules/debian_ip.py -salt -C 'kvm* or cmp*' file.line $debian_ip_source \ +salt -C "${cluster_nodes_query}" file.line $debian_ip_source \ content='iface = iface.lower()' mode='delete' -salt -C 'kvm* or cmp*' file.replace $debian_ip_source \ +salt -C "${cluster_nodes_query}" file.replace $debian_ip_source \ pattern="^\s{8}__salt__\['pkg.install'\]\('vlan'\)" \ repl="\n if not __salt__['pkg.version']('vlan'):\n __salt__['pkg.install']('vlan')" -salt -C 'kvm* or cmp*' pkg.install bridge-utils -salt -C 'kvm*' state.apply linux.network,linux.system.kernel -wait_for 5.0 "salt -C 'kvm* or cmp*' state.apply salt.minion" -wait_for 5.0 "salt -C 'cmp*' state.apply linux.system,linux.network" -wait_for 30.0 "salt -C 'kvm* or cmp*' test.ping" +salt -C "${cluster_nodes_query}" pkg.install bridge-utils +salt -C "${control_nodes_query}" state.apply linux.network,linux.system.kernel +wait_for 5.0 "salt -C '${cluster_nodes_query}' state.apply salt.minion" +wait_for 5.0 "salt -C '${compute_nodes_query}' state.apply linux.system,linux.network" +wait_for 30.0 "salt -C '${cluster_nodes_query}' test.ping" -salt -C 'kvm* or cmp*' system.reboot -wait_for 90.0 "salt -C 'kvm* or cmp*' test.ping" +salt -C "${cluster_nodes_query}" system.reboot +wait_for 90.0 "salt -C '${cluster_nodes_query}' test.ping" -salt -C 'kvm* or cmp*' state.apply linux,ntp -salt -C 'kvm* or cmp*' pkg.upgrade refresh=False +salt -C "${cluster_nodes_query}" state.apply linux,ntp +salt -C "${cluster_nodes_query}" pkg.upgrade refresh=False diff --git a/mcp/scripts/xdf_data.sh.j2 b/mcp/scripts/xdf_data.sh.j2 index bc0107761..c0629fec4 100644 --- a/mcp/scripts/xdf_data.sh.j2 +++ b/mcp/scripts/xdf_data.sh.j2 @@ -89,6 +89,7 @@ OPNFV_BRIDGES=( export CLUSTER_DOMAIN={{ conf.cluster.domain }} cluster_states={{ bash_arr(conf.cluster.states) }} virtual_nodes={{ filter_nodes('virtual') }} +control_nodes_query={{ filter_nodes(['baremetal', 'virtual'], True, ['control']) }} base_image={{ arch.base_image }} # Serialize vnode data as ',,|,,[...]' -- cgit 1.2.3-korg