From 29ad01ff1a3ee720b161008c1395f5ee9127ab9d Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Wed, 24 Jan 2018 21:02:40 +0100 Subject: [IDF] Add optional 'idf.installer' array There is no easy way to determine automatically if a PDF/IDF set is compatible with a specific installer adapter. Most common incompatibilities are caused by: - installer adapters hardcode more network ports than nodes have defined in PDF; - installer adapters hardcode more nodes than PDF defines; Previous attempt at handling this dynamically (cd54edf) fails for recently added PODs, so let's handle this explicitly per-pod via a new optional IDF property, 'idf.installer'. If 'idf.installer' is defined, it will be used by `check-jinja2.sh` as a filter-in list of installer adapters to check against. The default (no 'idf.installer' present) is to check all IAs. Leverage the new property for: - arm-pod5: not enough network ports on computes for Compass, Joid; - arm-pod7: same as arm-pod5; - bii-pod1: no 'storage' network defined in IDF for Daisy; - zte-pod9: 3 cluster nodes are only supported by Daisy for now; SPEC changes: - net_config (previously mandatory for IDF version '0.1') is now mandatory only if 'idf.fuel' or 'idf.daisy' is defined; Fixes: cd54edf Change-Id: I706c05519e5491ad631069d7cc090e9c8bfd3011 Signed-off-by: Alexandru Avadanii --- config/pdf/idf-pod1.schema.yaml | 8 ++++++++ config/utils/check-jinja2.sh | 22 +++++++--------------- labs/arm/idf-pod5.yaml | 3 +++ labs/arm/idf-pod7.yaml | 3 +++ labs/bii/idf-pod1.yaml | 3 +++ labs/zte/idf-pod9.yaml | 2 ++ 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/config/pdf/idf-pod1.schema.yaml b/config/pdf/idf-pod1.schema.yaml index 78e22042..ad680da5 100644 --- a/config/pdf/idf-pod1.schema.yaml +++ b/config/pdf/idf-pod1.schema.yaml @@ -81,6 +81,11 @@ properties: version: type: 'number' enum: [0.1] + installer: + type: 'array' + items: + type: 'string' + enum: ['apex', 'compass4nfv', 'daisy', 'fuel', 'joid'] net_config: type: 'object' fuel: @@ -106,6 +111,9 @@ properties: $ref: '#/definitions/daisy/v0.1' compass: $ref: '#/definitions/compass/v0.1' + fuel: + required: ['net_config'] + daisy: required: ['net_config'] # Do not allow any properties not defined here. This lets us catch typos. diff --git a/config/utils/check-jinja2.sh b/config/utils/check-jinja2.sh index b7fa5912..16e52130 100755 --- a/config/utils/check-jinja2.sh +++ b/config/utils/check-jinja2.sh @@ -35,27 +35,19 @@ done # shellcheck disable=SC2086 while IFS= read -r lab_config; do SUMMARY+="\n${lab_config#labs/};" - lab_nodes=$(grep -ce 'node:' "${lab_config}") - lab_tmacs=$(grep -ce 'mac_address:' "${lab_config}") - ((lab_amacs=lab_tmacs/lab_nodes)); ((lab_nodes-=1)) + idf_config="$(dirname "${lab_config}")/idf-$(basename "${lab_config}")" + idf_installer=$(grep 'installer:' "${idf_config}" 2>/dev/null || echo) echo "###################### ${lab_config} ######################" for adapter in ${INSTALLER_ADAPTERS}; do pdf_inst=0 pdf_inst_pass=0 pdf_yaml_pass=0 - ia_nodes=$(grep -hPo 'nodes\W+\K\d+' -R "${adapter}" | tail -1) - ia_rmacs=$(grep -hPo 'interfaces\W+\K\d+' -R "${adapter}" | sort | tail -1) - ((ia_nodes+=1)); ((ia_rmacs+=1)) - if [[ ${ia_nodes} -gt ${lab_nodes} ]]; then + installer_name=$(basename "${adapter}") + if [ -n "${idf_installer}" ] && echo "${idf_installer}" | \ + grep -vq "${installer_name}"; then SUMMARY+='-;' - echo -n "[GENERATE] [SKIP] $(basename "${adapter}") requires at least" - echo -e " ${ia_nodes} nodes, but found only ${lab_nodes}, skipping.\n" - continue - fi - if [[ ${ia_rmacs} -ge ${lab_amacs} ]]; then - SUMMARY+='-;' - echo -n "[GENERATE] [SKIP] $(basename "${adapter}") requires at least" - echo -e " ${ia_rmacs} nics, but found ~ ${lab_amacs}, skipping.\n" + echo -n "[GENERATE] [SKIP] idf.installer defined and " + echo -e "${installer_name} not listed, skipping.\n" continue fi while IFS= read -r jinja_template; do diff --git a/labs/arm/idf-pod5.yaml b/labs/arm/idf-pod5.yaml index c8035228..4e33135b 100644 --- a/labs/arm/idf-pod5.yaml +++ b/labs/arm/idf-pod5.yaml @@ -10,6 +10,9 @@ idf: version: 0.1 + # NOTE: Compass & Joid are not supported on this POD since they require at + # least 3 network ports on all nodes. + installer: ['apex', 'daisy', 'fuel'] net_config: oob: ip-range: 10.0.8.3-10.0.8.10 diff --git a/labs/arm/idf-pod7.yaml b/labs/arm/idf-pod7.yaml index 6b41363d..2c2a9466 100644 --- a/labs/arm/idf-pod7.yaml +++ b/labs/arm/idf-pod7.yaml @@ -10,6 +10,9 @@ idf: version: 0.1 + # NOTE: Compass & Joid are not supported on this POD since they require at + # least 3 network ports on all nodes. + installer: ['apex', 'daisy', 'fuel'] net_config: oob: ip-range: 10.0.16.2-10.0.16.6 diff --git a/labs/bii/idf-pod1.yaml b/labs/bii/idf-pod1.yaml index 187f42ce..d6944795 100644 --- a/labs/bii/idf-pod1.yaml +++ b/labs/bii/idf-pod1.yaml @@ -10,6 +10,9 @@ idf: version: 0.1 + # NOTE: Temporarily disable Daisy check, since it requires 'storage' network + # to be defined in 'idf.net_config' below. + installer: ['apex', 'compass4nfv', 'fuel', 'joid'] net_config: oob: # IPMI management network interface: 0 diff --git a/labs/zte/idf-pod9.yaml b/labs/zte/idf-pod9.yaml index 61a225dc..1cdd5d88 100644 --- a/labs/zte/idf-pod9.yaml +++ b/labs/zte/idf-pod9.yaml @@ -10,6 +10,8 @@ idf: version: 0.1 + # NOTE: For now, only Daisy supports 3-node clusters + installer: ['daisy'] net_config: # NOTE: Network names are likely to change after the PDF spec is updated oob: -- cgit 1.2.3-korg From 0c28815c91cfaca596875592e63ce407bbea8d90 Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Sun, 28 Jan 2018 19:34:31 +0100 Subject: [fuel] Explicitly blacklist incompatible labs Previously, we used to silently refuse to construct 'pod_config' for PODs missing mandatory PDF/IDF configuration; and instead generated an empty output YAML. Retire safety checks in Fuel IA and explicitly blacklist Fuel via new 'idf.installer' where appropiate. The following PODs do not yet support Fuel due to missing 'idf.fuel': - ericsson-pod2 - huawei-pod1 - intel-pod18 - nokia-pod1 - zte-pod2 - zte-pod3 Change-Id: Ief62d62f99a79187303e3f15b83030289e5efdcb Signed-off-by: Alexandru Avadanii --- config/installers/fuel/pod_config.yml.j2 | 71 +++++++++++++------------------- labs/ericsson/idf-pod2.yaml | 12 ++++++ labs/huawei/idf-pod1.yaml | 3 +- labs/intel/idf-pod18.yaml | 12 ++++++ labs/nokia/idf-pod1.yaml | 12 ++++++ labs/zte/idf-pod2.yaml | 2 + labs/zte/idf-pod3.yaml | 2 + 7 files changed, 71 insertions(+), 43 deletions(-) create mode 100644 labs/ericsson/idf-pod2.yaml create mode 100644 labs/intel/idf-pod18.yaml create mode 100644 labs/nokia/idf-pod1.yaml diff --git a/config/installers/fuel/pod_config.yml.j2 b/config/installers/fuel/pod_config.yml.j2 index 04eff45c..b3fd9c45 100644 --- a/config/installers/fuel/pod_config.yml.j2 +++ b/config/installers/fuel/pod_config.yml.j2 @@ -5,48 +5,36 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## ---- -{%- if conf.idf is defined and conf.idf.fuel is defined %} - {%- if conf.idf.net_config is defined -%} - {%- set net_admin = conf.idf.net_config.admin.network -%} - {%- set net_mgmt = conf.idf.net_config.mgmt.network -%} - {%- set net_private = conf.idf.net_config.private.network -%} - {%- set net_public = conf.idf.net_config.public.network -%} - {%- set net_public_mask = conf.idf.net_config.public.mask -%} - {%- set vlan_mgmt = conf.idf.net_config.mgmt.vlan -%} - {%- set vlan_private = conf.idf.net_config.private.vlan -%} - {%- if conf.idf.net_config.public.dns is defined -%} - {%- set dns_public = conf.idf.net_config.public.dns -%} - {%- endif -%} - {%- set pxe_interface = conf.idf.net_config.admin.interface -%} - {%- if conf.idf.net_config.public.gateway is defined -%} - {%- set net_public_gw = conf.idf.net_config.public.gateway -%} - {%- endif -%} - {%- if conf.idf.fuel.network.public_pool is defined -%} - {%- set net_public_pool_start = conf.idf.fuel.network.public_pool.start_ip -%} - {%- set net_public_pool_end = conf.idf.fuel.network.public_pool.end_ip -%} - {%- endif -%} - {%- else -%} - {%- set net_admin = '192.168.11.0' -%} - {%- set net_mgmt = '172.16.10.0' -%} - {%- set net_private = '10.1.0.0' -%} - {%- set net_public = '172.30.10.0' -%} - {%- set net_public_mask = '24' -%} - {%- set vlan_mgmt = '300' -%} - {%- set vlan_private = '1000' -%} - {%- set pxe_interface = 0 -%} - {%- endif -%} +{%- set net_admin = conf.idf.net_config.admin.network %} +{%- set net_mgmt = conf.idf.net_config.mgmt.network %} +{%- set net_private = conf.idf.net_config.private.network %} +{%- set net_public = conf.idf.net_config.public.network %} +{%- set net_public_mask = conf.idf.net_config.public.mask %} +{%- set vlan_mgmt = conf.idf.net_config.mgmt.vlan %} +{%- set vlan_private = conf.idf.net_config.private.vlan %} +{%- if conf.idf.net_config.public.dns is defined %} + {%- set dns_public = conf.idf.net_config.public.dns %} +{%- endif %} +{%- set pxe_interface = conf.idf.net_config.admin.interface %} +{%- if conf.idf.net_config.public.gateway is defined %} + {%- set net_public_gw = conf.idf.net_config.public.gateway %} +{%- endif %} +{%- if conf.idf.fuel.network.public_pool is defined %} + {%- set net_public_pool_start = conf.idf.fuel.network.public_pool.start_ip %} + {%- set net_public_pool_end = conf.idf.fuel.network.public_pool.end_ip %} +{%- endif %} - {%- if dns_public is not defined -%} - {%- set dns_public = [ '8.8.8.8', '8.8.4.4' ] -%} - {%- endif -%} - {%- if net_public_gw is not defined -%} - {%- set net_public_gw = net_public | ipaddr_index('1') -%} - {%- endif -%} - {%- if net_public_pool_start is not defined or net_public_pool_end is not defined -%} - {%- set net_public_pool_start = net_public | ipaddr_index('80') -%} - {%- set net_public_pool_end = net_public | ipaddr_index('100') -%} - {%- endif %} +{%- if dns_public is not defined %} + {%- set dns_public = [ '8.8.8.8', '8.8.4.4' ] %} +{%- endif %} +{%- if net_public_gw is not defined %} + {%- set net_public_gw = net_public | ipaddr_index('1') %} +{%- endif %} +{%- if net_public_pool_start is not defined or net_public_pool_end is not defined %} + {%- set net_public_pool_start = net_public | ipaddr_index('80') %} + {%- set net_public_pool_end = net_public | ipaddr_index('100') %} +{%- endif %} +--- parameters: _param: @@ -155,4 +143,3 @@ parameters: opnfv_maas_node05_power_user: {{ conf.nodes.4.remote_management.user }} opnfv_maas_node05_power_password: {{ conf.nodes.4.remote_management.pass }} opnfv_maas_node05_interface_mac: '{{ conf.nodes.4.interfaces[pxe_interface].mac_address }}' -{%- endif -%} diff --git a/labs/ericsson/idf-pod2.yaml b/labs/ericsson/idf-pod2.yaml new file mode 100644 index 00000000..01f87faa --- /dev/null +++ b/labs/ericsson/idf-pod2.yaml @@ -0,0 +1,12 @@ +############################################################################## +# Copyright (c) 2018 Ericsson AB, Mirantis Inc., Enea AB and others. +# 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 +############################################################################## +--- +idf: + version: 0.1 + # NOTE: Fuel checking is disabled until 'idf.fuel' is defined below + installer: ['apex', 'compass4nfv', 'daisy', 'joid'] diff --git a/labs/huawei/idf-pod1.yaml b/labs/huawei/idf-pod1.yaml index 44fb4a06..7e2cd721 100644 --- a/labs/huawei/idf-pod1.yaml +++ b/labs/huawei/idf-pod1.yaml @@ -11,7 +11,8 @@ idf: version: 0.1 - # netconfig + # NOTE: Fuel checking is disabled until 'idf.fuel' is defined below + installer: ['apex', 'compass4nfv', 'daisy', 'joid'] net_config: mgmt: interface: 1 diff --git a/labs/intel/idf-pod18.yaml b/labs/intel/idf-pod18.yaml new file mode 100644 index 00000000..bd8c49ec --- /dev/null +++ b/labs/intel/idf-pod18.yaml @@ -0,0 +1,12 @@ +############################################################################## +# Copyright (c) 2018 Intel Corporation and others. +# 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 +############################################################################## +--- +idf: + version: 0.1 + # NOTE: Fuel checking is disabled until 'idf.fuel' is defined below + installer: ['apex', 'compass4nfv', 'daisy', 'joid'] diff --git a/labs/nokia/idf-pod1.yaml b/labs/nokia/idf-pod1.yaml new file mode 100644 index 00000000..83aba95b --- /dev/null +++ b/labs/nokia/idf-pod1.yaml @@ -0,0 +1,12 @@ +############################################################################## +# Copyright (c) 2018 Nokia, Mirantis Inc., Enea AB and others. +# 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 +############################################################################## +--- +idf: + version: 0.1 + # NOTE: Fuel checking is disabled until 'idf.fuel' is defined below + installer: ['apex', 'compass4nfv', 'daisy', 'joid'] diff --git a/labs/zte/idf-pod2.yaml b/labs/zte/idf-pod2.yaml index dbe14b9e..960151d0 100644 --- a/labs/zte/idf-pod2.yaml +++ b/labs/zte/idf-pod2.yaml @@ -10,6 +10,8 @@ idf: version: 0.1 + # NOTE: Fuel checking is disabled until 'idf.fuel' is defined below + installer: ['apex', 'compass4nfv', 'daisy', 'joid'] net_config: oob: interface: 0 diff --git a/labs/zte/idf-pod3.yaml b/labs/zte/idf-pod3.yaml index e5e19f4c..702e2565 100644 --- a/labs/zte/idf-pod3.yaml +++ b/labs/zte/idf-pod3.yaml @@ -10,6 +10,8 @@ idf: version: 0.1 + # NOTE: Fuel checking is disabled until 'idf.fuel' is defined below + installer: ['apex', 'compass4nfv', 'daisy', 'joid'] net_config: oob: interface: 0 -- cgit 1.2.3-korg From 42415daa0a9ca2d2d52620f46b9edb3f8f7b1da5 Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Sun, 28 Jan 2018 17:36:50 +0100 Subject: [fuel] Add net_map.j2 for net config abstraction This will be leveraged by other j2 templates in Fuel to construct scenario-specific network config files. Change-Id: Iba1fd99b23936fe42abe16af3cd80dce2a63d997 Signed-off-by: Alexandru Avadanii --- config/installers/fuel/net_map.j2 | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 config/installers/fuel/net_map.j2 diff --git a/config/installers/fuel/net_map.j2 b/config/installers/fuel/net_map.j2 new file mode 100644 index 00000000..c3ff6cb7 --- /dev/null +++ b/config/installers/fuel/net_map.j2 @@ -0,0 +1,47 @@ +############################################################################## +# Copyright (c) 2018 Mirantis Inc., Enea AB and others. +# 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 +############################################################################## +{#- NOTE: All same role (e.g. compute) roles will share the same mapping #} + +{#- Until we support per-node configuration, we only collect data for the + first node in each role. Currently, there's no role mapping in PDF/IDF, + so we default to controller = first node in PDF, compute = 4th #} + +{#- ctl maps to MCP kvm on baremetal, ctl + gtw etc. on virtual #} +{%- set ctl01 = {'idx': 0} %} +{%- set cmp001 = {'idx': 3} %} + +{#- net_config v1.0 only supports global network-to-interface-index mapping, + which is incovenient for PODs with different computes (e.g. less NICs). + This can be worked around by tweaking the NIC definition order in PDF. + The same observation applies to vlan tags, at least for now. #} + +{#- Determine interface index for each network (plumbing vars) #} +{%- set idx_mcp = 0 %} {#- mcpcontrol network is hard set on first interface #} +{%- set idx_admin = conf.idf.net_config.admin.interface %} +{%- set idx_mgmt = conf.idf.net_config.mgmt.interface %} +{%- set idx_private = conf.idf.net_config.private.interface %} +{%- set idx_public = conf.idf.net_config.public.interface %} + +{#- VLAN for each network (only untagged 'admin' is supported by MaaS config!) #} +{%- set vlan_admin = conf.idf.net_config.admin.vlan %} +{%- set vlan_mgmt = conf.idf.net_config.mgmt.vlan %} +{%- set vlan_private = conf.idf.net_config.private.vlan %} +{%- set vlan_public = conf.idf.net_config.public.vlan %} + +{#- Physical interface OS name for each network (e.g. em1, enp1s0f1) #} +{%- for role in [ctl01, cmp001] %} + {%- set node = conf.idf.fuel.network.node[role.idx] %} + {%- set _ = role.update({ + 'nic_mcp': node.interfaces[idx_mcp], + 'nic_admin': node.interfaces[idx_admin], + 'nic_mgmt': node.interfaces[idx_mgmt], + 'nic_private': node.interfaces[idx_private], + 'nic_public': node.interfaces[idx_public], + 'bus_private': node.busaddr[idx_private]}) %} + {#- PCI addresses are only used on computes for DPDK on private net #} +{%- endfor %} -- cgit 1.2.3-korg