X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=mcp%2Fscripts%2Fxdf_data.sh.j2;h=e762fe9572bbd02d4ea1a7a22320ab25bf195d61;hb=4187fca803e8176bd08c8617e4636681a8673a98;hp=9479f2356f1011c6eb4ce5c3bdc92559a27497cf;hpb=dea6521c7b21d8fef861ce881f8451367679842e;p=fuel.git diff --git a/mcp/scripts/xdf_data.sh.j2 b/mcp/scripts/xdf_data.sh.j2 index 9479f2356..e762fe957 100644 --- a/mcp/scripts/xdf_data.sh.j2 +++ b/mcp/scripts/xdf_data.sh.j2 @@ -1,4 +1,5 @@ #!/bin/bash -e +# shellcheck disable=SC2034 ############################################################################## # Copyright (c) 2018 Mirantis Inc., Enea AB and others. # All rights reserved. This program and the accompanying materials @@ -10,11 +11,106 @@ # Data derived from XDF (PDF/IDF/SDF/etc), used as input in deploy.sh # -# Determine bridge names based on IDF, where all bridges are now mandatory +{%- import 'net_map.j2' as nm with context -%} +{%- set arch = conf[conf.MCP_JUMP_ARCH] -%} +{%- set V = conf.virtual -%} +{%- do V.nodes.update(arch.default.virtual.nodes) -%} +{%- set section_map = { + 'infra': -1, + 'control': nm.ctl01.idx, + 'compute': nm.cmp001.idx +} -%} + +{%- macro bash_arr(_l) -%} + ({%- for n in _l -%}'{{ n }}' {% endfor -%}) +{%- endmacro -%} + +{#- Pack list as `sep`-separated string, replacing spaces with '|' -#} +{%- macro pack(x = [], sep = ',') -%} + {{ x | join(sep) | replace(' ', '|') }} +{%- endmacro -%} + +{#- Pack all vnode data as string -#} +{%- macro serialize_vnodes() -%} + {%- set arr = [] -%} + {%- for section in section_map -%} + {%- for n in V.nodes[section] or [] -%} + {%- 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 -%} + {%- set cpu_topo = 'cpu_topology' in V[n] and not conf.MCP_CMP_SS -%} + {%- if 'numa' in V[n] and cpu_topo -%} + {%- for k, v in V[n].numa.iteritems() -%} + {%- set c = pack([k, v.memory, v.cpus]) -%} + {%- do V[n].update({'s_numa': c if 's_numa' not in V[n] else pack([c, V[n].s_numa])}) -%} + {%- endfor -%} + {%- endif -%} + {%- do arr.append(pack([n, V[n].ram or arch.default.ram, + V[n].vcpus or arch.default.vcpus, + '' if not cpu_topo else pack([ + V[n].cpu_topology.sockets, + V[n].cpu_topology.cores, + V[n].cpu_topology.threads, + '' if 's_numa' not in V[n] else V[n].s_numa])])) -%} + {%- 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] or [] -%} + {%- 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 = [] -%} + {%- set sections = [arch.common] -%} + {%- if conf.MCP_VCP -%} + {%- do sections.append(arch.control) -%} + {%- endif -%} + {%- for c in sections -%} + {%- do arr.append(pack([pack(c.apt['keys']), pack(c.apt.repos), + pack(c.pkg.install), pack(c.pkg.remove)], '^')) -%} + {%- endfor -%} + '{{ pack(arr, '^') }}' +{%- endmacro -%} + {%- set bridges = conf.idf.fuel.jumphost.bridges %} +# Determine bridge names based on IDF, where all bridges are now mandatory OPNFV_BRIDGES=( '{{ bridges.admin or "pxebr" }}' '{{ bridges.mgmt or "mgmt" }}' '{{ bridges.private or "internal" }}' '{{ bridges.public or "public" }}' ) + +export CLUSTER_DOMAIN={{ conf.cluster.domain }} +cluster_states={{ bash_arr(arch.default.cluster.states + 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: +# ,,[,,,[,,, +# ,,,]]|,...' +virtual_nodes_data={{ serialize_vnodes() }} + +# Serialize repos, packages to (pre-)install/remove for: +# - foundation node VM base image (virtual: all VMs, baremetal: cfg01|mas01) +# - virtualized control plane VM base image (only when VCP is used) +virtual_repos_pkgs={{ serialize_apt_pkg() }}