diff options
author | Alexandru Avadanii <Alexandru.Avadanii@enea.com> | 2018-08-05 19:36:01 +0200 |
---|---|---|
committer | Alexandru Avadanii <Alexandru.Avadanii@enea.com> | 2018-08-07 06:21:10 +0200 |
commit | bef972ea691f73527a845cd8a8b89f1958eb9cb2 (patch) | |
tree | e4ac299bba10a54d0b21db9db9fb62eadac118a9 /mcp/scripts | |
parent | 291d972bdd666d36e35f8bb3953b0da806ea0eea (diff) |
[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 <Alexandru.Avadanii@enea.com>
Diffstat (limited to 'mcp/scripts')
-rw-r--r-- | mcp/scripts/lib.sh | 1 | ||||
-rw-r--r-- | mcp/scripts/xdf_data.sh.j2 | 41 |
2 files changed, 36 insertions, 6 deletions
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 '<name0>,<ram0>,<vcpu0>|<name1>,<ram1>,<vcpu1>[...]' |