[docker] Switch to containerized Salt Master 61/61361/10
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Sat, 18 Aug 2018 01:46:13 +0000 (03:46 +0200)
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Tue, 28 Aug 2018 23:27:28 +0000 (01:27 +0200)
* Refactor OPNFV salt-formulas mechanism to resemble upstream git
  structure:
  - git submodules: add new submodule for each formula we patch;
  - create salt-formula-x directories for OPNFV formulas;
  - move mcp/metadata/service contents to their each formula subdir;
  - use `make patches-import` for patches previously handled by
    patch.sh;
  - retire patch.sh
* states: add virtual_init:
  - mostly based on old salt.sh, which is now obsolete;
  - exclude salt-master service restart (it would kill the container);
* scenarios: cleanup (rm cfg01 virtual node def), adopt virtual_init;
* reclass: align our model with prebuilt container's Salt config:
  - drop linux:network pillar data (handled by Docker);
  - stop applying linux.system state on cfg01;
  - align salt user homedir;
  - drop salt-formula packages (preprovisioned);
* minor plumbing in deploy.sh and lib.sh;

JIRA: FUEL-383

Change-Id: I28708a9b399d3f19012212c71966ebda9d6fc0ac
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
47 files changed:
.gitmodules
ci/deploy.sh
mcp/config/scenario/os-nosdn-nofeature-ha.yaml.j2
mcp/config/scenario/os-nosdn-nofeature-noha.yaml.j2
mcp/config/scenario/os-nosdn-ovs-ha.yaml.j2
mcp/config/scenario/os-nosdn-ovs-noha.yaml.j2
mcp/config/scenario/os-odl-nofeature-ha.yaml.j2
mcp/config/scenario/os-odl-nofeature-noha.yaml.j2
mcp/config/scenario/os-odl-ovs-noha.yaml.j2
mcp/config/scenario/os-ovn-nofeature-ha.yaml.j2
mcp/config/scenario/os-ovn-nofeature-noha.yaml.j2
mcp/config/states/virtual_init [new file with mode: 0755]
mcp/patches/patch.sh [deleted file]
mcp/patches/patches.list [deleted file]
mcp/patches/salt-formula-keystone/0001-Handle-extra-environment-variables.patch [moved from mcp/patches/0008-Handle-extra-environment-variables.patch with 93% similarity]
mcp/patches/salt-formula-linux/0001-system.repo-Debian-Use-proxy-for-keyservers.patch [moved from mcp/patches/0011-system.repo-Debian-Add-keyserver-proxy-support.patch with 99% similarity]
mcp/patches/salt-formula-linux/0002-Set-ovs-bridges-as-L3-interfaces.patch [moved from mcp/patches/0015-Set-ovs-bridges-as-L3-interfaces.patch with 91% similarity]
mcp/patches/salt-formula-maas/0001-maas-region-skip-credentials-update.patch [moved from mcp/patches/0002-maas-region-skip-credentials-update.patch with 89% similarity]
mcp/patches/salt-formula-maas/0002-maas-region-allow-timeout-override.patch [moved from mcp/patches/0010-maas-region-allow-timeout-override.patch with 93% similarity]
mcp/patches/salt-formula-maas/0003-Add-machines.delete-co-pxe_nat-sls.patch [new file with mode: 0644]
mcp/reclass/classes/cluster/all-mcp-arch-common/infra/config_pdf.yml.j2
mcp/reclass/classes/cluster/mcp-common-ha/infra/config.yml.j2
mcp/reclass/classes/cluster/mcp-common-noha/infra/config.yml.j2
mcp/salt-formulas/maas/machines/delete.sls [deleted file]
mcp/salt-formulas/maas/machines/mark_broken_fixed.sls [deleted file]
mcp/salt-formulas/maas/machines/override_failed_testing.sls [deleted file]
mcp/salt-formulas/maas/pxe_nat.sls [deleted file]
mcp/salt-formulas/salt-formula-keystone [new submodule]
mcp/salt-formulas/salt-formula-linux [new submodule]
mcp/salt-formulas/salt-formula-maas [new submodule]
mcp/salt-formulas/salt-formula-nova [new submodule]
mcp/salt-formulas/salt-formula-opendaylight/metadata/service/server/single.yml [moved from mcp/metadata/service/opendaylight/server/single.yml with 100% similarity]
mcp/salt-formulas/salt-formula-opendaylight/metadata/service/support.yml [moved from mcp/metadata/service/opendaylight/support.yml with 100% similarity]
mcp/salt-formulas/salt-formula-opendaylight/opendaylight/files/jetty.xml [moved from mcp/salt-formulas/opendaylight/files/jetty.xml with 100% similarity]
mcp/salt-formulas/salt-formula-opendaylight/opendaylight/files/setenv.shell [moved from mcp/salt-formulas/opendaylight/files/setenv.shell with 100% similarity]
mcp/salt-formulas/salt-formula-opendaylight/opendaylight/init.sls [moved from mcp/salt-formulas/opendaylight/init.sls with 100% similarity]
mcp/salt-formulas/salt-formula-opendaylight/opendaylight/map.jinja [moved from mcp/salt-formulas/opendaylight/map.jinja with 100% similarity]
mcp/salt-formulas/salt-formula-opendaylight/opendaylight/server.sls [moved from mcp/salt-formulas/opendaylight/server.sls with 100% similarity]
mcp/salt-formulas/salt-formula-tacker/metadata/service/server/single.yml [moved from mcp/metadata/service/tacker/server/single.yml with 100% similarity]
mcp/salt-formulas/salt-formula-tacker/tacker/files/tacker.conf [moved from mcp/salt-formulas/tacker/files/tacker.conf with 100% similarity]
mcp/salt-formulas/salt-formula-tacker/tacker/files/tacker.systemd [moved from mcp/salt-formulas/tacker/files/tacker.systemd with 100% similarity]
mcp/salt-formulas/salt-formula-tacker/tacker/init.sls [moved from mcp/salt-formulas/tacker/init.sls with 100% similarity]
mcp/salt-formulas/salt-formula-tacker/tacker/map.jinja [moved from mcp/salt-formulas/tacker/map.jinja with 100% similarity]
mcp/salt-formulas/salt-formula-tacker/tacker/server.sls [moved from mcp/salt-formulas/tacker/server.sls with 100% similarity]
mcp/scripts/lib.sh
mcp/scripts/salt.sh [deleted file]
mcp/scripts/xdf_data.sh.j2

index d3501c3..767cf14 100644 (file)
        path = docker
        url = https://github.com/epcim/docker-salt-formulas
        branch = master
+[submodule "salt-formula-linux"]
+       path = mcp/salt-formulas/salt-formula-linux
+       url = https://github.com/salt-formulas/salt-formula-linux
+       branch = master
+[submodule "salt-formula-nova"]
+       path = mcp/salt-formulas/salt-formula-nova
+       url = https://github.com/salt-formulas/salt-formula-nova
+       branch = master
+[submodule "salt-formula-keystone"]
+       path = mcp/salt-formulas/salt-formula-keystone
+       url = https://github.com/salt-formulas/salt-formula-keystone
+       branch = master
+[submodule "salt-formula-maas"]
+       path = mcp/salt-formulas/salt-formula-maas
+       url = https://github.com/salt-formulas/salt-formula-maas
+       branch = master
index 47662f7..d3882a8 100755 (executable)
@@ -241,7 +241,7 @@ if [ ${USE_EXISTING_PKGS} -eq 1 ]; then
 else
     notify "[NOTE] Installing required distro pkgs" 2
     jumpserver_pkg_install 'deploy'
-    docker_install
+    docker_install "${MCP_STORAGE_DIR}"
 fi
 
 if ! virsh list >/dev/null 2>&1; then
@@ -289,22 +289,21 @@ if [ ${DRY_RUN} -eq 1 ]; then
     exit 0
 elif [ ${USE_EXISTING_INFRA} -gt 0 ]; then
     notify "[NOTE] Use existing infra" 2
-    check_connection
 else
     prepare_vms "${base_image}" "${MCP_STORAGE_DIR}" "${virtual_repos_pkgs}" \
       "${virtual_nodes[@]}"
+    prepare_containers "${MCP_STORAGE_DIR}"
     create_networks "${OPNFV_BRIDGES[@]}"
     do_sysctl_cfg
     do_udev_cfg
     create_vms "${MCP_STORAGE_DIR}" "${virtual_nodes_data}" "${OPNFV_BRIDGES[@]}"
     update_mcpcontrol_network
     start_vms "${virtual_nodes[@]}"
-    check_connection
-fi
-if [ ${USE_EXISTING_INFRA} -lt 2 ]; then
-    wait_for 5 "./salt.sh ${MCP_STORAGE_DIR}/pod_config.yml ${virtual_nodes[*]}"
 fi
 
+start_containers "${MCP_STORAGE_DIR}"
+check_connection
+
 # Openstack cluster setup
 set +x
 if [ ${INFRA_CREATION_ONLY} -eq 1 ] || [ ${NO_DEPLOY_ENVIRONMENT} -eq 1 ]; then
index 7eb604e..55da8f7 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-ovs-ha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -22,7 +23,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
@@ -34,9 +34,6 @@ virtual:
       - cmp001
       - cmp002
   # Below values are only used for each node if said node is virtual
-  cfg01:
-    vcpus: 4
-    ram: 6144
   mas01:
     vcpus: 4
     ram: 6144
index a0ad96b..cd214a5 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-ovs-noha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -20,7 +21,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
index da9938c..0f7a7bc 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-ovs-dpdk-ha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -23,7 +24,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
@@ -35,9 +35,6 @@ virtual:
       - cmp001
       - cmp002
   # Below values are only used for each node if said node is virtual
-  cfg01:
-    vcpus: 4
-    ram: 6144
   mas01:
     vcpus: 4
     ram: 6144
index bee0e92..bf37f93 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-ovs-dpdk-noha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -21,7 +22,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
index fbedbc6..b31dc13 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-odl-ha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -23,7 +24,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
@@ -35,9 +35,6 @@ virtual:
       - cmp001
       - cmp002
   # Below values are only used for each node if said node is virtual
-  cfg01:
-    vcpus: 4
-    ram: 6144
   mas01:
     vcpus: 4
     ram: 6144
index 7df28c2..2a10a31 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-odl-noha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -21,7 +22,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
index c81d35c..62c120b 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-odl-noha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -22,7 +23,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
index f81779b..021548f 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-ovn-ha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -22,7 +23,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
@@ -34,9 +34,6 @@ virtual:
       - cmp001
       - cmp002
   # Below values are only used for each node if said node is virtual
-  cfg01:
-    vcpus: 4
-    ram: 6144
   mas01:
     vcpus: 4
     ram: 6144
index fee47d7..6351063 100644 (file)
@@ -10,6 +10,7 @@
 cluster:
   domain: mcp-ovn-noha.local
   states:
+    - virtual_init
 {%- if nm.cluster.has_baremetal_nodes %}
     - maas
     - baremetal_init
@@ -19,7 +20,6 @@ cluster:
 virtual:
   nodes:
     infra:
-      - cfg01
 {%- if nm.cluster.has_baremetal_nodes %}
       - mas01
 {%- endif %}
diff --git a/mcp/config/states/virtual_init b/mcp/config/states/virtual_init
new file mode 100755 (executable)
index 0000000..147e6b0
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash -e
+# shellcheck disable=SC1090
+##############################################################################
+# 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
+##############################################################################
+
+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"
+
+CI_DEBUG=${CI_DEBUG:-0}; [[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
+# shellcheck disable=SC2154,SC2086,SC2116
+LOCAL_VIRT_NODES=$(echo ${virtual_nodes[*]}) # unquoted to filter space
+NODE_MASK="${LOCAL_VIRT_NODES// /|}"
+
+# wait_for 3.0 "salt-call state.apply salt exclude='[{id: salt_master_service}]'"
+wait_for 5.0 "salt-call state.sls reclass,linux.network"
+wait_for 3.0 "salt -C '*' saltutil.refresh_pillar"
+
+# NOTE: domain name changes are not yet supported without a clean redeploy
+
+# Init specific to VMs on FN (all for virtual, mas for baremetal)
+wait_for 3.0 "(for n in ${LOCAL_VIRT_NODES}; do salt -C \${n}.* test.ping || exit; done)"
+
+wait_for 3.0 "salt -C 'E@^(${NODE_MASK}).*' state.sls linux.system,linux.storage"
+wait_for 2.0 "salt -C 'E@^(${NODE_MASK}).*' state.sls linux.network"
+salt -C "E@^(${NODE_MASK}).*" system.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}).*' saltutil.sync_all"
+wait_for 3.0 "salt -C 'E@^(${NODE_MASK}).*' state.apply salt"
+
+wait_for 3.0 "salt -C 'E@^(${NODE_MASK}).*' state.sls ntp"
diff --git a/mcp/patches/patch.sh b/mcp/patches/patch.sh
deleted file mode 100755 (executable)
index bb48dcd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash -e
-##############################################################################
-# Copyright (c) 2017 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
-
-if [ -r "$1" ]; then
-  while IFS=': ' read -r p_dest p_file; do
-    if ! patch --dry-run -Rd "${p_dest}" -r - -s -p1 < \
-      "/root/fuel/mcp/patches/${p_file}" > /dev/null; then
-        patch -d "${p_dest}" -p1 < "/root/fuel/mcp/patches/${p_file}"
-    fi
-  done < <(grep -vE '^#' "${1}" | grep -E "^.*${2}.*: ")
-fi
diff --git a/mcp/patches/patches.list b/mcp/patches/patches.list
deleted file mode 100644 (file)
index baa15d7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-##############################################################################
-# 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
-##############################################################################
-/usr/share/salt-formulas/env: 0002-maas-region-skip-credentials-update.patch
-/usr/share/salt-formulas/env: 0008-Handle-extra-environment-variables.patch
-/usr/share/salt-formulas/env: 0010-maas-region-allow-timeout-override.patch
-/usr/share/salt-formulas/env: 0011-system.repo-Debian-Add-keyserver-proxy-support.patch
-/usr/share/salt-formulas/env: 0015-Set-ovs-bridges-as-L3-interfaces.patch
@@ -11,6 +11,9 @@ Date: Mon, 12 Mar 2018 17:43:09 +0400
 Subject: [PATCH] Handle extra environment variables
 
 Change-Id: Ieae46ac65041630759c82238a8a5ce0535c454b2
+---
+ keystone/files/keystonercv3 | 3 +++
+ 1 file changed, 3 insertions(+)
 
 diff --git a/keystone/files/keystonercv3 b/keystone/files/keystonercv3
 index 1b7f378..984c8a2 100644
@@ -37,7 +37,7 @@ Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
  1 file changed, 47 insertions(+), 8 deletions(-)
 
 diff --git a/linux/system/repo.sls b/linux/system/repo.sls
-index 9664129..d9f567e 100644
+index 0c0b026..82661f0 100644
 --- a/linux/system/repo.sls
 +++ b/linux/system/repo.sls
 @@ -7,18 +7,27 @@ linux_repo_prereq_pkgs:
@@ -11,10 +11,16 @@ Date: Wed, 28 Feb 2018 17:54:28 +0400
 Subject: [PATCH] Set ovs bridges as L3 interfaces
 
 Change-Id: I1e83129cc184cf481bea21d7aa452bf60d9e0499
+---
+ linux/files/ovs_bridge      | 19 +++++++++++++++++++
+ linux/files/ovs_port        |  7 ++++++-
+ linux/network/interface.sls | 28 ++++++++++++++++++++++++++++
+ 3 files changed, 53 insertions(+), 1 deletion(-)
+ create mode 100644 linux/files/ovs_bridge
 
 diff --git a/linux/files/ovs_bridge b/linux/files/ovs_bridge
 new file mode 100644
-index 0000000..c609e45
+index 0000000..073c91c
 --- /dev/null
 +++ b/linux/files/ovs_bridge
 @@ -0,0 +1,19 @@
@@ -38,14 +44,14 @@ index 0000000..c609e45
 +  dns-nameservers {{ bridge.name_servers | join(' ') }}
 +  {%- endif %}
 diff --git a/linux/files/ovs_port b/linux/files/ovs_port
-index 222ca8e..efb0307 100644
+index 222ca8e..03072cd 100644
 --- a/linux/files/ovs_port
 +++ b/linux/files/ovs_port
 @@ -1,6 +1,11 @@
+-auto {{ port_name }}
 +# With systemd, adding OVS bridges as 'auto' can cause race conditions
 +# https://github.com/openvswitch/ovs/blob/master/debian/openvswitch-switch.README.Debian
 +# auto {{ port_name }}
--auto {{ port_name }}
  allow-{{ port.bridge }} {{ port_name }}
  iface {{ port_name }} inet {{ port.get('proto', 'manual') }}
 +{%- if '.' in port_name %}
@@ -55,7 +61,7 @@ index 222ca8e..efb0307 100644
  mtu {{ port.get('mtu', '1500') }}
  ovs_bridge {{ port.bridge }}
 diff --git a/linux/network/interface.sls b/linux/network/interface.sls
-index 180f912..dcb295b 100644
+index c2d2a23..01131fa 100644
 --- a/linux/network/interface.sls
 +++ b/linux/network/interface.sls
 @@ -91,6 +91,34 @@ add_int_{{ int_name }}_to_ovs_dpdk_bridge_{{ interface_name }}:
@@ -17,12 +17,14 @@ updating credentials.
 
 Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
 ---
+ maas/region.sls | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
 
 diff --git a/maas/region.sls b/maas/region.sls
-index d3227ca..8a2243d 100644
+index 684fda4..5844f22 100644
 --- a/maas/region.sls
 +++ b/maas/region.sls
-@@ -6,10 +6,9 @@
+@@ -6,10 +6,9 @@ maas_region_packages:
      - names: {{ region.pkgs }}
 
  /etc/maas/regiond.conf:
@@ -35,18 +35,20 @@ node's PXE physical interface, but that overcomplicates things.
 blocksize to be 1008. We can force it to be 1464 and gain some performance due
 to MTU beeing 1500 (i.e. allow bigger packets).
 
-
 JIRA: FUEL-316
 
 Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
 ---
+ maas/region.sls | 40 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
 
 diff --git a/maas/region.sls b/maas/region.sls
+index 5844f22..d844bb4 100644
 --- a/maas/region.sls
 +++ b/maas/region.sls
-@@ -19,6 +19,46 @@
-   - require:
-     - pkg: maas_region_packages
+@@ -38,6 +38,46 @@ restore_maas_database_{{ region.database.name }}:
+
+ {%- endif %}
 
 +maas_timeout_commissioning:
 +  file.replace:
diff --git a/mcp/patches/salt-formula-maas/0003-Add-machines.delete-co-pxe_nat-sls.patch b/mcp/patches/salt-formula-maas/0003-Add-machines.delete-co-pxe_nat-sls.patch
new file mode 100644 (file)
index 0000000..9f13c46
--- /dev/null
@@ -0,0 +1,137 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Sun, 19 Aug 2018 05:38:27 +0200
+Subject: [PATCH] Add machines.delete & co, pxe_nat sls
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ maas/machines/delete.sls                  | 20 ++++++++++++
+ maas/machines/mark_broken_fixed.sls       | 20 ++++++++++++
+ maas/machines/override_failed_testing.sls | 20 ++++++++++++
+ maas/pxe_nat.sls                          | 37 +++++++++++++++++++++++
+ 4 files changed, 97 insertions(+)
+ create mode 100644 maas/machines/delete.sls
+ create mode 100644 maas/machines/mark_broken_fixed.sls
+ create mode 100644 maas/machines/override_failed_testing.sls
+ create mode 100644 maas/pxe_nat.sls
+
+diff --git a/maas/machines/delete.sls b/maas/machines/delete.sls
+new file mode 100644
+index 0000000..2903f92
+--- /dev/null
++++ b/maas/machines/delete.sls
+@@ -0,0 +1,20 @@
++##############################################################################
++# Copyright (c) 2017 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
++##############################################################################
++{%- from "maas/map.jinja" import region with context %}
++
++maas_login_admin:
++  cmd.run:
++  - name: "maas-region apikey --username {{ region.admin.username }} > /var/lib/maas/.maas_credentials"
++  - unless: 'test -e /var/lib/maas/.maas_credentials'
++
++# TODO: implement delete_machine via _modules/maas.py
++delete_machine:
++  cmd.run:
++  - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv machine delete {{ pillar['system_id'] }}"
++  - require:
++    - cmd: maas_login_admin
+diff --git a/maas/machines/mark_broken_fixed.sls b/maas/machines/mark_broken_fixed.sls
+new file mode 100644
+index 0000000..46691bb
+--- /dev/null
++++ b/maas/machines/mark_broken_fixed.sls
+@@ -0,0 +1,20 @@
++##############################################################################
++# Copyright (c) 2017 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
++##############################################################################
++{%- from "maas/map.jinja" import region with context %}
++
++maas_login_admin:
++  cmd.run:
++  - name: "maas-region apikey --username {{ region.admin.username }} > /var/lib/maas/.maas_credentials"
++  - unless: 'test -e /var/lib/maas/.maas_credentials'
++
++# TODO: implement mark_broken_fixed_machine via _modules/maas.py
++mark_broken_fixed_machine:
++  cmd.run:
++  - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv machine mark-broken {{ pillar['system_id'] }} && sleep 10 && maas opnfv machine mark-fixed {{ pillar['system_id'] }} && maas opnfv machine test {{ pillar['system_id'] }} testing_scripts=fio"
++  - require:
++    - cmd: maas_login_admin
+diff --git a/maas/machines/override_failed_testing.sls b/maas/machines/override_failed_testing.sls
+new file mode 100644
+index 0000000..e7fe1d2
+--- /dev/null
++++ b/maas/machines/override_failed_testing.sls
+@@ -0,0 +1,20 @@
++##############################################################################
++# 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
++##############################################################################
++{%- from "maas/map.jinja" import region with context %}
++
++maas_login_admin:
++  cmd.run:
++  - name: "maas-region apikey --username {{ region.admin.username }} > /var/lib/maas/.maas_credentials"
++  - unless: 'test -e /var/lib/maas/.maas_credentials'
++
++# TODO: implement override_failed_testing via _modules/maas.py
++mark_broken_fixed_machine:
++  cmd.run:
++  - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv machine override-failed-testing {{ pillar['system_id'] }}"
++  - require:
++    - cmd: maas_login_admin
+diff --git a/maas/pxe_nat.sls b/maas/pxe_nat.sls
+new file mode 100644
+index 0000000..8a03c4f
+--- /dev/null
++++ b/maas/pxe_nat.sls
+@@ -0,0 +1,37 @@
++##############################################################################
++# Copyright (c) 2017 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
++##############################################################################
++net.ipv4.ip_forward:
++  sysctl.present:
++    - value: 1
++
++iptables_pxe_nat:
++  iptables.append:
++    - table: nat
++    - chain: POSTROUTING
++    - jump: MASQUERADE
++    - destination: 0/0
++    - source: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
++    - save: True
++
++iptables_pxe_source:
++  iptables.append:
++    - table: filter
++    - chain: INPUT
++    - jump: ACCEPT
++    - destination: 0/0
++    - source: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
++    - save: True
++
++iptables_pxe_destination:
++  iptables.append:
++    - table: filter
++    - chain: INPUT
++    - jump: ACCEPT
++    - destination: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
++    - source: 0/0
++    - save: True
index a12e156..5fa4ca4 100644 (file)
@@ -8,14 +8,12 @@
 {%- import 'net_map.j2' as nm with context %}
 ---
 classes:
-  - service.git.client
-  - system.linux.system.repo.mcp.salt
   - system.reclass.storage.salt
 {%- if nm.cluster.has_baremetal_nodes %}
   - system.reclass.storage.system.infra_maas_single
 {%- endif %}
   - system.salt.master.api
-  - system.salt.master.pkg
+  - system.salt.master.single
   - system.salt.minion.ca.salt_master
 parameters:
   _param:
@@ -25,6 +23,11 @@ parameters:
     salt_master_base_environment: prd
     # yamllint disable-line rule:line-length
     salt_api_password_hash: "$6$sGnRlxGf$al5jMCetLP.vfI/fTl3Z0N7Za1aeiexL487jAtyRABVfT3NlwZxQGVhO7S1N8OwS/34VHYwZQA8lkXwKMN/GS1"
+  linux:
+    system:
+      user:
+        salt:
+          home: /home/salt
   salt:
     master:
       accept_policy: open_mode
index 0e880c5..ee849a6 100644 (file)
@@ -29,37 +29,6 @@ parameters:
     mcpcontrol_nic: ${_param:opnfv_fn_vm_primary_interface}
     single_nic: ${_param:opnfv_fn_vm_secondary_interface}
     pxe_admin_nic: ${_param:opnfv_fn_vm_tertiary_interface}
-  linux:
-    network:
-      interface:
-        mcpcontrol_int:
-          enabled: true
-          type: eth
-          proto: dhcp
-          name: ${_param:mcpcontrol_nic}
-        single:
-          enabled: true
-          type: eth
-          name: ${_param:single_nic}
-{%- if conf.idf.fuel.jumphost.get('trunks', {}).get('mgmt', False) and (nm.vlan_mgmt | int > 0) %}
-          proto: manual
-        single_vlan:
-          enabled: true
-          type: vlan
-          name: ${_param:single_nic}.{{ nm.vlan_mgmt }}
-          use_interfaces:
-            - ${_param:single_nic}
-{%- endif %}
-          proto: static
-          address: ${_param:single_address}
-          netmask: ${_param:opnfv_net_mgmt_mask}
-        pxe_admin_int:
-          enabled: true
-          type: eth
-          proto: static
-          name: ${_param:pxe_admin_nic}
-          address: ${_param:pxe_admin_address}
-          netmask: ${_param:opnfv_net_admin_mask}
   salt:
     master:
       accept_policy: open_mode
index 36a2c27..a6bf5cd 100644 (file)
@@ -16,37 +16,6 @@ parameters:
     single_address: ${_param:opnfv_infra_config_address}
     salt_master_host: 127.0.0.1
     salt_minion_ca_host: ${linux:network:fqdn}
-  linux:
-    network:
-      interface:
-        mcpcontrol_int:
-          enabled: true
-          type: eth
-          proto: dhcp
-          name: ${_param:opnfv_fn_vm_primary_interface}
-        single_int:
-          enabled: true
-          name: ${_param:opnfv_fn_vm_secondary_interface}
-          type: eth
-{%- if conf.idf.fuel.jumphost.get('trunks', {}).get('mgmt', False) and (nm.vlan_mgmt | int > 0) %}
-          proto: manual
-        single_int_vlan:
-          enabled: true
-          type: vlan
-          name: ${_param:opnfv_fn_vm_secondary_interface}.{{ nm.vlan_mgmt }}
-          use_interfaces:
-            - ${_param:opnfv_fn_vm_secondary_interface}
-{%- endif %}
-          proto: static
-          address: ${_param:single_address}
-          netmask: ${_param:opnfv_net_mgmt_mask}
-        pxe_admin_int:
-          enabled: true
-          type: eth
-          proto: static
-          name: ${_param:opnfv_fn_vm_tertiary_interface}
-          address: ${_param:opnfv_infra_config_pxe_admin_address}
-          netmask: ${_param:opnfv_net_admin_mask}
   salt:
     master:
       file_recv: true
diff --git a/mcp/salt-formulas/maas/machines/delete.sls b/mcp/salt-formulas/maas/machines/delete.sls
deleted file mode 100644 (file)
index 2903f92..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 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
-##############################################################################
-{%- from "maas/map.jinja" import region with context %}
-
-maas_login_admin:
-  cmd.run:
-  - name: "maas-region apikey --username {{ region.admin.username }} > /var/lib/maas/.maas_credentials"
-  - unless: 'test -e /var/lib/maas/.maas_credentials'
-
-# TODO: implement delete_machine via _modules/maas.py
-delete_machine:
-  cmd.run:
-  - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv machine delete {{ pillar['system_id'] }}"
-  - require:
-    - cmd: maas_login_admin
diff --git a/mcp/salt-formulas/maas/machines/mark_broken_fixed.sls b/mcp/salt-formulas/maas/machines/mark_broken_fixed.sls
deleted file mode 100644 (file)
index 46691bb..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 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
-##############################################################################
-{%- from "maas/map.jinja" import region with context %}
-
-maas_login_admin:
-  cmd.run:
-  - name: "maas-region apikey --username {{ region.admin.username }} > /var/lib/maas/.maas_credentials"
-  - unless: 'test -e /var/lib/maas/.maas_credentials'
-
-# TODO: implement mark_broken_fixed_machine via _modules/maas.py
-mark_broken_fixed_machine:
-  cmd.run:
-  - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv machine mark-broken {{ pillar['system_id'] }} && sleep 10 && maas opnfv machine mark-fixed {{ pillar['system_id'] }} && maas opnfv machine test {{ pillar['system_id'] }} testing_scripts=fio"
-  - require:
-    - cmd: maas_login_admin
diff --git a/mcp/salt-formulas/maas/machines/override_failed_testing.sls b/mcp/salt-formulas/maas/machines/override_failed_testing.sls
deleted file mode 100644 (file)
index e7fe1d2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-##############################################################################
-# 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
-##############################################################################
-{%- from "maas/map.jinja" import region with context %}
-
-maas_login_admin:
-  cmd.run:
-  - name: "maas-region apikey --username {{ region.admin.username }} > /var/lib/maas/.maas_credentials"
-  - unless: 'test -e /var/lib/maas/.maas_credentials'
-
-# TODO: implement override_failed_testing via _modules/maas.py
-mark_broken_fixed_machine:
-  cmd.run:
-  - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv machine override-failed-testing {{ pillar['system_id'] }}"
-  - require:
-    - cmd: maas_login_admin
diff --git a/mcp/salt-formulas/maas/pxe_nat.sls b/mcp/salt-formulas/maas/pxe_nat.sls
deleted file mode 100644 (file)
index 8a03c4f..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 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
-##############################################################################
-net.ipv4.ip_forward:
-  sysctl.present:
-    - value: 1
-
-iptables_pxe_nat:
-  iptables.append:
-    - table: nat
-    - chain: POSTROUTING
-    - jump: MASQUERADE
-    - destination: 0/0
-    - source: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
-    - save: True
-
-iptables_pxe_source:
-  iptables.append:
-    - table: filter
-    - chain: INPUT
-    - jump: ACCEPT
-    - destination: 0/0
-    - source: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
-    - save: True
-
-iptables_pxe_destination:
-  iptables.append:
-    - table: filter
-    - chain: INPUT
-    - jump: ACCEPT
-    - destination: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
-    - source: 0/0
-    - save: True
diff --git a/mcp/salt-formulas/salt-formula-keystone b/mcp/salt-formulas/salt-formula-keystone
new file mode 160000 (submodule)
index 0000000..df75142
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit df75142aaf6487c3af9e2868f4f12ef18228ca99
diff --git a/mcp/salt-formulas/salt-formula-linux b/mcp/salt-formulas/salt-formula-linux
new file mode 160000 (submodule)
index 0000000..cf1b5b3
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit cf1b5b322a077dc8d6f9bf5b36a7a0a71a2b3a06
diff --git a/mcp/salt-formulas/salt-formula-maas b/mcp/salt-formulas/salt-formula-maas
new file mode 160000 (submodule)
index 0000000..c6a12de
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit c6a12dea5f8d8c7c700f596dbabb805113f1d341
diff --git a/mcp/salt-formulas/salt-formula-nova b/mcp/salt-formulas/salt-formula-nova
new file mode 160000 (submodule)
index 0000000..539e993
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 539e9938e74f8a1ad19c2c1a653761df53bc24b7
index f5affb0..8f7cccd 100644 (file)
@@ -454,10 +454,7 @@ function create_vms {
 
 function update_mcpcontrol_network {
   # set static ip address for salt master node, MaaS node
-  local cmac=$(virsh domiflist cfg01 2>&1| awk '/mcpcontrol/ {print $5; exit}')
   local amac=$(virsh domiflist mas01 2>&1| awk '/mcpcontrol/ {print $5; exit}')
-  virsh net-update "mcpcontrol" add ip-dhcp-host \
-    "<host mac='${cmac}' name='cfg01' ip='${SALT_MASTER}'/>" --live --config
   [ -z "${amac}" ] || virsh net-update "mcpcontrol" add ip-dhcp-host \
     "<host mac='${amac}' name='mas01' ip='${MAAS_IP}'/>" --live --config
 }
@@ -489,6 +486,29 @@ function start_vms {
   done
 }
 
+function prepare_containers {
+  local image_dir=$1
+  [ -n "${image_dir}" ] || exit 1
+  [ -n "${MCP_REPO_ROOT_PATH}" ] || exit 1
+
+  "${image_dir}/docker-compose" -f docker-compose/docker-compose.yaml down
+  sudo rm -rf "${image_dir}/salt" "${image_dir}/nodes/"*
+  mkdir -p "${image_dir}/salt/"{master.d,minion.d}
+  # salt state does not properly configure file_roots in master.conf, hard set it
+  sed -e 's/user: salt/user: root\nfile_recv: True/' -e 's/auto_accept:/open_mode:/' \
+      "${MCP_REPO_ROOT_PATH}/docker/files/salt/master.conf" > \
+      "${image_dir}/salt/master.d/opnfv.conf"
+  echo 'master: localhost' > "${image_dir}/salt/minion.d/opnfv.conf"
+  cp "${MCP_REPO_ROOT_PATH}/mcp/scripts/docker-compose/files/hosts" \
+      "${image_dir}/hosts"
+}
+
+function start_containers {
+  local image_dir=$1
+  [ -n "${image_dir}" ] || exit 1
+  "${image_dir}/docker-compose" -f docker-compose/docker-compose.yaml up --quiet-pull -d
+}
+
 function check_connection {
   local total_attempts=60
   local sleep_time=5
@@ -584,12 +604,27 @@ function get_nova_compute_pillar_data {
 }
 
 function docker_install {
+  local image_dir=$1
   # Mininum effort attempt at installing Docker if missing
-  if ! which docker; then
+  if ! docker --version; then
     curl -fsSL https://get.docker.com -o get-docker.sh
     sudo sh get-docker.sh
     rm get-docker.sh
     # On RHEL distros, the Docker service should be explicitly started
     sudo systemctl start docker
+  else
+    DOCKER_VER=$(docker version --format '{{.Server.Version}}')
+    if [ "${DOCKER_VER%%.*}" -lt 2 ]; then
+      notify_e "[ERROR] Docker version ${DOCKER_VER} is too old, please upgrade it."
+    fi
+  fi
+  # Distro-provided docker-compose might be simply broken (Ubuntu 16.04, CentOS 7)
+  COMPOSE_BIN="${image_dir}/docker-compose"
+  COMPOSE_VERSION='1.22.0'
+  notify_n "[WARN] Using docker-compose ${COMPOSE_VERSION} in ${COMPOSE_BIN}" 3
+  if [ ! -e "${COMPOSE_BIN}" ]; then
+    COMPOSE_URL="https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}"
+    sudo curl -L "${COMPOSE_URL}/docker-compose-$(uname -s)-$(uname -m)" -o "${COMPOSE_BIN}"
+    sudo chmod +x "${COMPOSE_BIN}"
   fi
 }
diff --git a/mcp/scripts/salt.sh b/mcp/scripts/salt.sh
deleted file mode 100755 (executable)
index 46ef6ff..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/bin/bash -e
-##############################################################################
-# Copyright (c) 2017 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
-##############################################################################
-#
-# Deploy Salt Master
-#
-
-CI_DEBUG=${CI_DEBUG:-0}; [[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
-F_GIT_ROOT=$(git rev-parse --show-toplevel)
-F_GIT_DIR=$(cd "${F_GIT_ROOT}/mcp" && git rev-parse --git-dir)
-F_GIT_SUBD=${F_GIT_ROOT#${F_GIT_DIR%%/.git*}}
-OPNFV_TMP_DIR="/home/${SALT_MASTER_USER}/opnfv"
-OPNFV_GIT_DIR="/root/opnfv"
-OPNFV_FUEL_DIR="/root/fuel" # Should be in sync with patch.sh, scripts patches
-OPNFV_RDIR="reclass/classes/cluster/all-mcp-arch-common"
-OPNFV_VCP_IMG="mcp/scripts/base_image_opnfv_fuel_vcp.img"
-OPNFV_VCP_DIR="/srv/salt/env/prd/salt/files/control/images"
-LOCAL_GIT_DIR="${F_GIT_ROOT%${F_GIT_SUBD}}"
-LOCAL_PDF_RECLASS=$1; shift
-# shellcheck disable=SC2116,SC2086
-LOCAL_VIRT_NODES=$(echo ${*//cfg01/}) # unquoted to filter space
-NODE_MASK="${LOCAL_VIRT_NODES// /|}"
-
-# push to cfg01 current git repo first (including submodules), at ~ubuntu/opnfv
-# later we move it to ~root/opnfv (and ln as ~root/fuel); delete the temp clone
-remote_tmp="${SSH_SALT}:$(basename "${OPNFV_TMP_DIR}")"
-STORAGE_DIR=$(dirname "${LOCAL_PDF_RECLASS}")
-REL_STORAGE_DIR_PATH=${STORAGE_DIR#${LOCAL_GIT_DIR}}
-if [[ "${REL_STORAGE_DIR_PATH}" == "${STORAGE_DIR}" ]]
-then
-  REL_STORAGE_DIR_PATH=""
-fi
-rsync -Erl --delete -e "ssh ${SSH_OPTS}" \
-  --exclude={.gitignore,"$REL_STORAGE_DIR_PATH"} \
-  "${LOCAL_GIT_DIR}/" "${remote_tmp}/"
-if [ -n "${LOCAL_PDF_RECLASS}" ] && [ -f "${LOCAL_PDF_RECLASS}" ]; then
-  rsync -e "ssh ${SSH_OPTS}" "${LOCAL_PDF_RECLASS}" \
-    "${remote_tmp}${F_GIT_SUBD}/mcp/${OPNFV_RDIR}/opnfv/"
-fi
-local_vcp_img=$(dirname "${LOCAL_PDF_RECLASS}")/$(basename "${OPNFV_VCP_IMG}")
-if [ -e "${local_vcp_img}" ]; then
-  rsync -L -e "ssh ${SSH_OPTS}" "${local_vcp_img}" \
-    "${remote_tmp}${F_GIT_SUBD}/${OPNFV_VCP_IMG}"
-fi
-
-# ssh to cfg01
-# shellcheck disable=SC2086,2087
-ssh ${SSH_OPTS} "${SSH_SALT}" bash -s -e << SALT_INSTALL_END
-  sudo -i
-  set -e
-  export TERM=${TERM}
-  export CI_DEBUG=${CI_DEBUG}; [[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
-
-  echo -n 'Checking out cloud-init has finished running ...'
-  while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo -n '.'; sleep 1; done
-  echo ' done'
-
-  mkdir -p /srv/salt /usr/share/salt-formulas/reclass
-  rm -rf ${OPNFV_GIT_DIR} ${OPNFV_FUEL_DIR}
-  mv ${OPNFV_TMP_DIR} ${OPNFV_GIT_DIR} && chown -R root.root ${OPNFV_GIT_DIR}
-  find ${OPNFV_GIT_DIR} -name '.git' -type f | while read f_git; do
-    sed -i 's@${LOCAL_GIT_DIR}@${OPNFV_GIT_DIR}@g' \$f_git
-  done
-  ln -sf ${OPNFV_GIT_DIR}${F_GIT_SUBD} ${OPNFV_FUEL_DIR}
-  ln -sf ${OPNFV_FUEL_DIR}/mcp/reclass /srv/salt
-  ln -sf ${OPNFV_FUEL_DIR}/mcp/deploy/scripts /srv/salt
-  ln -sf ${OPNFV_FUEL_DIR}/mcp/scripts/mcp.rsa $(dirname "${OPNFV_FUEL_DIR}")
-
-  cp -r ${OPNFV_FUEL_DIR}/mcp/metadata/service /usr/share/salt-formulas/reclass
-  cd /srv/salt/reclass/classes/service && \
-    ln -sf /usr/share/salt-formulas/reclass/service/opendaylight
-
-  # Armband APT-MK nightly/extra repo for forked & extended reclass
-  wget -qO - https://linux.enea.com/apt-mk/public.gpg | apt-key add -
-  echo 'deb http://linux.enea.com/apt-mk/xenial nightly extra' > \
-    '/etc/apt/sources.list.d/armband_mcp_extra.list'
-  apt-get update
-
-  cd /srv/salt/scripts
-  export DEBIAN_FRONTEND=noninteractive
-  echo 'Dpkg::Use-Pty "0";' > /etc/apt/apt.conf.d/90silence-dpkg
-  OLD_DOMAIN=\$(grep -sPzo "id: cfg01\.\K(\S*)" /etc/salt/minion.d/minion.conf) || true
-  BOOTSTRAP_SALTSTACK_OPTS=" -r -dX stable 2017.7 " \
-    MASTER_HOSTNAME=cfg01.${CLUSTER_DOMAIN} DISTRIB_REVISION=nightly \
-      EXTRA_FORMULAS="nfs panko gnocchi oslo-templates" \
-        ./salt-master-init.sh
-  salt-key -Ay
-
-  cp -r ${OPNFV_FUEL_DIR}/mcp/salt-formulas/* /usr/share/salt-formulas/env
-  cd ${OPNFV_FUEL_DIR}/mcp/patches && ./patch.sh patches.list formulas
-  cd ${OPNFV_FUEL_DIR}/mcp/patches && ./patch.sh patches.list reclass
-
-  source ${OPNFV_FUEL_DIR}/mcp/scripts/lib.sh
-  wait_for 3.0 "salt-call state.apply salt"
-
-  # In case scenario changed (and implicitly domain name), re-register minions
-  if [ -n "\${OLD_DOMAIN}" ] && [ "\${OLD_DOMAIN}" != "${CLUSTER_DOMAIN}" ]; then
-    salt "*.\${OLD_DOMAIN}" cmd.run "grep \${OLD_DOMAIN} -sRl /etc/salt | \
-      xargs --no-run-if-empty sed -i 's/\${OLD_DOMAIN}/${CLUSTER_DOMAIN}/g'; \
-        service salt-minion restart" || true
-    salt-key -yd "*.\${OLD_DOMAIN}"
-    salt-key -Ay
-  fi
-
-  # Init specific to VMs on FN (all for virtual, cfg|mas for baremetal)
-  wait_for 3.0 'salt -C "cfg01*" state.apply linux'
-  if [[ "${LOCAL_VIRT_NODES}" =~ mas ]]; then
-    wait_for 3.0 'salt -C "mas*" test.ping'
-  else
-    wait_for 3.0 '(for n in ${LOCAL_VIRT_NODES}; do salt -C \${n}.* test.ping || exit; done)'
-  fi
-  wait_for 3.0 'salt -C "E@^(${NODE_MASK}|cfg01).*" saltutil.sync_all'
-  wait_for 3.0 'salt -C "E@^(${NODE_MASK}|cfg01).*" state.apply salt'
-
-  wait_for 3.0 'salt -C "E@^(${NODE_MASK}).*" state.sls linux.system,linux.storage'
-  wait_for 2.0 'salt -C "E@^(${NODE_MASK}).*" state.sls linux.network'
-  salt -C "E@^(${NODE_MASK}).*" system.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}|cfg01).*" state.sls ntp'
-
-  if [ -f "${OPNFV_FUEL_DIR}/${OPNFV_VCP_IMG}" ]; then
-    mkdir -p "${OPNFV_VCP_DIR}"
-    mv "${OPNFV_FUEL_DIR}/${OPNFV_VCP_IMG}" "${OPNFV_VCP_DIR}/"
-  fi
-SALT_INSTALL_END
index c0629fe..b8c3213 100644 (file)
@@ -33,7 +33,7 @@
 {%- macro serialize_vnodes() -%}
   {%- set arr = [] -%}
   {%- for section in section_map -%}
-    {%- for n in V.nodes[section] -%}
+    {%- 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 -%}
         {%- do arr.append(pack([n, V[n].ram or arch.default.ram,
@@ -48,7 +48,7 @@
 {%- macro filter_nodes(type, output_as_query = False, sections = section_map) -%}
   {%- set arr = [] -%}
   {%- for section in sections -%}
-    {%- for n in V.nodes[section] -%}
+    {%- 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) ) -%}