[akraino] Add IEC K8-calico scenarios 11/67011/7
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Mon, 11 Feb 2019 11:04:59 +0000 (11:04 +0000)
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Fri, 29 Mar 2019 14:04:14 +0000 (15:04 +0100)
- bump Pharos git submodule to allow PODs with fewer nodes;
- add `k8-calico-iec-noha` scenario definition for Akraino
  IEC basic configuration;
- add `k8-calico-iec-vcp-noha` scenario definition for Akraino
  IEC nested (virtualized control plane) configuration;
- add `akraino_iec` state, which will leverage the Akraino IEC
  bootstrap scripts from [1];
- replace system.reboot salt call with cmd.run 'reboot' as it's more
  reliable;
- use kernel 4.15 for AArch64 K8 IEC scenarios;

NOTE: These scenarios will not be released in OPNFV since don't rely
on Salt formulas but instead of Akraino IEC scripts to install K8s.

[1] https://gerrit.akraino.org/r/#/q/project:iec

Change-Id: I4e538e0563d724cd3fd5c4d462ddc22d0c739402
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
23 files changed:
mcp/config/scenario/defaults.yaml.j2
mcp/config/scenario/k8-calico-iec-noha.yaml [new file with mode: 0644]
mcp/config/scenario/k8-calico-iec-vcp-noha.yaml [new file with mode: 0644]
mcp/config/states/akraino_iec [new file with mode: 0755]
mcp/config/states/baremetal_init
mcp/config/states/virtual_control_plane
mcp/config/states/virtual_init
mcp/reclass/classes/cluster/.gitignore
mcp/reclass/classes/cluster/all-mcp-arch-common/infra/config_pdf.yml.j2
mcp/reclass/classes/cluster/mcp-common-ha/openstack_compute_pdf.yml.j2
mcp/reclass/classes/cluster/mcp-common-noha/infra/config.yml.j2
mcp/reclass/classes/cluster/mcp-common-noha/openstack_compute_pdf.yml.j2
mcp/reclass/classes/cluster/mcp-iec-noha/akraino/iec.yml.j2 [new file with mode: 0644]
mcp/reclass/classes/cluster/mcp-iec-noha/akraino/init.yml [new file with mode: 0644]
mcp/reclass/classes/cluster/mcp-iec-noha/infra/config.yml.j2 [new file with mode: 0644]
mcp/reclass/classes/cluster/mcp-iec-noha/infra/init.yml.j2 [new file with mode: 0644]
mcp/reclass/classes/cluster/mcp-iec-noha/infra/kvm.yml.j2 [new file with mode: 0644]
mcp/reclass/classes/cluster/mcp-iec-noha/infra/maas.yml [new file with mode: 0644]
mcp/reclass/classes/cluster/mcp-iec-noha/init.yml [new file with mode: 0644]
mcp/reclass/nodes/cfg01.mcp-iec-noha.local.yml [new file with mode: 0644]
mcp/scripts/docker-compose/docker-compose.yaml.j2
mcp/scripts/pharos
mcp/scripts/xdf_data.sh.j2

index 4d1215f..ddcd0a0 100644 (file)
@@ -55,6 +55,9 @@ aarch64:
         - armband_3 1201 deb [arch=arm64] http://linux.enea.com/mcp-repos/rocky/xenial rocky-armband main
     pkg:
       install:
+{%- if '-iec-' in conf.MCP_DEPLOY_SCENARIO %}
+        - linux-generic-hwe-16.04
+{%- endif %}
         - python-futures
         - salt-minion
   control:
diff --git a/mcp/config/scenario/k8-calico-iec-noha.yaml b/mcp/config/scenario/k8-calico-iec-noha.yaml
new file mode 100644 (file)
index 0000000..93f007b
--- /dev/null
@@ -0,0 +1,27 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+---
+cluster:
+  domain: mcp-iec-noha.local
+  states:
+    - akraino_iec
+virtual:
+  nodes:
+    control:
+      - iec01
+      - iec02
+      - iec03
+  iec01:
+    vcpus: 8
+    ram: 10240
+  iec02:
+    vcpus: 8
+    ram: 10240
+  iec03:
+    vcpus: 8
+    ram: 10240
diff --git a/mcp/config/scenario/k8-calico-iec-vcp-noha.yaml b/mcp/config/scenario/k8-calico-iec-vcp-noha.yaml
new file mode 100644 (file)
index 0000000..dc0c00b
--- /dev/null
@@ -0,0 +1,28 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+---
+cluster:
+  domain: mcp-iec-noha.local
+  states:
+    - virtual_control_plane
+    - akraino_iec
+virtual:
+  nodes:
+    control:
+      - kvm01
+      - kvm02
+      - kvm03
+  kvm01:
+    vcpus: 8
+    ram: 10240
+  kvm02:
+    vcpus: 8
+    ram: 10240
+  kvm03:
+    vcpus: 8
+    ram: 10240
diff --git a/mcp/config/states/akraino_iec b/mcp/config/states/akraino_iec
new file mode 100755 (executable)
index 0000000..6cc010b
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/bash -e
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+
+CI_DEBUG=${CI_DEBUG:-0}; [[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
+
+# shellcheck disable=SC1090
+source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/lib.sh"
+
+IEC_REPO_URI='https://gerrit.akraino.org/r/iec'
+IEC_USER='ubuntu'
+# shellcheck disable=SC2016
+IEC_REPO_PATH=$(su - "${IEC_USER}" -c 'echo ${HOME}/iec')
+IEC_SCRIPTS_PATH="${IEC_REPO_PATH}/src/foundation/scripts"
+
+POD_NETWORK_CIDR='100.100.0.0/16' # Avoid overlapping Fuel's PXE/admin net
+
+[ -e "${IEC_REPO_PATH}" ] || su - "${IEC_USER}" -c \
+  "git clone '${IEC_REPO_URI}' '${IEC_REPO_PATH}'"
+# shellcheck disable=SC2086
+wait_for 3.0 "! salt-cp 'iec*' -C '${IEC_SCRIPTS_PATH}/' \
+              '$(dirname ${IEC_SCRIPTS_PATH})' | grep -e False"
+salt -C 'iec*' cmd.run "chown -R ${IEC_USER}:${IEC_USER} ${IEC_REPO_PATH}"
+
+salt -C 'iec*' cmd.run runas="${IEC_USER}" "${IEC_SCRIPTS_PATH}/k8s_common.sh"
+
+IEC_MASTER_IP=$(salt --out txt -C 'iec* and *01*' pillar.get \
+                _param:single_address | cut -d ' ' -f2)
+salt -C 'iec* and *01*' cmd.run runas="${IEC_USER}" \
+  "${IEC_SCRIPTS_PATH}/k8s_master.sh ${IEC_MASTER_IP} ${POD_NETWORK_CIDR}"
+
+KUBE_NODE_CNT=$(salt --out txt -C 'iec* and *01*' cmd.run runas="${IEC_USER}" \
+                'kubectl get nodes | grep -c -e "^iec"' | cut -d ' ' -f2)
+if [ "${KUBE_NODE_CNT}" != "$(salt-key | grep -c -e '^iec')" ]; then
+  KUBE_JOIN_CMD=$(salt --out txt -C 'iec* and *01*' cmd.run runas="${IEC_USER}" \
+                  'kubeadm token create --print-join-command' | cut -d ' ' -f2-)
+  salt -C 'iec* and not *01*' cmd.run "${KUBE_JOIN_CMD}"
+fi
+salt -C 'iec* and *01*' cmd.run runas="${IEC_USER}" 'kubectl get nodes'
+
+salt -C 'iec* and *01*' cmd.run runas="${IEC_USER}" \
+  "${IEC_SCRIPTS_PATH}/setup-cni.sh '' ${POD_NETWORK_CIDR}"
+salt -C 'iec* and *01*' cmd.run runas="${IEC_USER}" "${IEC_SCRIPTS_PATH}/nginx.sh"
+salt -C 'iec* and *01*' cmd.run runas="${IEC_USER}" "${IEC_SCRIPTS_PATH}/helm.sh"
index ba7ae30..9928215 100755 (executable)
@@ -14,7 +14,6 @@ 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
@@ -27,12 +26,12 @@ salt -C "${cluster_nodes_query}" file.replace $debian_ip_source \
   repl="\n        if not __salt__['pkg.version']('vlan'):\n            __salt__['pkg.install']('vlan')"
 
 salt -C "${cluster_nodes_query}" pkg.install bridge-utils
-salt -C "${control_nodes_query}" state.apply linux.system.repo,linux.network,linux.system.kernel
+salt -C "${cluster_nodes_query}" state.apply linux.system.repo
 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 5.0 "salt -C '${cluster_nodes_query}' state.apply linux,ntp"
 wait_for 30.0 "salt -C '${cluster_nodes_query}' test.ping"
 
-salt -C "${cluster_nodes_query}" system.reboot
+salt -C "${cluster_nodes_query}" cmd.run 'reboot'
 wait_for 90.0 "salt -C '${cluster_nodes_query}' test.ping"
 
 salt -C "${cluster_nodes_query}" state.apply linux,ntp
index ffb2c59..183360b 100755 (executable)
@@ -27,11 +27,7 @@ if [ "${ERASE_ENV}" -eq 1 ]; then
 fi
 
 # KVM libvirt first, VCP deployment
-if salt -C 'kvm*' match.grain 'cpuarch:aarch64' \
-  --out yaml --static | grep -q -e 'true' ; then
-  wait_for 5.0 "salt -C 'G@cpuarch:aarch64 and kvm*' state.sls armband"
-fi
-wait_for 5.0 "salt -C 'kvm*' state.sls libvirt"
+wait_for 5.0 "salt -C 'kvm*' state.sls armband,libvirt"
 
 salt -C 'kvm* or cmp*' state.apply salt
 wait_for 10.0 "salt -C 'kvm*' state.sls salt.control,linux.system.kernel"
@@ -58,7 +54,7 @@ wait_for 10.0 "salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' state.apply linux,ntp"
 wait_for 10.0 "salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' ssh.set_auth_key ${SUDO_USER} \
   $(awk 'NR==1{print $2}' "$(eval echo "~${SUDO_USER}/.ssh/authorized_keys")")"
 
-salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' system.reboot
+salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' cmd.run 'reboot'
 wait_for 30.0 "salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' test.ping"
 
 salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' pkg.upgrade refresh=False dist_upgrade=True
index e883757..38a141a 100755 (executable)
@@ -33,7 +33,7 @@ wait_for 3.0 "salt -C 'E@^(${NODE_MASK}).*' saltutil.sync_all"
 
 wait_for 3.0 "salt -C 'E@^(${NODE_MASK}).*' state.sls linux"
 
-salt -C "E@^(${NODE_MASK}).*" system.reboot
+salt -C "E@^(${NODE_MASK}).*" cmd.run 'reboot'
 wait_for 90.0 "salt -C 'E@^(${NODE_MASK}).*' test.ping"
 wait_for 3.0 "salt -C 'E@^(${NODE_MASK}).*' pkg.upgrade refresh=False dist_upgrade=True"
 wait_for 3.0 "salt -C 'E@^(${NODE_MASK}).*' state.apply salt,ntp"
index ffeeca1..9ab3992 100644 (file)
@@ -22,3 +22,7 @@ mcp-*-noha/openstack/compute.yml
 mcp-common-noha/infra/init.yml
 mcp-*-noha/openstack/gateway.yml
 mcp-fdio-noha/infra/config.yml
+mcp-iec-noha/akraino/iec.yml
+mcp-iec-noha/infra/config.yml
+mcp-iec-noha/infra/init.yml
+mcp-iec-noha/infra/kvm.yml
index f62caa2..489a22f 100644 (file)
@@ -41,6 +41,7 @@ parameters:
     storage:
       data_source:
         engine: local
+{%- if nm.cmp_nodes > 0 %}
       node:
         # We support per-node (not only per-role) compute configuration via IDF
 {%- for cmp in range(1, nm.cmp_nodes + 1) %}
@@ -111,3 +112,4 @@ parameters:
     {%- endif %}
   {%- endif %}
 {%- endfor %}
+{%- endif %}
index de0177a..0b1c5bb 100644 (file)
@@ -15,6 +15,7 @@
 parameters:
   _param:
     # Should later be determined via PDF/IDF, AArch64 has ESP on /dev/sda1
+{%- if nm.cmp001.idx < conf.nodes | length %}
 {%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %}
     ~cinder_lvm_devices: ['/dev/vdb']
 {%- elif conf.nodes[nm.cmp001.idx].node.arch == 'aarch64' or
@@ -22,6 +23,7 @@ parameters:
     ~cinder_lvm_devices: ['/dev/sda2']
 {%- else %}
     ~cinder_lvm_devices: ['/dev/sda1']
+{%- endif %}
 {%- endif %}
   linux:
     network:
index 314cde7..677be28 100644 (file)
@@ -8,7 +8,6 @@
 {%- import 'net_map.j2' as nm with context %}
 ---
 classes:
-  - system.mysql.client.single
   - cluster.all-mcp-arch-common.infra.config_pdf
 parameters:
   _param:
index e1de520..084a88f 100644 (file)
@@ -19,6 +19,7 @@
 parameters:
   _param:
     # Should later be determined via PDF/IDF, AArch64 has ESP on /dev/sda1
+{%- if nm.cmp001.idx < conf.nodes | length %}
 {%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %}
     ~cinder_lvm_devices: ['/dev/vdb']
 {%- elif conf.nodes[nm.cmp001.idx].node.arch == 'aarch64' or
@@ -26,6 +27,7 @@ parameters:
     ~cinder_lvm_devices: ['/dev/sda2']
 {%- else %}
     ~cinder_lvm_devices: ['/dev/sda1']
+{%- endif %}
 {%- endif %}
   linux:
     network:
diff --git a/mcp/reclass/classes/cluster/mcp-iec-noha/akraino/iec.yml.j2 b/mcp/reclass/classes/cluster/mcp-iec-noha/akraino/iec.yml.j2
new file mode 100644 (file)
index 0000000..d3e6b66
--- /dev/null
@@ -0,0 +1,91 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
+{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
+{%- if '-vcp-' in conf.MCP_DEPLOY_SCENARIO %}
+{%- set nics = {} %}
+{%- set vlans = {} %}
+{%- else %}
+{%- set nics = { nm.ctl01.nic_mgmt: True, nm.ctl01.nic_public: True } %}
+{%- set vlans = { nm.vlan_mgmt: nm.ctl01.nic_mgmt, nm.vlan_public: nm.ctl01.nic_public } %}
+{%- endif %}
+---
+classes:
+  - cluster.mcp-iec-noha
+  - cluster.all-mcp-arch-common.opnfv.maas_proxy
+  - cluster.all-mcp-arch-common.opnfv.lab_proxy_pdf
+parameters:
+  _param:
+{%- if '-vcp-' in conf.MCP_DEPLOY_SCENARIO %}
+    pxe_admin_interface: ${_param:opnfv_vcp_vm_primary_interface}
+    external_nic: ${_param:opnfv_vcp_vm_secondary_interface}
+    single_nic: ${_param:opnfv_vcp_vm_tertiary_interface}
+{%- else %}
+    pxe_admin_interface: {{ nm.ctl01.nic_admin }}
+    external_nic: {{ ma.interface_str(nm.ctl01.nic_public, nm.vlan_public) }}
+    single_nic: {{ ma.interface_str(nm.ctl01.nic_mgmt, nm.vlan_mgmt) }}
+{%- endif %}
+  linux:
+    network:
+      interface:
+        pxe_admin_int:
+          enabled: true
+          name: ${_param:pxe_admin_interface}
+          proto: static
+          type: eth
+          address: ${_param:pxe_admin_address}
+          netmask: ${_param:opnfv_net_admin_mask}
+          mtu: ${_param:interface_mtu}
+          noifupdown: true
+
+{#- prevent duplicates for tagged mgmt on the same physical interface as PXE/admin #}
+{%- if nm.ctl01.nic_admin in nics %}
+  {%- do nics.pop(nm.ctl01.nic_admin) %}
+{%- endif %}
+
+{{ ma.linux_network_interfaces_nic(nics) }}
+
+{{ ma.linux_network_interfaces_vlan(vlans) }}
+
+{%- if '-vcp-' in conf.MCP_DEPLOY_SCENARIO %}
+        single:
+          enabled: true
+          type: eth
+          proto: manual
+          name: ${_param:single_nic}
+          mtu: ${_param:interface_mtu}
+        external:
+          enabled: true
+          type: eth
+          proto: manual
+          name: ${_param:external_nic}
+          mtu: ${_param:interface_mtu}
+{%- endif %}
+        br-ctl:
+          enabled: true
+          type: bridge
+          proto: static
+          address: ${_param:single_address}
+          netmask: ${_param:opnfv_net_mgmt_mask}
+          noifupdown: true
+          use_interfaces:
+            - ${_param:single_nic}
+          mtu: ${_param:interface_mtu}
+        br-ex:
+          enabled: true
+          type: bridge
+          proto: static
+          address: ${_param:external_address}
+          netmask: ${_param:opnfv_net_public_mask}
+          noifupdown: true
+          use_interfaces:
+            - ${_param:external_nic}
+          mtu: ${_param:interface_mtu}
+          gateway: ${_param:opnfv_net_public_gw}
+          name_servers: {{ nm.dns_public }}
diff --git a/mcp/reclass/classes/cluster/mcp-iec-noha/akraino/init.yml b/mcp/reclass/classes/cluster/mcp-iec-noha/akraino/init.yml
new file mode 100644 (file)
index 0000000..18bdf21
--- /dev/null
@@ -0,0 +1,32 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+---
+parameters:
+  _param:
+    # NOTE(armband): reuse Openstack definitions
+    akraino_iec_node01_address: ${_param:opnfv_openstack_control_node01_address}
+    akraino_iec_node02_address: ${_param:opnfv_openstack_control_node02_address}
+    akraino_iec_node03_address: ${_param:opnfv_openstack_control_node03_address}
+  linux:
+    network:
+      host:
+        iec01:
+          address: ${_param:akraino_iec_node01_address}
+          names:
+            - iec01
+            - iec01.${_param:cluster_domain}
+        iec02:
+          address: ${_param:akraino_iec_node02_address}
+          names:
+            - iec02
+            - iec02.${_param:cluster_domain}
+        iec03:
+          address: ${_param:akraino_iec_node03_address}
+          names:
+            - iec03
+            - iec03.${_param:cluster_domain}
diff --git a/mcp/reclass/classes/cluster/mcp-iec-noha/infra/config.yml.j2 b/mcp/reclass/classes/cluster/mcp-iec-noha/infra/config.yml.j2
new file mode 100644 (file)
index 0000000..9a1c9b8
--- /dev/null
@@ -0,0 +1,57 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+---
+classes:
+  - cluster.mcp-common-noha.infra.config
+  - cluster.mcp-iec-noha
+  - cluster.all-mcp-arch-common.opnfv.lab_proxy_pdf
+  - cluster.all-mcp-arch-common.infra.config_pdf
+parameters:
+  reclass:
+    storage:
+      ~node:
+{%- if nm.cluster.has_baremetal_nodes %}
+{#- Since we overwrite the ~node key, we need to re-add maas node explicitly #}
+        infra_maas_node01:
+          name: ${_param:infra_maas_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+            - cluster.${_param:cluster_name}.infra.maas
+          params:
+            salt_master_host: ${_param:infra_config_deploy_address}
+            linux_system_codename: ${_param:infra_maas_system_codename}
+            single_address: ${_param:infra_maas_node01_deploy_address}
+{%- endif %}
+{%- if '-vcp-' in conf.MCP_DEPLOY_SCENARIO %}
+{%- for i in range(1, 4) %}
+        infra_kvm_node0{{ i }}:
+          name: ${_param:infra_kvm_node0{{ i }}_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+            - cluster.${_param:cluster_name}.infra.kvm
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:opnfv_infra_kvm_node0{{ i }}_address}
+            pxe_admin_address: ${_param:opnfv_infra_kvm_node0{{ i }}_pxe_admin_address}
+{%- endfor %}
+{%- endif %}
+{%- for i in range(1, 4) %}
+        akraino_iec_node0{{ i }}:
+          name: ${_param:akraino_iec_node0{{ i }}_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+            - cluster.${_param:cluster_name}.akraino.iec
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: ${_param:linux_system_codename}
+            single_address: ${_param:opnfv_openstack_control_node0{{ i }}_address}
+            external_address: ${_param:opnfv_openstack_control_node0{{ i }}_external_address}
+            pxe_admin_address: ${_param:opnfv_openstack_control_node0{{ i }}_pxe_admin_address}
+{%- endfor %}
diff --git a/mcp/reclass/classes/cluster/mcp-iec-noha/infra/init.yml.j2 b/mcp/reclass/classes/cluster/mcp-iec-noha/infra/init.yml.j2
new file mode 100644 (file)
index 0000000..1b68b6c
--- /dev/null
@@ -0,0 +1,31 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+---
+classes:
+  - cluster.mcp-common-noha.infra
+parameters:
+  _param:
+    cluster_name: mcp-iec-noha
+    infra_kvm_node01_hostname: kvm01
+    infra_kvm_node02_hostname: kvm02
+    infra_kvm_node03_hostname: kvm03
+    akraino_iec_node01_hostname: iec01
+    akraino_iec_node02_hostname: iec02
+    akraino_iec_node03_hostname: iec03
+{%- if '-vcp-' in conf.MCP_DEPLOY_SCENARIO %}
+  linux:
+    network:
+      host:
+{%- for i in range(1, 4) %}
+        kvm0{{ i }}:
+          address: ${_param:opnfv_infra_kvm_node0{{ i }}_address}
+          names:
+            - ${_param:infra_kvm_node0{{ i }}_hostname}
+            - ${_param:infra_kvm_node0{{ i }}_hostname}.${_param:cluster_domain}
+{%- endfor %}
+{%- endif %}
diff --git a/mcp/reclass/classes/cluster/mcp-iec-noha/infra/kvm.yml.j2 b/mcp/reclass/classes/cluster/mcp-iec-noha/infra/kvm.yml.j2
new file mode 100644 (file)
index 0000000..7b8709c
--- /dev/null
@@ -0,0 +1,111 @@
+##############################################################################
+# Copyright (c) 2019 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: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
+{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
+{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
+{%- set nics = { nm.ctl01.nic_admin: True, nm.ctl01.nic_mgmt: True, nm.ctl01.nic_public: True } %}
+{%- set vlans = { nm.vlan_admin: nm.ctl01.nic_admin, nm.vlan_mgmt: nm.ctl01.nic_mgmt, nm.vlan_public: nm.ctl01.nic_public } %}
+---
+classes:
+  - system.salt.control.virt
+  - cluster.all-mcp-arch-common.opnfv.maas_proxy
+  - cluster.all-mcp-arch-common.opnfv.lab_proxy_pdf
+  - cluster.mcp-iec-noha.infra
+parameters:
+  _param:
+    linux_system_codename: xenial
+  linux:
+    network:
+      interface:
+
+{{ ma.linux_network_interfaces_nic(nics) }}
+
+{{ ma.linux_network_interfaces_vlan(vlans) }}
+
+        br-mgmt:
+          enabled: true
+          proto: static
+          address: ${_param:pxe_admin_address}
+          netmask: ${_param:opnfv_net_admin_mask}
+          gateway: {{ nm.net_admin_gw }}
+          name_servers:
+            - {{ nm.net_admin_gw }}
+          type: bridge
+          use_interfaces:
+            - {{ ma.interface_str(nm.ctl01.nic_admin, nm.vlan_admin) }}
+          noifupdown: true
+        br-ctl:
+          enabled: true
+          type: bridge
+          proto: static
+          address: ${_param:single_address}
+          netmask: ${_param:opnfv_net_mgmt_mask}
+          use_interfaces:
+            - {{ ma.interface_str(nm.ctl01.nic_mgmt, nm.vlan_mgmt) }}
+          noifupdown: true
+        br-ex:
+          enabled: true
+          proto: manual
+          netmask: ${_param:opnfv_net_public_mask}
+          type: bridge
+          use_interfaces:
+            - {{ ma.interface_str(nm.ctl01.nic_public, nm.vlan_public) }}
+          noifupdown: true
+    system:
+      kernel:
+        boot_options:
+          - spectre_v2=off
+          - nopti
+        sysctl:
+          net.ipv4.ip_forward: 0
+  libvirt:
+    server:
+      service: libvirtd
+      config_sys: /etc/default/libvirtd
+      unix_sock_group: libvirt
+  salt:
+    control:
+      size:
+        akraino.iec:
+          cpu: 8
+          ram: 12288
+          disk_profile: small
+          net_profile: default
+      cluster:
+        internal:
+          domain: ${_param:cluster_domain}
+          engine: virt
+          node:
+{%- for i in range(1, 4) %}
+            iec0{{ i }}:
+              name: ${_param:akraino_iec_node0{{ i }}_hostname}
+              provider: ${_param:infra_kvm_node0{{ i }}_hostname}.${_param:cluster_domain}
+              size: akraino.iec
+              image: ${_param:salt_control_xenial_image}
+{%- if conf.nodes[nm.ctl01.idx].node.arch == 'aarch64' %}
+              machine: virt
+              cpu_mode: host-passthrough
+              loader:
+                readonly: 'yes'
+                type: pflash
+                path: /usr/share/AAVMF/AAVMF_CODE.fd
+{%- endif %}
+{%- endfor %}
+  virt:
+    nic:
+      default:
+        eth2:
+          bridge: br-mgmt
+          model: virtio
+        eth1:
+          bridge: br-ex
+          model: virtio
+        eth0:
+          bridge: br-ctl
+          model: virtio
diff --git a/mcp/reclass/classes/cluster/mcp-iec-noha/infra/maas.yml b/mcp/reclass/classes/cluster/mcp-iec-noha/infra/maas.yml
new file mode 100644 (file)
index 0000000..393eb73
--- /dev/null
@@ -0,0 +1,11 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+---
+classes:
+  - cluster.mcp-iec-noha.infra
+  - cluster.all-mcp-arch-common.infra.maas
diff --git a/mcp/reclass/classes/cluster/mcp-iec-noha/init.yml b/mcp/reclass/classes/cluster/mcp-iec-noha/init.yml
new file mode 100644 (file)
index 0000000..e0224eb
--- /dev/null
@@ -0,0 +1,12 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+---
+classes:
+  - cluster.mcp-common-noha.init_options
+  - cluster.mcp-iec-noha.infra
+  - cluster.mcp-iec-noha.akraino
diff --git a/mcp/reclass/nodes/cfg01.mcp-iec-noha.local.yml b/mcp/reclass/nodes/cfg01.mcp-iec-noha.local.yml
new file mode 100644 (file)
index 0000000..0196ca5
--- /dev/null
@@ -0,0 +1,18 @@
+##############################################################################
+# Copyright (c) 2019 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
+##############################################################################
+---
+classes:
+  - cluster.mcp-iec-noha.infra.config
+parameters:
+  _param:
+    linux_system_codename: xenial
+    reclass_data_revision: master
+  linux:
+    system:
+      name: cfg01
+      domain: mcp-iec-noha.local
index dbac901..82c4178 100644 (file)
@@ -31,7 +31,7 @@ services:
       - {{ conf.MCP_STORAGE_DIR }}/pki:/etc/pki
       - {{ conf.MCP_STORAGE_DIR }}/salt:/etc/salt
       - {{ conf.MCP_STORAGE_DIR }}/hosts:/etc/hosts
-{%- if conf.MCP_VCP %}
+{%- if conf.MCP_VCP or '-vcp-' in conf.MCP_DEPLOY_SCENARIO %}
       - {{ conf.MCP_STORAGE_DIR }}/base_image_opnfv_fuel_vcp.img:/srv/salt/env/prd/salt/files/control/images/base_image_opnfv_fuel_vcp.img
 {%- endif %}
     hostname: cfg01
index 917a716..94f99be 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 917a71636a73cc72098d13ec32e52520cced8237
+Subproject commit 94f99be1ddd263506231ec5b72b576a6c63d82c6
index 30e41e9..187f092 100644 (file)
@@ -34,7 +34,8 @@
   {%- set arr = [] -%}
   {%- for section in section_map -%}
     {%- for n in V.nodes[section] or [] -%}
-      {%- if conf.nodes[section_map[section] + loop.index0].node.type == 'virtual' -%}
+      {%- if ( section_map[section] < conf.nodes | length and
+               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 -%}
@@ -61,7 +62,8 @@
   {%- set arr = [] -%}
   {%- for section in sections -%}
     {%- for n in V.nodes[section] or [] -%}
-      {%- if conf.nodes[section_map[section] + loop.index0].node.type in type -%}
+      {%- if ( section_map[section] < conf.nodes | length and
+               conf.nodes[section_map[section] + loop.index0].node.type in type ) -%}
         {%- do arr.append(n) -%}
       {%- endif -%}
     {%- endfor -%}
@@ -77,7 +79,7 @@
 {%- macro serialize_apt_pkg() -%}
   {%- set arr = [] -%}
   {%- set sections = [arch.common] -%}
-  {%- if conf.MCP_VCP -%}
+  {%- if conf.MCP_VCP or '-vcp-' in conf.MCP_DEPLOY_SCENARIO -%}
     {%- do sections.append(arch.control) -%}
   {%- endif -%}
   {%- for c in sections -%}