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
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
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
cluster:
domain: mcp-ovs-ha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
- 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
cluster:
domain: mcp-ovs-noha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
cluster:
domain: mcp-ovs-dpdk-ha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
- 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
cluster:
domain: mcp-ovs-dpdk-noha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
cluster:
domain: mcp-odl-ha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
- 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
cluster:
domain: mcp-odl-noha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
cluster:
domain: mcp-odl-noha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
cluster:
domain: mcp-ovn-ha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
- 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
cluster:
domain: mcp-ovn-noha.local
states:
+ - virtual_init
{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
virtual:
nodes:
infra:
- - cfg01
{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
--- /dev/null
+#!/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"
+++ /dev/null
-#!/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
+++ /dev/null
-##############################################################################
-# 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
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
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:
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 @@
+ 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 %}
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 }}:
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:
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:
--- /dev/null
+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
{%- 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:
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
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
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
+++ /dev/null
-##############################################################################
-# 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
+++ /dev/null
-##############################################################################
-# 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
+++ /dev/null
-##############################################################################
-# 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
+++ /dev/null
-##############################################################################
-# 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
--- /dev/null
+Subproject commit df75142aaf6487c3af9e2868f4f12ef18228ca99
--- /dev/null
+Subproject commit cf1b5b322a077dc8d6f9bf5b36a7a0a71a2b3a06
--- /dev/null
+Subproject commit c6a12dea5f8d8c7c700f596dbabb805113f1d341
--- /dev/null
+Subproject commit 539e9938e74f8a1ad19c2c1a653761df53bc24b7
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
}
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
}
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
}
+++ /dev/null
-#!/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
{%- 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,
{%- 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) ) -%}