**/docs_output/
**/releng/
**/mcp/deploy/images/
-**/mcp/scripts/mcp.rsa*
**/mcp/scripts/user-data.sh
-**/mcp/scripts/net_mcpcontrol.xml
+**/mcp/scripts/virsh_net/*.xml
**/mcp/scripts/*.img
+**/net_map.j2
path = mcp/reclass/classes/system
url = https://github.com/Mirantis/reclass-system-salt-model
branch = master
- ignore = all
[submodule "scripts"]
path = mcp/deploy/scripts
url = https://github.com/salt-formulas/salt-formulas-scripts
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. SPDX-License-Identifier: CC-BY-4.0
-.. (c) 2017 Ericsson AB, Mirantis Inc., Enea AB and others.
+.. (c) 2018 Ericsson AB, Mirantis Inc., Enea AB and others.
#!/bin/bash -e
-# shellcheck disable=SC2034,SC2154,SC1090,SC1091
+# shellcheck disable=SC2034,SC2154,SC1090,SC1091,SC2155
##############################################################################
-# Copyright (c) 2017 Ericsson AB, Mirantis Inc., Enea AB and others.
+# Copyright (c) 2018 Ericsson AB, Mirantis Inc., Enea AB and others.
# jonas.bjurel@ericsson.com
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
local RC=$?
cleanup_mounts > /dev/null 2>&1
if [ ${RC} -eq 0 ]; then
- notify "\n[OK] MCP: Openstack installation finished succesfully!\n\n" 2
+ notify_n "[OK] MCP: Openstack installation finished succesfully!" 2
else
- notify "\n[ERROR] MCP: Openstack installation threw a fatal error!\n\n"
+ notify_n "[ERROR] MCP: Openstack installation threw a fatal error!"
fi
}
#
$(basename "$0") -l lab-name -p pod-name -s deploy-scenario \\
[-b Lab Config Base URI] \\
[-S storage-dir] [-L /path/to/log/file.tar.gz] \\
- [-f[f]] [-F] [-e | -E[E]] [-d] [-D]
+ [-f[f]] [-F] [-e | -E[E]] [-d] [-D] [-N]
$(notify "OPTIONS:" 2)
-b Base-uri for the stack-configuration structure
-s Deploy-scenario short-name
-S Storage dir for VM images
-L Deployment log path and file name
+ -N Experimental: Do not virtualize control plane (novcp)
-$(notify "Description:" 2)
+$(notify_i "Description:" 2)
Deploys the Fuel@OPNFV stack on the indicated lab resource.
This script provides the Fuel@OPNFV deployment abstraction.
It depends on the OPNFV official configuration directory/file structure
and provides a fairly simple mechanism to execute a deployment.
-$(notify "Input parameters to the build script are:" 2)
+$(notify_i "Input parameters to the build script are:" 2)
-b Base URI to the configuration directory (needs to be provided in URI style,
it can be a local resource: file:// or a remote resource http(s)://).
A POD Descriptor File (PDF) and its Installer Descriptor File (IDF)
companion should be available at:
<base-uri>/labs/<lab-name>/<pod-name>.yaml
<base-uri>/labs/<lab-name>/idf-<pod-name>.yaml
- An example config is provided inside current repo in
- <./mcp/config>.
The default is using the git submodule tracking 'OPNFV Pharos' in
<./mcp/scripts/pharos>.
+ An example config is provided inside current repo in
+ <./mcp/config>, automatically linked as <./mcp/scripts/pharos/labs/local>.
-d Dry-run - Produce deploy config files, but do not execute deploy
-D Debug logging - Enable extra logging in sh deploy scripts (set -x)
-e Do not launch environment deployment
-L Deployment log path and name, eg. -L /home/jenkins/job.log.tar.gz
-l Lab name as defined in the configuration directory, e.g. lf
-p POD name as defined in the configuration directory, e.g. pod2
+-N Experimental: Instead of virtualizing the control plane (VCP), deploy
+ control plane directly on baremetal nodes
-P Skip installing dependency distro packages on current host
This flag should only be used if you have kept back older packages that
would be upgraded and that is undesirable on the current system.
has to be defined in config directory (e.g. os-odl-nofeature-ha).
-S Storage dir for VM images, default is mcp/deploy/images
-$(notify "[NOTE] sudo & virsh priviledges are needed for this script to run" 3)
+$(notify_i "[NOTE] sudo & virsh priviledges are needed for this script to run" 3)
Example:
-$(notify "sudo $(basename "$0") \\
+$(notify_i "sudo $(basename "$0") \\
-b file:///home/jenkins/securedlab \\
-l lf -p pod2 \\
-s os-odl-nofeature-ha" 2)
# END of usage description
##############################################################################
-##############################################################################
-# BEGIN of colored notification wrapper
-#
-notify() {
- tput setaf "${2:-1}" || true
- echo -en "${1:-"[WARN] Unsupported opt arg: $3\\n"}"
- tput sgr0
-}
-#
-# END of colored notification wrapper
-##############################################################################
-
##############################################################################
# BEGIN of variables to customize
#
REPO_ROOT_PATH=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")
DEPLOY_DIR=$(cd "${REPO_ROOT_PATH}/mcp/scripts"; pwd)
STORAGE_DIR=$(cd "${REPO_ROOT_PATH}/mcp/deploy/images"; pwd)
-RECLASS_CLUSTER_DIR=$(cd "${REPO_ROOT_PATH}/mcp/reclass/classes/cluster"; pwd)
-DEPLOY_TYPE='baremetal'
-BR_NAMES=('admin' 'mgmt' 'private' 'public')
-OPNFV_BRIDGES=('pxebr' 'mgmt' 'internal' 'public')
URI_REGEXP='(file|https?|ftp)://.*'
BASE_CONFIG_URI="file://${REPO_ROOT_PATH}/mcp/scripts/pharos"
INFRA_CREATION_ONLY=${INFRA_CREATION_ONLY:-0}
NO_DEPLOY_ENVIRONMENT=${NO_DEPLOY_ENVIRONMENT:-0}
ERASE_ENV=${ERASE_ENV:-0}
+MCP_VCP=${MCP_VCP:-1}
source "${DEPLOY_DIR}/globals.sh"
source "${DEPLOY_DIR}/lib.sh"
+source "${DEPLOY_DIR}/lib_template.sh"
#
# END of variables to customize
# BEGIN of main
#
set +x
-while getopts "b:dDfEFl:L:p:Ps:S:he" OPTION
+while getopts "b:dDfEFl:L:Np:Ps:S:he" OPTION
do
case $OPTION in
b)
BASE_CONFIG_URI=${OPTARG}
if [[ ! $BASE_CONFIG_URI =~ ${URI_REGEXP} ]]; then
- notify "[ERROR] -b $BASE_CONFIG_URI - invalid URI\n"
+ notify "[ERROR] -b $BASE_CONFIG_URI - invalid URI"
usage
exit 1
fi
L)
DEPLOY_LOG="${OPTARG}"
;;
+ N)
+ MCP_VCP=0
+ ;;
p)
TARGET_POD=${OPTARG}
- if [[ "${TARGET_POD}" =~ "virtual" ]]; then
- DEPLOY_TYPE='virtual'
+ if [[ "${TARGET_POD}" =~ virtual ]]; then
+ # All vPODs will use 'local-virtual1' PDF/IDF for now
+ TARGET_LAB='local'
+ TARGET_POD='virtual1'
fi
;;
P)
exit 0
;;
*)
- notify "[ERROR] Arguments not according to new argument style\n"
- exit 1
+ notify_e "[ERROR] Unsupported arg, see -h for help"
;;
esac
done
if [[ "$(sudo whoami)" != 'root' ]]; then
- notify "[ERROR] This script requires sudo rights\n" 1>&2
- exit 1
+ notify_e "[ERROR] This script requires sudo rights"
fi
# Validate mandatory arguments are set
if [ -z "${TARGET_LAB}" ] || [ -z "${TARGET_POD}" ] || \
[ -z "${DEPLOY_SCENARIO}" ]; then
- notify "[ERROR] At least one of the mandatory args is missing!\n" 1>&2
usage
- exit 1
+ notify_e "[ERROR] At least one of the mandatory args is missing!"
fi
[[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
# Install required packages on jump server
if [ ${USE_EXISTING_PKGS} -eq 1 ]; then
- notify "[NOTE] Skipping distro pkg installation\n" 2 1>&2
+ notify "[NOTE] Skipping distro pkg installation" 2
else
- notify "[NOTE] Installing required distro pkgs\n" 2 1>&2
- if [ -n "$(command -v apt-get)" ]; then
- pkg_type='deb'; pkg_cmd='sudo apt-get install -y'
- else
- pkg_type='rpm'; pkg_cmd='sudo yum install -y --skip-broken'
- fi
- eval "$(parse_yaml "./requirements_${pkg_type}.yaml")"
- for section in 'common' "${DEPLOY_TYPE}" "$(uname -m)"; do
- section_var="requirements_pkg_${section}[*]"
- pkg_list+=" ${!section_var}"
- done
- # shellcheck disable=SC2086
- ${pkg_cmd} ${pkg_list}
+ notify "[NOTE] Installing required distro pkgs" 2
+ jumpserver_pkg_install
fi
if ! virsh list >/dev/null 2>&1; then
- notify "[ERROR] This script requires hypervisor access\n" 1>&2
- exit 1
+ notify_e "[ERROR] This script requires hypervisor access"
fi
# Collect jump server system information for deploy debugging
# Clone git submodules and apply our patches
make -C "${REPO_ROOT_PATH}/mcp/patches" deepclean patches-import
-# Convert Pharos-compatible POD Descriptor File (PDF) to reclass model input
-PHAROS_GEN_CONFIG_SCRIPT="./pharos/config/utils/generate_config.py"
-PHAROS_INSTALLER_ADAPTER="./pharos/config/installers/fuel/pod_config.yml.j2"
-BASE_CONFIG_PDF="${BASE_CONFIG_URI}/labs/${TARGET_LAB}/${TARGET_POD}.yaml"
-BASE_CONFIG_IDF="${BASE_CONFIG_URI}/labs/${TARGET_LAB}/idf-${TARGET_POD}.yaml"
-LOCAL_PDF="${STORAGE_DIR}/$(basename "${BASE_CONFIG_PDF}")"
-LOCAL_IDF="${STORAGE_DIR}/$(basename "${BASE_CONFIG_IDF}")"
-LOCAL_PDF_RECLASS="${STORAGE_DIR}/pod_config.yml"
-if ! curl --create-dirs -o "${LOCAL_PDF}" "${BASE_CONFIG_PDF}"; then
- if [ "${DEPLOY_TYPE}" = 'baremetal' ]; then
- notify "[ERROR] Could not retrieve PDF (Pod Descriptor File)!\n" 1>&2
- exit 1
- else
- notify "[WARN] Could not retrieve PDF (Pod Descriptor File)!\n" 3
- fi
-elif ! curl -o "${LOCAL_IDF}" "${BASE_CONFIG_IDF}"; then
- notify "[WARN] POD has no IDF (Installer Descriptor File)!\n" 3
-elif ! "${PHAROS_GEN_CONFIG_SCRIPT}" -y "${LOCAL_PDF}" \
- -j "${PHAROS_INSTALLER_ADAPTER}" > "${LOCAL_PDF_RECLASS}"; then
- notify "[ERROR] Could not convert PDF to reclass model input!\n" 1>&2
- exit 1
-fi
-
# Check scenario file existence
-SCENARIO_DIR="../config/scenario"
-if [ ! -f "${SCENARIO_DIR}/${DEPLOY_TYPE}/${DEPLOY_SCENARIO}.yaml" ]; then
- notify "[ERROR] Scenario definition file is missing!\n" 1>&2
- exit 1
+SCENARIO_DIR="$(readlink -f "../config/scenario")"
+if [ ! -f "${SCENARIO_DIR}/${DEPLOY_SCENARIO}.yaml" ] && \
+ [ ! -f "${SCENARIO_DIR}/${DEPLOY_SCENARIO}.yaml.j2" ]; then
+ notify_e "[ERROR] Scenario definition file is missing!"
fi
-# Check defaults file existence
-if [ ! -f "${SCENARIO_DIR}/defaults-$(uname -i).yaml" ]; then
- notify "[ERROR] Scenario defaults file is missing!\n" 1>&2
- exit 1
-fi
+# key might not exist yet ...
+generate_ssh_key
+export MAAS_SSH_KEY="$(cat "$(basename "${SSH_KEY}").pub")"
-# Get required infra deployment data
-set +x
-eval "$(parse_yaml "${SCENARIO_DIR}/defaults-$(uname -i).yaml")"
-eval "$(parse_yaml "${SCENARIO_DIR}/${DEPLOY_TYPE}/${DEPLOY_SCENARIO}.yaml")"
-eval "$(parse_yaml "${LOCAL_PDF_RECLASS}")"
-[[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
-
-export CLUSTER_DOMAIN=${cluster_domain}
-
-# Serialize vnode data as '<name0>,<ram0>,<vcpu0>|<name1>,<ram1>,<vcpu1>[...]'
-for node in "${virtual_nodes[@]}"; do
- virtual_custom_ram="virtual_${node}_ram"
- virtual_custom_vcpus="virtual_${node}_vcpus"
- virtual_nodes_data+="${node},"
- virtual_nodes_data+="${!virtual_custom_ram:-$virtual_default_ram},"
- virtual_nodes_data+="${!virtual_custom_vcpus:-$virtual_default_vcpus}|"
-done
-virtual_nodes_data=${virtual_nodes_data%|}
-
-# Serialize repos, packages to (pre-)install/remove for:
-# - foundation node VM base image (virtual: all VMs, baremetal: cfg01|mas01)
-# - virtualized control plane VM base image (only when VCP is used)
-base_image_flavors=common
-if [[ "${cluster_states[*]}" =~ virtual_control ]]; then
- base_image_flavors+=" control"
-fi
-for sc in ${base_image_flavors}; do
- for va in apt_keys apt_repos pkg_install pkg_remove; do
- key=virtual_${sc}_${va}
- eval "${key}=\${${key}[@]// /|}"
- eval "${key}=\${${key}// /,}"
- virtual_repos_pkgs+="${!key}^"
- done
-done
-virtual_repos_pkgs=${virtual_repos_pkgs%^}
-
-# Expand reclass and virsh network templates
-for tp in "${RECLASS_CLUSTER_DIR}/all-mcp-arch-common/opnfv/"*.template \
- net_*.template; do
- eval "cat <<-EOF
- $(<"${tp}")
- EOF" 2> /dev/null > "${tp%.template}"
-done
+# Expand jinja2 templates based on PDF data and env vars
+export MCP_VCP MCP_JUMP_ARCH=$(uname -i)
+do_templates_scenario "${STORAGE_DIR}" "${TARGET_LAB}" "${TARGET_POD}" \
+ "${BASE_CONFIG_URI}" "${SCENARIO_DIR}"
+do_templates_cluster "${STORAGE_DIR}" "${TARGET_LAB}" "${TARGET_POD}" \
+ "${REPO_ROOT_PATH}" \
+ "${SCENARIO_DIR}/defaults.yaml" \
+ "${SCENARIO_DIR}/${DEPLOY_SCENARIO}.yaml"
-# Convert Pharos-compatible PDF to reclass network definitions
-if [ "${DEPLOY_TYPE}" = 'baremetal' ]; then
- find "${RECLASS_CLUSTER_DIR}" -name '*.j2' | while read -r tp
- do
- if ! "${PHAROS_GEN_CONFIG_SCRIPT}" -y "${LOCAL_PDF}" \
- -j "${tp}" > "${tp%.j2}"; then
- notify "[ERROR] Could not convert PDF to reclass network defs!\n"
- exit 1
- fi
- done
-fi
+# Determine additional data (e.g. jump bridge names) based on XDF
+source "${DEPLOY_DIR}/xdf_data.sh"
-# Determine 'admin', 'mgmt', 'private' and 'public' bridge names based on IDF
-for ((i = 0; i < ${#BR_NAMES[@]}; i++)); do
- br_jump=$(eval echo "\$parameters__param_opnfv_jump_bridge_${BR_NAMES[i]}")
- if [ -n "${br_jump}" ] && [ "${br_jump}" != 'None' ]; then
- OPNFV_BRIDGES[${i}]="${br_jump}"
- fi
-done
-notify "[NOTE] Using bridges: ${OPNFV_BRIDGES[*]}\n" 2
+# Jumpserver prerequisites check
+notify "[NOTE] Using bridges: ${OPNFV_BRIDGES[*]}" 2
+jumpserver_check_requirements "${virtual_nodes[*]}" "${OPNFV_BRIDGES[@]}"
# Infra setup
if [ ${DRY_RUN} -eq 1 ]; then
- notify "[NOTE] Dry run, skipping all deployment tasks\n" 2 1>&2
+ notify "[NOTE] Dry run, skipping all deployment tasks" 2
exit 0
elif [ ${USE_EXISTING_INFRA} -gt 0 ]; then
- notify "[NOTE] Use existing infra\n" 2 1>&2
+ notify "[NOTE] Use existing infra" 2
check_connection
else
- generate_ssh_key
prepare_vms "${base_image}" "${STORAGE_DIR}" "${virtual_repos_pkgs}" \
"${virtual_nodes[@]}"
create_networks "${OPNFV_BRIDGES[@]}"
check_connection
fi
if [ ${USE_EXISTING_INFRA} -lt 2 ]; then
- wait_for 5 "./salt.sh ${LOCAL_PDF_RECLASS}"
+ wait_for 5 "./salt.sh ${STORAGE_DIR}/pod_config.yml ${virtual_nodes[*]}"
fi
# Openstack cluster setup
set +x
if [ ${INFRA_CREATION_ONLY} -eq 1 ] || [ ${NO_DEPLOY_ENVIRONMENT} -eq 1 ]; then
- notify "[NOTE] Skip openstack cluster setup\n" 2
+ notify "[NOTE] Skip openstack cluster setup" 2
else
for state in "${cluster_states[@]}"; do
- notify "[STATE] Applying state: ${state}\n" 2
+ notify "[STATE] Applying state: ${state}" 2
# shellcheck disable=SC2086,2029
wait_for 5 "ssh ${SSH_OPTS} ${SSH_SALT} sudo \
CI_DEBUG=$CI_DEBUG ERASE_ENV=$ERASE_ENV \
Abstract
========
-This document describes how to install the Euphrates release of
+This document describes how to install the Fraser release of
OPNFV when using Fuel as a deployment tool, covering its usage,
limitations, dependencies and required system resources.
This is an unified documentation for both x86_64 and aarch64
============
This document provides guidelines on how to install and
-configure the Euphrates release of OPNFV when using Fuel as a
+configure the Fraser release of OPNFV when using Fuel as a
deployment tool, including required software and hardware configurations.
Although the available installation options provide a high degree of
freedom in how the system is set up, including architecture, services
and features, etc., said permutations may not provide an OPNFV
compliant reference architecture. This document provides a
-step-by-step guide that results in an OPNFV Euphrates compliant
+step-by-step guide that results in an OPNFV Fraser compliant
deployment.
The audience of this document is assumed to have good knowledge of
Preface
=======
-Before starting the installation of the Euphrates release of
+Before starting the installation of the Fraser release of
OPNFV, using Fuel as a deployment tool, some planning must be
done.
=========================================
The following minimum hardware requirements must be met for the virtual
-installation of Euphrates using Fuel:
+installation of Fraser using Fuel:
+----------------------------+--------------------------------------------------------+
| **HW Aspect** | **Requirement** |
+----------------------------+--------------------------------------------------------+
| **RAM** | Minimum 32GB/server (Depending on VNF work load) |
+----------------------------+--------------------------------------------------------+
-| **Disk** | Minimum 100GB (SSD or SCSI (15krpm) highly recommended |
+| **Disk** | Minimum 100GB (SSD or SCSI (15krpm) highly recommended)|
+----------------------------+--------------------------------------------------------+
===========================================
The following minimum hardware requirements must be met for the baremetal
-installation of Euphrates using Fuel:
+installation of Fraser using Fuel:
+-------------------------+------------------------------------------------------+
| **HW Aspect** | **Requirement** |
infrastructure as well as the provider networks and the private tenant
VLANs needs to be manually configured.
-Manual configuration of the Euphrates hardware platform should
+Manual configuration of the Fraser hardware platform should
be carried out according to the `OPNFV Pharos Specification
<https://wiki.opnfv.org/display/pharos/Pharos+Specification>`_.
according to the Pharos specification. Relevant network bridges should
also be pre-configured (e.g. admin_br, mgmt_br, public_br).
- - The admin bridge (admin_br) is mandatory for the baremetal nodes PXE booting during fuel installation.
- - The management bridge (mgmt_br) is required for testing suites (e.g. functest/yardstick), it is
- suggested to pre-configure it for debugging purposes.
- - The public bridge (public_br) is also nice to have for debugging purposes, but not mandatory.
+- The admin bridge (admin_br) is mandatory for the baremetal nodes PXE booting during Fuel installation.
+- The management bridge (mgmt_br) is required for testing suites (e.g. functest/yardstick), it is
+ suggested to pre-configure it for debugging purposes.
+- The public bridge (public_br) is also nice to have for debugging purposes, but not mandatory.
The user running the deploy script on the Jumpserver should belong to "sudo" and "libvirt" groups,
and have passwordless sudo access.
...
%jenkins ALL=(ALL) NOPASSWD:ALL
+The folder containing the temporary deploy artifacts (/home/jenkins/tmpdir in the examples below)
+needs to have mask 777 in order for libvirt to be able to use them.
+
+.. code-block:: bash
+
+ $ mkdir -p -m 777 /home/jenkins/tmpdir
+
For an AArch64 Jumpserver, the "libvirt" minimum required version is 3.x, 3.5 or newer highly recommended.
While not mandatory, upgrading the kernel and QEMU on the Jumpserver is also highly recommended
(especially on AArch64 Jumpservers).
Fuel@OPNFV has been validated by CI using the following distributions
installed on the Jumpserver:
- - CentOS 7 (recommended by Pharos specification);
- - Ubuntu Xenial;
+- CentOS 7 (recommended by Pharos specification);
+- Ubuntu Xenial;
-**NOTE**: The install script expects 'libvirt' to be already running on the Jumpserver.In case libvirt
+**NOTE**: The install script expects 'libvirt' to be already running on the Jumpserver. In case libvirt
packages are missing, the script will install them; but depending on the OS distribution, the user
might have to start the 'libvirtd' service manually, then run the deploy script again. Therefore, it
-is recommened to install libvirt-bin explicitly on the Jumpserver before the deployment.
+is recommended to install libvirt-bin explicitly on the Jumpserver before the deployment.
-**NOTE**: It is also recommened to install the newer kernel on the Jumpserver before the deployment.
+**NOTE**: It is also recommended to install the newer kernel on the Jumpserver before the deployment.
**NOTE**: The install script will automatically install the rest of required distro package
dependencies on the Jumpserver, unless explicitly asked not to (via -P deploy arg). This includes
automatic based on deployment scenario.
The reclass model covers:
- - Infrastucture node definition: Salt Master node (cfg01) and MaaS node (mas01)
+ - Infrastructure node definition: Salt Master node (cfg01) and MaaS node (mas01)
- OpenStack node definition: Controller nodes (ctl01, ctl02, ctl03) and Compute nodes (cmp001, cmp002)
- Infrastructure components to install (software packages, services etc.)
- OpenStack components and services (rabbitmq, galera etc.), as well as all configuration for them
- Jumphost 2 has a mix of Linux and virsh bridges; When Linux bridge exists for a specified network,
the deploy script will skip creating a virsh bridge for it
-**Note**: A virtual network "mcpcontrol" is always created. For virtual deploys, "mcpcontrol" is also
- used for Admin, leaving the PXE/Admin bridge unused.
+**Note**: A virtual network "mcpcontrol" is always created for initial connection
+of the VMs on Jumphost.
Automatic Installation of a Baremetal POD
=========================================
The baremetal installation process can be done by editing the information about
-hardware and environment in the reclass files, or by using a Pod Descriptor File (PDF).
-This file contains all the information about the hardware and network of the deployment
-the will be fed to the reclass model during deployment.
+hardware and environment in the reclass files, or by using the files Pod Descriptor
+File (PDF) and Installer Descriptor File (IDF) as described in the OPNFV Pharos project.
+These files contain all the information about the hardware and network of the deployment
+that will be fed to the reclass model during deployment.
The installation is done automatically with the deploy script, which will:
required to pre-configure at least the admin_br bridge for the PXE/Admin.
For the targets, the bridges are created by the deploy script.
-**Note**: A virtual network "mcpcontrol" is always created. For baremetal deploys, PXE bridge is used
-for baremetal node provisioning, while "mcpcontrol" is used to provision the infrastructure VMs only.
+**Note**: A virtual network "mcpcontrol" is always created for initial connection
+of the VMs on Jumphost.
Steps to Start the Automatic Deploy
$ git clone https://git.opnfv.org/armband
$ cd armband
-#. Checkout the Euphrates release
+#. Checkout the Fraser release
.. code-block:: bash
- $ git checkout opnfv-5.0.2
+ $ git checkout opnfv-6.0.0
#. Start the deploy script
.. code-block:: bash
- $ ci/deploy.sh -b file:///home/jenkins/tmpdir/securedlab \
- -l ericsson \
- -p virtual_kvm \
- -s os-nosdn-nofeature-noha \
- -D \
- -S /home/jenkins/tmpdir |& tee deploy.log
+ $ ci/deploy.sh -l ericsson \
+ -p virtual3 \
+ -s os-nosdn-nofeature-noha \
+ -D \
+ -S /home/jenkins/tmpdir |& tee deploy.log
- Once the deployment is complete, the OpenStack Dashboard, Horizon is
- available at http://<controller VIP>:8078, e.g. http://10.16.0.101:8078.
+ Once the deployment is complete, the OpenStack Dashboard, Horizon, is
+ available at http://<controller VIP>:8078
The administrator credentials are **admin** / **opnfv_secret**.
#. Baremetal deploy
.. code-block:: bash
- $ ci/deploy.sh -b file:///home/jenkins/tmpdir/securedlab \
- -l lf \
+ $ ci/deploy.sh -l lf \
-p pod2 \
-s os-nosdn-nofeature-ha \
-D \
Fuel@OPNFV LF POD2 Network Layout
- Once the deployment is complete, the SaltStack Deployment Documentation is
- available at http://<Proxy VIP>:8090, e.g. http://172.30.10.103:8090.
-
An aarch64 deploy on pod5 from Arm lab
.. code-block:: bash
- $ ci/deploy.sh -b file:///home/jenkins/tmpdir/securedlab \
- -l arm \
+ $ ci/deploy.sh -l arm \
-p pod5 \
-s os-nosdn-nofeature-ha \
-D \
Fuel@OPNFV ARM POD5 Network Layout
-Pod Descriptor Files
-====================
+ Once the deployment is complete, the SaltStack Deployment Documentation is
+ available at http://<proxy public VIP>:8090
+
+**NOTE**: The deployment uses the OPNFV Pharos project as input (PDF and IDF files)
+for hardware and network configuration of all current OPNFV PODs.
+When deploying a new POD, one can pass the `-b` flag to the deploy script to override
+the path for the labconfig directory structure containing the PDF and IDF.
+
+ .. code-block:: bash
+
+ $ ci/deploy.sh -b file://<absolute_path_to_labconfig> \
+ -l <lab_name> \
+ -p <pod_name> \
+ -s <scenario> \
+ -D \
+ -S <tmp_folder> |& tee deploy.log
+
+ - <absolute_path_to_labconfig> is the absolute path to a local directory, populated
+ similar to Pharos, i.e. PDF/IDF reside in <absolute_path_to_labconfig>/labs/<lab_name>
+ - <lab_name> is the same as the directory in the path above
+ - <pod_name> is the name used for the PDF (<pod_name>.yaml) and IDF (idf-<pod_name>.yaml) files
+
+
+
+Pod and Installer Descriptor Files
+==================================
Descriptor files provide the installer with an abstraction of the target pod
with all its hardware characteristics and required parameters. This information
is split into two different files:
Pod Descriptor File (PDF) and Installer Descriptor File (IDF).
-
-The Pod Descriptor File is a hardware and network description of the pod
+The Pod Descriptor File is a hardware description of the pod
infrastructure. The information is modeled under a yaml structure.
A reference file with the expected yaml structure is available at
*mcp/config/labs/local/pod1.yaml*
-A common network section describes all the internal and provider networks
-assigned to the pod. Each network is expected to have a vlan tag, IP subnet and
-attached interface on the boards. Untagged vlans shall be defined as "native".
-
The hardware description is arranged into a main "jumphost" node and a "nodes"
set for all target boards. For each node the following characteristics
are defined:
- Node parameters including CPU features and total memory.
- A list of available disks.
- Remote management parameters.
-- Network interfaces list including mac address, speed and advanced features.
-- IP list of fixed IPs for the node
-
-**Note**: the fixed IPs are ignored by the MCP installer script and it will instead
-assign based on the network ranges defined under the pod network configuration.
+- Network interfaces list including mac address, speed, advanced features and name.
+**Note**: The fixed IPs are ignored by the MCP installer script and it will instead
+assign based on the network ranges defined in IDF.
The Installer Descriptor File extends the PDF with pod related parameters
required by the installer. This information may differ per each installer type
-and it is not considered part of the pod infrastructure. Fuel installer relies
-on the IDF model to map the networks to the bridges on the foundation node and
-to setup all node NICs by defining the expected OS device name and bus address.
+and it is not considered part of the pod infrastructure.
+The IDF file must be named after the PDF with the prefix "idf-". A reference file with the expected
+structure is available at *mcp/config/labs/local/idf-pod1.yaml*
+The file follows a yaml structure and two sections "net_config" and "fuel" are expected.
-The file follows a yaml structure and a "fuel" section is expected. Contents and
-references must be aligned with the PDF file. The IDF file must be named after
-the PDF with the prefix "idf-". A reference file with the expected structure
-is available at *mcp/config/labs/local/idf-pod1.yaml*
+The "net_config" section describes all the internal and provider networks
+assigned to the pod. Each used network is expected to have a vlan tag, IP subnet and
+attached interface on the boards. Untagged vlans shall be defined as "native".
+The "fuel" section defines several sub-sections required by the Fuel installer:
+
+- jumphost: List of bridge names for each network on the Jumpserver.
+- network: List of device name and bus address info of all the target nodes.
+ The order must be aligned with the order defined in PDF file. Fuel installer relies on the IDF model
+ to setup all node NICs by defining the expected device name and bus address.
+- maas: Defines the target nodes commission timeout and deploy timeout. (optional)
+- reclass: Defines compute parameter tuning, including huge pages, cpu pinning
+ and other DPDK settings. (optional)
+
+The following parameters can be defined in the IDF files under "reclass". Those value will
+overwrite the default configuration values in Fuel repository:
+
+- nova_cpu_pinning: List of CPU cores nova will be pinned to. Currently disabled.
+- compute_hugepages_size: Size of each persistent huge pages. Usual values are '2M' and '1G'.
+- compute_hugepages_count: Total number of persistent huge pages.
+- compute_hugepages_mount: Mount point to use for huge pages.
+- compute_kernel_isolcpu: List of certain CPU cores that are isolated from Linux scheduler.
+- compute_dpdk_driver: Kernel module to provide userspace I/O support.
+- compute_ovs_pmd_cpu_mask: Hexadecimal mask of CPUs to run DPDK Poll-mode drivers.
+- compute_ovs_dpdk_socket_mem: Set of amount huge pages in MB to be used by OVS-DPDK daemon
+ taken for each NUMA node. Set size is equal to NUMA nodes count, elements are divided by comma.
+- compute_ovs_dpdk_lcore_mask: Hexadecimal mask of DPDK lcore parameter used to run DPDK processes.
+- compute_ovs_memory_channels: Number of memory channels to be used.
+- dpdk0_driver: NIC driver to use for physical network interface.
+- dpdk0_n_rxq: Number of RX queues.
+
+
+The full description of the PDF and IDF file structure are available as yaml schemas.
+The schemas are defined as a git submodule in Fuel repository. Input files provided
+to the installer will be validated against the schemas.
+
+- *mcp/scripts/pharos/config/pdf/pod1.schema.yaml*
+- *mcp/scripts/pharos/config/pdf/idf-pod1.schema.yaml*
=============
Release Notes
OpenStack
-4) `OpenStack Ocata Release Artifacts <http://www.openstack.org/software/ocata>`_
+4) `OpenStack Pike Release Artifacts <http://www.openstack.org/software/pike>`_
5) `OpenStack Documentation <http://docs.openstack.org>`_
OpenDaylight
Abstract
========
-This document compiles the release notes for the Euphrates release of
+This document compiles the release notes for the Fraser release of
OPNFV when using Fuel as a deployment tool. This is an unified documentation
for both x86_64 and aarch64 architectures. All information is common for
both architectures except when explicitly stated.
===============
These notes provides release information for the use of Fuel as deployment
-tool for the Euphrates release of OPNFV.
+tool for the Fraser release of OPNFV.
-The goal of the Euphrates release and this Fuel-based deployment process is
+The goal of the Fraser release and this Fuel-based deployment process is
to establish a lab ready platform accelerating further development
of the OPNFV infrastructure.
Summary
=======
-For Euphrates, the typical use of Fuel as an OpenStack installer is
+For Fraser, the typical use of Fuel as an OpenStack installer is
supplemented with OPNFV unique components such as:
- `OpenDaylight <http://www.opendaylight.org/software>`_
As well as OPNFV-unique configurations of the Hardware and Software stack.
-This Euphrates artifact provides Fuel as the deployment stage tool in the
+This Fraser artifact provides Fuel as the deployment stage tool in the
OPNFV CI pipeline including:
- Documentation built by Jenkins
- installation instructions
-- Automated deployment of Euphrates with running on bare metal or a nested
+- Automated deployment of Fraser with running on baremetal or a nested
hypervisor environment (KVM)
-- Automated validation of the Euphrates deployment
+- Automated validation of the Fraser deployment
============
Release Data
| **Project** | fuel/armband |
| | |
+--------------------------------------+--------------------------------------+
-| **Repo/tag** | opnfv-5.1.0 |
+| **Repo/tag** | opnfv-6.0.0 |
| | |
+--------------------------------------+--------------------------------------+
-| **Release designation** | Euphrates 5.1 |
+| **Release designation** | Fraser 6.0 |
| | |
+--------------------------------------+--------------------------------------+
-| **Release date** | December 15 2017 |
+| **Release date** | April 27 2018 |
| | |
+--------------------------------------+--------------------------------------+
-| **Purpose of the delivery** | Euphrates alignment to Released |
-| | MCP 1.0 baseline + features and |
+| **Purpose of the delivery** | Fraser alignment to Released |
+| | MCP baseline + features and |
| | bug-fixes for the following |
| | feaures: |
| | |
| | - Open vSwitch for NFV |
| | - OpenDaylight |
+| | - DPDK |
+--------------------------------------+--------------------------------------+
Version Change
Module Version Changes
----------------------
-This is the Euphrates 5.1 release.
+This is the Fraser 6.0 release.
It is based on following upstream versions:
-- MCP 1.0 Base Release
+- MCP Base Release
-- OpenStack Ocata Release
+- OpenStack Pike Release
-- OpenDaylight
+- OpenDaylight Oxygen Release
Document Changes
----------------
-This is the Euphrates 5.1 release.
+This is the Fraser 6.0 release.
It comes with the following documentation:
-- `Installation instructions <http://docs.opnfv.org/en/stable-euphrates/submodules/armband/docs/release/installation/installation.instruction.html>`_
+- :ref:`fuel-release-installation-label`
- Release notes (This document)
-- `User guide <http://docs.opnfv.org/en/stable-euphrates/submodules/fuel/docs/release/userguide/userguide.html>`_
+- :ref:`fuel-release-userguide-label`
Reason for Version
==================
-----------------
**JIRA TICKETS:**
-`Euphrates 5.1 new features <https://jira.opnfv.org/issues/?filter=12114>`_
+`Fraser 6.0 new features <https://jira.opnfv.org/issues/?filter=12302>`_
Bug Corrections
---------------
**JIRA TICKETS:**
-`Euphrates 5.1 bug fixes <https://jira.opnfv.org/issues/?filter=12115>`_
+`Fraser 6.0 bug fixes <https://jira.opnfv.org/issues/?filter=12303>`_
(Also See respective Integrated feature project's bug tracking)
Documentation Deliverables
--------------------------
-- `Installation instructions <http://docs.opnfv.org/en/stable-euphrates/submodules/armband/docs/release/installation/installation.instruction.html>`_
+- :ref:`fuel-release-installation-label`
- Release notes (This document)
-- `User guide <http://docs.opnfv.org/en/stable-euphrates/submodules/fuel/docs/release/userguide/userguide.html>`_
-
+- :ref:`fuel-release-userguide-label`
=========================================
Known Limitations, Issues and Workarounds
**JIRA TICKETS:**
-`Known issues <https://jira.opnfv.org/issues/?filter=12116>`_
+`Known issues <https://jira.opnfv.org/issues/?filter=12304>`_
(Also See respective Integrated feature project's bug tracking)
============
Test Results
============
-The Euphrates 5.1 release with the Fuel deployment tool has undergone QA test
+The Fraser 6.0 release with the Fuel deployment tool has undergone QA test
runs, see separate test results.
==========
References
==========
-For more information on the OPNFV Euphrates 5.1 release, please see:
+For more information on the OPNFV Fraser 6.0 release, please see:
OPNFV
=====
OpenStack
=========
-4) `OpenStack Ocata Release Artifacts <http://www.openstack.org/software/ocata>`_
+4) `OpenStack Pike Release Artifacts <http://www.openstack.org/software/pike>`_
5) `OpenStack Documentation <http://docs.openstack.org>`_
.. http://creativecommons.org/licenses/by/4.0
.. (c)2017 Mirantis Inc., Enea Software AB and others
-This document provides scenario level details for Euphrates 5.0 of
+This document provides scenario level details for Fraser 6.0 of
deployment with no SDN controller and no extra features enabled.
============
Introduction
============
-This scenario is used primarily to validate and deploy a Ocata OpenStack
+This scenario is used primarily to validate and deploy a Pike OpenStack
deployment without any NFV features or SDN controller enabled.
Scenario components and composition
References
==========
-For more information on the OPNFV Euphrates release, please visit
-http://www.opnfv.org/euphrates
+For more information on the OPNFV Fraser release, please visit
+http://www.opnfv.org/software
.. http://creativecommons.org/licenses/by/4.0
.. (c) 2017 Mirantis Inc., Enea Software AB and others
-This document provides scenario level details for Euphrates 5.0 of
+This document provides scenario level details for Fraser 6.0 of
deployment with no SDN controller and no extra features enabled.
============
Introduction
============
-This scenario is used primarily to validate and deploy a Ocata OpenStack
+This scenario is used primarily to validate and deploy a Pike OpenStack
deployment without any NFV features or SDN controller enabled.
Scenario usage overview
=======================
-Simply deploy this scenario by using the os-nosdn-ovs-ha.yaml deploy
+Simply deploy this scenario by using the os-nosdn-ovs-noha.yaml deploy
settings file.
References
==========
-For more information on the OPNFV Euphrates release, please visit
-http://www.opnfv.org/euphrates
-
+For more information on the OPNFV Fraser release, please visit
+http://www.opnfv.org/software
Abstract
========
-This document contains details about how to use OPNFV Fuel - Euphrates
+This document contains details about how to use OPNFV Fuel - Fraser
release - after it was deployed. For details on how to deploy check the
-installation instructions in the :ref:`references` section.
+installation instructions in the :ref:`fuel_userguide_references` section.
This is an unified documentation for both x86_64 and aarch64
architectures. All information is common for both architectures
Fuel uses several networks to deploy and administer the cloud:
-+------------------+-------------------+---------------------------------------------------------+
-| Network name | Deploy Type | Description |
-| | | |
-+==================+===================+=========================================================+
-| **PXE/ADMIN** | baremetal only | Used for booting the nodes via PXE |
-+------------------+-------------------+---------------------------------------------------------+
-| **MCPCONTROL** | baremetal & | Used to provision the infrastructure VMs (Salt & MaaS). |
-| | virtual | On virtual deploys, it is used for Admin too (on target |
-| | | VMs) leaving the PXE/Admin bridge unused |
-+------------------+-------------------+---------------------------------------------------------+
-| **Mgmt** | baremetal & | Used for internal communication between |
-| | virtual | OpenStack components |
-+------------------+-------------------+---------------------------------------------------------+
-| **Internal** | baremetal & | Used for VM data communication within the |
-| | virtual | cloud deployment |
-+------------------+-------------------+---------------------------------------------------------+
-| **Public** | baremetal & | Used to provide Virtual IPs for public endpoints |
-| | virtual | that are used to connect to OpenStack services APIs. |
-| | | Used by Virtual machines to access the Internet |
-+------------------+-------------------+---------------------------------------------------------+
++------------------+---------------------------------------------------------+
+| Network name | Description |
+| | |
++==================+=========================================================+
+| **PXE/ADMIN** | Used for booting the nodes via PXE and/or Salt |
+| | control network |
++------------------+---------------------------------------------------------+
+| **MCPCONTROL** | Used to provision the infrastructure VMs (Salt & MaaS) |
++------------------+---------------------------------------------------------+
+| **Mgmt** | Used for internal communication between |
+| | OpenStack components |
++------------------+---------------------------------------------------------+
+| **Internal** | Used for VM data communication within the |
+| | cloud deployment |
++------------------+---------------------------------------------------------+
+| **Public** | Used to provide Virtual IPs for public endpoints |
+| | that are used to connect to OpenStack services APIs. |
+| | Used by Virtual machines to access the Internet |
++------------------+---------------------------------------------------------+
These networks - except mcpcontrol - can be linux bridges configured before the deploy on the
Access to any component of the deployed cloud is done from Jumpserver to user *ubuntu* with
ssh key */var/lib/opnfv/mcp.rsa*. The example below is a connection to Salt master.
- .. code-block:: bash
+ .. code-block:: bash
- $ ssh -o StrictHostKeyChecking=no -i /var/lib/opnfv/mcp.rsa -l ubuntu 10.20.0.2
+ $ ssh -o StrictHostKeyChecking=no -i /var/lib/opnfv/mcp.rsa -l ubuntu 10.20.0.2
**Note**: The Salt master IP is not hard set, it is configurable via INSTALLER_IP during deployment
+Logging in to cluster nodes is possible from the Jumpserver and from Salt master. On the Salt master
+cluster hostnames can be used instead of IP addresses:
-The Fuel baremetal deploy has a Virtualized Control Plane (VCP) which means that the controller
-services are installed in VMs on the baremetal targets (kvm servers). These VMs can also be
-accessed with virsh console: user *opnfv*, password *opnfv_secret*. This method does not apply
-to infrastructure VMs (Salt master and MaaS).
+ .. code-block:: bash
-The example below is a connection to a controller VM. The connection is made from the baremetal
-server kvm01.
+ $ sudo -i
+ $ ssh -i mcp.rsa ubuntu@ctl01
- .. code-block:: bash
-
- $ ssh -o StrictHostKeyChecking=no -i /var/lib/opnfv/mcp.rsa -l ubuntu x.y.z.141
- ubuntu@kvm01:~$ virsh console ctl01
-
-User *ubuntu* has sudo rights. User *opnfv* has sudo rights only on aarch64 deploys.
+User *ubuntu* has sudo rights.
=============================
.. figure:: img/saltstack.png
Complex filters can be done to the target like compound queries or node roles.
-For more information about Salt see the :ref:`references` section.
+For more information about Salt see the :ref:`fuel_userguide_references` section.
Some examples are listed below. Note that these commands are issued from Salt master
-with *root* user.
+as *root* user.
#. View the IPs of all the components
- .. code-block:: bash
+ .. code-block:: bash
- root@cfg01:~$ salt "*" network.ip_addrs
- cfg01.baremetal-mcp-ocata-odl-ha.local:
+ root@cfg01:~$ salt "*" network.ip_addrs
+ cfg01.mcp-pike-odl-ha.local:
- 10.20.0.2
- 172.16.10.100
- mas01.baremetal-mcp-ocata-odl-ha.local:
+ mas01.mcp-pike-odl-ha.local:
- 10.20.0.3
- 172.16.10.3
- 192.168.11.3
- .........................
+ .........................
#. View the interfaces of all the components and put the output in a file with yaml format
- .. code-block:: bash
+ .. code-block:: bash
- root@cfg01:~$ salt "*" network.interfaces --out yaml --output-file interfaces.yaml
- root@cfg01:~# cat interfaces.yaml
- cfg01.baremetal-mcp-ocata-odl-ha.local:
+ root@cfg01:~$ salt "*" network.interfaces --out yaml --output-file interfaces.yaml
+ root@cfg01:~# cat interfaces.yaml
+ cfg01.mcp-pike-odl-ha.local:
enp1s0:
hwaddr: 52:54:00:72:77:12
inet:
prefixlen: '64'
scope: link
up: true
- .........................
+ .........................
#. View installed packages in MaaS node
- .. code-block:: bash
+ .. code-block:: bash
- root@cfg01:~# salt "mas*" pkg.list_pkgs
- mas01.baremetal-mcp-ocata-odl-ha.local:
- ----------
- accountsservice:
- 0.6.40-2ubuntu11.3
- acl:
- 2.2.52-3
- acpid:
- 1:2.0.26-1ubuntu2
- adduser:
- 3.113+nmu3ubuntu4
- anerd:
- 1
- .........................
+ root@cfg01:~# salt "mas*" pkg.list_pkgs
+ mas01.mcp-pike-odl-ha.local:
+ ----------
+ accountsservice:
+ 0.6.40-2ubuntu11.3
+ acl:
+ 2.2.52-3
+ acpid:
+ 1:2.0.26-1ubuntu2
+ adduser:
+ 3.113+nmu3ubuntu4
+ anerd:
+ 1
+ .........................
#. Execute any linux command on all nodes (list the content of */var/log* in this example)
- .. code-block:: bash
+ .. code-block:: bash
- root@cfg01:~# salt "*" cmd.run 'ls /var/log'
- cfg01.baremetal-mcp-ocata-odl-ha.local:
- alternatives.log
- apt
- auth.log
- boot.log
- btmp
- cloud-init-output.log
- cloud-init.log
- .........................
+ root@cfg01:~# salt "*" cmd.run 'ls /var/log'
+ cfg01.mcp-pike-odl-ha.local:
+ alternatives.log
+ apt
+ auth.log
+ boot.log
+ btmp
+ cloud-init-output.log
+ cloud-init.log
+ .........................
#. Execute any linux command on nodes using compound queries filter
- .. code-block:: bash
+ .. code-block:: bash
- root@cfg01:~# salt -C '* and cfg01*' cmd.run 'ls /var/log'
- cfg01.baremetal-mcp-ocata-odl-ha.local:
- alternatives.log
- apt
- auth.log
- boot.log
- btmp
- cloud-init-output.log
- cloud-init.log
- .........................
+ root@cfg01:~# salt -C '* and cfg01*' cmd.run 'ls /var/log'
+ cfg01.mcp-pike-odl-ha.local:
+ alternatives.log
+ apt
+ auth.log
+ boot.log
+ btmp
+ cloud-init-output.log
+ cloud-init.log
+ .........................
#. Execute any linux command on nodes using role filter
- .. code-block:: bash
+ .. code-block:: bash
- root@cfg01:~# salt -I 'nova:compute' cmd.run 'ls /var/log'
- cmp001.baremetal-mcp-ocata-odl-ha.local:
- alternatives.log
- apache2
- apt
- auth.log
- btmp
- ceilometer
- cinder
- cloud-init-output.log
- cloud-init.log
- .........................
+ root@cfg01:~# salt -I 'nova:compute' cmd.run 'ls /var/log'
+ cmp001.mcp-pike-odl-ha.local:
+ alternatives.log
+ apache2
+ apt
+ auth.log
+ btmp
+ ceilometer
+ cinder
+ cloud-init-output.log
+ cloud-init.log
+ .........................
Once the deployment is complete, Openstack CLI is accessible from controller VMs (ctl01..03).
Openstack credentials are at */root/keystonercv3*.
- .. code-block:: bash
+ .. code-block:: bash
- root@ctl01:~# source keystonercv3
- root@ctl01:~# openstack image list
- +--------------------------------------+-----------------------------------------------+--------+
- | ID | Name | Status |
- +======================================+===============================================+========+
- | 152930bf-5fd5-49c2-b3a1-cae14973f35f | CirrosImage | active |
- | 7b99a779-78e4-45f3-9905-64ae453e3dcb | Ubuntu16.04 | active |
- +--------------------------------------+-----------------------------------------------+--------+
+ root@ctl01:~# source keystonercv3
+ root@ctl01:~# openstack image list
+ +--------------------------------------+-----------------------------------------------+--------+
+ | ID | Name | Status |
+ +======================================+===============================================+========+
+ | 152930bf-5fd5-49c2-b3a1-cae14973f35f | CirrosImage | active |
+ | 7b99a779-78e4-45f3-9905-64ae453e3dcb | Ubuntu16.04 | active |
+ +--------------------------------------+-----------------------------------------------+--------+
-The OpenStack Dashboard, Horizon is available at http://<controller VIP>:8078, e.g. http://10.16.0.101:8078.
+The OpenStack Dashboard, Horizon, is available at http://<proxy public VIP>
The administrator credentials are *admin*/*opnfv_secret*.
.. figure:: img/horizon_login.png
.. figure:: img/salt_services_ip.png
-For Virtual deploys, the most commonly used IPs are in the table below.
+==============================
+Guest Operating System Support
+==============================
+
+There are a number of possibilities regarding the guest operating systems which can be spawned
+on the nodes. The current system spawns virtual machines for VCP VMs on the KVM nodes and VMs
+requested by users in OpenStack compute nodes. Currently the system supports the following
+UEFI-images for the guests:
+
++------------------+-------------------+------------------+
+| OS name | x86_64 status | aarch64 status |
++==================+===================+==================+
+| Ubuntu 17.10 | untested | Full support |
++------------------+-------------------+------------------+
+| Ubuntu 16.04 | Full support | Full support |
++------------------+-------------------+------------------+
+| Ubuntu 14.04 | untested | Full support |
++------------------+-------------------+------------------+
+| Fedora atomic 27 | untested | Not supported |
++------------------+-------------------+------------------+
+| Fedora cloud 27 | untested | Not supported |
++------------------+-------------------+------------------+
+| Debian | untested | Full support |
++------------------+-------------------+------------------+
+| Centos 7 | untested | Not supported |
++------------------+-------------------+------------------+
+| Cirros 0.3.5 | Full support | Full support |
++------------------+-------------------+------------------+
+| Cirros 0.4.0 | Full support | Full support |
++------------------+-------------------+------------------+
+
+
+The above table covers only UEFI image and implies OVMF/AAVMF firmware on the host. An x86 deployment
+also supports non-UEFI images, however that choice is up to the underlying hardware and the administrator
+to make.
+
+The images for the above operating systems can be found in their respective websites.
+
+===================
+Openstack Endpoints
+===================
+
+For each Openstack service three endpoints are created: admin, internal and public.
+
+ .. code-block:: bash
-+-----------+--------------+---------------+
-| Component | IP | Default value |
-+===========+==============+===============+
-| gtw01 | x.y.z.110 | 172.16.10.110 |
-+-----------+--------------+---------------+
-| ctl01 | x.y.z.100 | 172.16.10.100 |
-+-----------+--------------+---------------+
-| cmp001 | x.y.z.105 | 172.16.10.105 |
-+-----------+--------------+---------------+
-| cmp002 | x.y.z.106 | 172.16.10.106 |
-+-----------+--------------+---------------+
+ ubuntu@ctl01:~$ openstack endpoint list --service keystone
+ +----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------+
+ | ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+ +----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------+
+ | 008fec57922b4e9e8bf02c770039ae77 | RegionOne | keystone | identity | True | internal | http://172.16.10.26:5000/v3 |
+ | 1a1f3c3340484bda9ef7e193f50599e6 | RegionOne | keystone | identity | True | admin | http://172.16.10.26:35357/v3 |
+ | b0a47d42d0b6491b995d7e6230395de8 | RegionOne | keystone | identity | True | public | https://10.0.15.2:5000/v3 |
+ +----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------+
+
+MCP sets up all Openstack services to talk to each other over unencrypted
+connections on the internal management network. All admin/internal endpoints use
+plain http, while the public endpoints are https connections terminated via nginx
+at the VCP proxy VMs.
+
+To access the public endpoints an SSL certificate has to be provided. For
+convenience, the installation script will copy the required certificate into
+to the cfg01 node at /etc/ssl/certs/os_cacert.
+
+Copy the certificate from the cfg01 node to the client that will access the https
+endpoints and place it under /etc/ssl/certs. The SSL connection will be established
+automatically after.
+
+ .. code-block:: bash
+
+ $ ssh -o StrictHostKeyChecking=no -i /var/lib/opnfv/mcp.rsa -l ubuntu 10.20.0.2 \
+ "cat /etc/ssl/certs/os_cacert" | sudo tee /etc/ssl/certs/os_cacert
=============================
#. Create a new directory at any location
- .. code-block:: bash
+ .. code-block:: bash
- $ mkdir -p modeler
+ $ mkdir -p modeler
#. Place fuel repo in the above directory
- .. code-block:: bash
+ .. code-block:: bash
- $ cd modeler
- $ git clone https://gerrit.opnfv.org/gerrit/fuel && cd fuel
+ $ cd modeler
+ $ git clone https://gerrit.opnfv.org/gerrit/fuel && cd fuel
#. Create a container and mount the above host directory
- .. code-block:: bash
+ .. code-block:: bash
- $ docker run --privileged -it -v <absolute_path>/modeler:/host ubuntu bash
+ $ docker run --privileged -it -v <absolute_path>/modeler:/host ubuntu bash
#. Install all the required packages inside the container.
- .. code-block:: bash
+ .. code-block:: bash
- $ apt-get update
- $ apt-get install -y npm nodejs
- $ npm install -g reclass-doc
- $ cd /host/fuel/mcp/reclass
- $ ln -s /usr/bin/nodejs /usr/bin/node
- $ reclass-doc --output /host /host/fuel/mcp/reclass
+ $ apt-get update
+ $ apt-get install -y npm nodejs
+ $ npm install -g reclass-doc
+ $ cd /host/fuel/mcp/reclass
+ $ ln -s /usr/bin/nodejs /usr/bin/node
+ $ reclass-doc --output /host /host/fuel/mcp/reclass
#. View the results from the host by using a browser. The file to open should be now at modeler/index.html
.. figure:: img/reclass_doc.png
-.. _references:
+.. _fuel_userguide_references:
==========
References
==========
-1) `Installation instructions <http://docs.opnfv.org/en/stable-euphrates/submodules/fuel/docs/release/installation/installation.instruction.html>`_
+1) :ref:`fuel-release-installation-label`
2) `Saltstack Documentation <https://docs.saltstack.com/en/latest/topics>`_
-3) `Saltstack Formulas <http://salt-formulas.readthedocs.io/en/latest/develop/overview-reclass.html>`_
-
-
+3) `Saltstack Formulas <http://salt-formulas.readthedocs.io/en/latest/>`_
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# Copyright (c) 2018 Linux Foundation, 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
idf:
version: 0.1
+ net_config:
+ # NOTE: Network names are likely to change after the PDF spec is updated
+ oob:
+ interface: 0
+ ip-range: 172.30.8.65-172.30.8.75
+ vlan: 410
+ admin:
+ interface: 0
+ vlan: native
+ network: 192.168.11.0 # Untagged, 'PXE/Admin' on wiki, different IP
+ mask: 24
+ mgmt:
+ interface: 0
+ vlan: 300
+ network: 10.167.4.0 # Tagged, 'vlan 300' on wiki
+ ip-range: 10.167.4.10-10.167.4.254 # Some IPs are in use by lab infra
+ mask: 24
+ storage:
+ interface: 3
+ vlan: 301
+ network: 10.2.0.0 # Tagged, not the same with 'storage' on wiki
+ mask: 24
+ private:
+ interface: 1
+ vlan: 1000
+ network: 10.1.0.0 # Tagged, not the same with 'private' on wiki
+ mask: 24
+ public:
+ interface: 2
+ vlan: native
+ network: 172.30.10.0 # Untagged, 'public' on wiki
+ ip-range: 172.30.10.100-172.30.10.254 # Some IPs are in use by lab infra
+ mask: 24
+ gateway: 172.30.10.1
+ dns:
+ - 8.8.8.8
+ - 8.8.4.4
fuel:
jumphost:
bridges:
admin: 'pxebr'
mgmt: 'br-ctl'
- private: ''
- public: ''
+ private: ~
+ public: ~
network:
node:
# Ordered-list, index should be in sync with node index in PDF
--- /dev/null
+##############################################################################
+# Copyright (c) 2018 Ericsson AB, Mirantis Inc., Enea AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+### Fuel@OPNFV sample VIRTUAL installer descriptor file ###
+
+idf:
+ version: 0.0 # Intentionally invalid to indicate this is experimental
+ net_config:
+ # NOTE: Network names are likely to change after the PDF spec is updated
+ oob:
+ interface: 0
+ ip-range: ~
+ vlan: native
+ # All networks (except OOB) are virtual networks managed by `libvirt`
+ # Interface indexes are based on Fuel installer defaults
+ admin:
+ interface: 0 # when used, will be first vnet interface, untagged
+ vlan: native
+ network: 192.168.11.0
+ mask: 24
+ mgmt:
+ interface: 1 # when used, will be second vnet interface, untagged
+ vlan: native
+ network: 172.16.10.0
+ ip-range: 172.16.10.10-172.16.10.254 # Some IPs are in use by lab infra
+ mask: 24
+ storage:
+ interface: 4 # when used, will be fifth vnet interface, untagged
+ vlan: native
+ network: 192.168.20.0
+ mask: 24
+ private:
+ interface: 2 # when used, will be third vnet interface, untagged
+ vlan: 1000-1999
+ network: 10.1.0.0
+ mask: 24
+ public:
+ interface: 3 # when used, will be fourth vnet interface, untagged
+ vlan: native
+ network: 10.16.0.0
+ ip-range: 10.16.0.100-10.16.0.254 # Some IPs are in use by lab infra
+ mask: 24
+ gateway: 10.16.0.1
+ dns:
+ - 8.8.8.8
+ - 8.8.4.4
+ fuel:
+ jumphost:
+ bridges:
+ admin: ~
+ mgmt: ~
+ private: ~
+ public: ~
+ network:
+ node:
+ # Ordered-list, index should be in sync with node index in PDF
+ - interfaces: &interfaces
+ # Ordered-list, index should be in sync with interface index in PDF
+ - 'ens3'
+ - 'ens4'
+ - 'ens5'
+ - 'ens6'
+ busaddr: &busaddr
+ # Bus-info reported by `ethtool -i ethX`
+ - '0000:00:03.0'
+ - '0000:00:04.0'
+ - '0000:00:05.0'
+ - '0000:00:06.0'
+ - interfaces: *interfaces
+ busaddr: *busaddr
+ - interfaces: *interfaces
+ busaddr: *busaddr
+ - interfaces: *interfaces
+ busaddr: *busaddr
+ - interfaces: *interfaces
+ busaddr: *busaddr
+ reclass:
+ node:
+ - compute_params: &compute_params
+ common: &compute_params_common
+ compute_hugepages_size: 2M
+ compute_hugepages_count: 2048
+ compute_hugepages_mount: /mnt/hugepages_2M
+ dpdk:
+ <<: *compute_params_common
+ compute_dpdk_driver: uio
+ compute_ovs_pmd_cpu_mask: "0x6"
+ compute_ovs_dpdk_socket_mem: "1024"
+ compute_ovs_dpdk_lcore_mask: "0x8"
+ compute_ovs_memory_channels: "2"
+ dpdk0_driver: igb_uio
+ dpdk0_n_rxq: 2
+ - compute_params: *compute_params
+ - compute_params: *compute_params
+ - compute_params: *compute_params
+ - compute_params: *compute_params
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# Copyright (c) 2018 Linux Foundation, 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
---
### LF POD 2 descriptor file ###
+version: 1.0
details:
pod_owner: Trevor Bramwell
contact: tbramwell@linuxfoundation.org
type: production
link: https://wiki.opnfv.org/display/pharos/LF+POD+2
##############################################################################
-net_config:
- # NOTE: Network names are likely to change after the PDF spec is updated
- oob:
- interface: 0
- ip-range: 172.30.8.65-172.30.8.75
- vlan: 410
- admin:
- interface: 0
- vlan: native
- network: 192.168.11.0 # Untagged, 'PXE/Admin' on wiki, different IP
- mask: 24
- mgmt:
- interface: 0
- vlan: 300
- network: 10.167.4.0 # Tagged, 'vlan 300' on wiki
- mask: 24
- storage:
- interface: 3
- vlan: 301
- network: 10.2.0.0 # Tagged, not the same with 'storage' on wiki
- mask: 24
- private:
- interface: 1
- vlan: 1000
- network: 10.1.0.0 # Tagged, not the same with 'private' on wiki
- mask: 24
- public:
- interface: 2
- vlan: native
- network: 172.30.10.0 # Untagged, 'public' on wiki
- mask: 24
- gateway: 172.30.10.1
- dns:
- - 8.8.8.8
- - 8.8.4.4
-##############################################################################
jumphost:
name: pod2-jump
node:
disk_capacity: 2400G
disk_type: hdd
disk_interface: sas
- disk_rotation:
+ disk_rotation: 0
os: centos-7
remote_params: &remote_params
type: ipmi
- mac_address: "00:25:b5:a0:00:1a"
speed: 40gb
features: 'dpdk|sriov'
+ address: 192.168.11.1
+ name: 'nic1'
- mac_address: "00:25:b5:a0:00:1b"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic2'
- mac_address: "00:25:b5:a0:00:1c"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic3'
- mac_address: "00:25:b5:a0:00:1d"
speed: 40gb
features: 'dpdk|sriov'
- fixed_ips:
- admin: 192.168.11.1
- mgmt: 10.167.4.1
- public: 172.30.10.72
+ name: 'nic4'
##############################################################################
nodes:
- name: pod2-node1
- mac_address: "00:25:b5:a0:00:2a"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic1'
- mac_address: "00:25:b5:a0:00:2b"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic2'
- mac_address: "00:25:b5:a0:00:2c"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic3'
- mac_address: "00:25:b5:a0:00:2d"
speed: 40gb
features: 'dpdk|sriov'
- fixed_ips:
- admin: 192.168.11.2
- mgmt: 10.167.4.2
- public: 172.30.10.2
+ name: 'nic4'
############################################################################
- name: pod2-node2
node: *nodeparams
- mac_address: "00:25:b5:a0:00:3a"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic1'
- mac_address: "00:25:b5:a0:00:3b"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic2'
- mac_address: "00:25:b5:a0:00:3c"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic3'
- mac_address: "00:25:b5:a0:00:3d"
speed: 40gb
features: 'dpdk|sriov'
- fixed_ips:
- admin: 192.168.11.3
- mgmt: 10.167.4.3
- public: 172.30.10.3
+ name: 'nic4'
############################################################################
- name: pod2-node3
node: *nodeparams
- mac_address: "00:25:b5:a0:00:4a"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic1'
- mac_address: "00:25:b5:a0:00:4b"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic2'
- mac_address: "00:25:b5:a0:00:4c"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic3'
- mac_address: "00:25:b5:a0:00:4d"
speed: 40gb
features: 'dpdk|sriov'
- fixed_ips:
- admin: 192.168.11.4
- mgmt: 10.167.4.4
- public: 172.30.10.4
+ name: 'nic4'
############################################################################
- name: pod2-node4
node: *nodeparams
- mac_address: "00:25:b5:a0:00:5a"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic1'
- mac_address: "00:25:b5:a0:00:5b"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic2'
- mac_address: "00:25:b5:a0:00:5c"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic3'
- mac_address: "00:25:b5:a0:00:5d"
speed: 40gb
features: 'dpdk|sriov'
- fixed_ips:
- admin: 192.168.11.5
- mgmt: 10.167.4.5
- public: 172.30.10.5
+ name: 'nic4'
############################################################################
- name: pod2-node5
node: *nodeparams
- mac_address: "00:25:b5:a0:00:6a"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic1'
- mac_address: "00:25:b5:a0:00:6b"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic2'
- mac_address: "00:25:b5:a0:00:6c"
speed: 40gb
features: 'dpdk|sriov'
+ name: 'nic3'
- mac_address: "00:25:b5:a0:00:6d"
speed: 40gb
features: 'dpdk|sriov'
- fixed_ips:
- admin: 192.168.11.6
- mgmt: 10.167.4.6
- public: 172.30.10.6
+ name: 'nic4'
--- /dev/null
+##############################################################################
+# Copyright (c) 2018 Ericsson AB, Mirantis Inc., Enea AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+### Fuel@OPNFV sample VIRTUAL POD descriptor file ###
+### NOTE: This is subject to change as vPDF is not yet officialy supported ###
+
+version: 0.0 # Intentionally invalid to indicate this is experimental
+details:
+ pod_owner: Fuel@OPNFV
+ contact: Fuel@OPNFV
+ lab: Example Lab
+ location: Example Location
+ type: development
+ link: https://wiki.opnfv.org/display/pharos/
+##############################################################################
+jumphost:
+ name: virtual1-jump
+ node:
+ type: baremetal
+ vendor: HP
+ model: ProLiant BL460c Gen8
+ arch: x86_64
+ cpus: 2
+ cpu_cflags: ivybridge
+ cores: 10
+ memory: 64G
+ disks:
+ - name: 'disk1'
+ disk_capacity: 800G
+ disk_type: hdd
+ disk_interface: scsi
+ disk_rotation: 15000
+ os: ubuntu-16.04
+ remote_management:
+ type: ipmi
+ versions:
+ - 1.0
+ - 2.0
+ user: changeme
+ pass: changeme
+ address: 0.0.0.0
+ mac_address: "00:00:00:00:00:00"
+ interfaces:
+ - name: 'nic1'
+ speed: 10gb
+ features: 'dpdk|sriov'
+ mac_address: "00:00:00:00:00:00"
+ vlan: native
+ - name: 'nic2'
+ speed: 10gb
+ features: 'dpdk|sriov'
+ mac_address: "00:00:00:00:00:00"
+ vlan: native
+##############################################################################
+nodes:
+ - name: node-1
+ node: &nodeparams
+ # Fuel overrides certain params (e.g. cpus, mem) based on node role later
+ type: virtual
+ vendor: libvirt
+ model: virt
+ arch: x86_64
+ cpus: 1
+ cpu_cflags: ivybridge
+ cores: 8
+ memory: 6G
+ disks: &disks
+ - name: 'disk1'
+ disk_capacity: 100G
+ disk_type: hdd
+ disk_interface: scsi # virtio-scsi
+ disk_rotation: 15000
+ remote_management: &remotemgmt
+ type: libvirt
+ user: changeme
+ pass: changeme
+ address: 127.0.0.1 # Not used currently, will be 'qemu:///system' later
+ interfaces: &interfaces
+ - name: 'nic1'
+ speed: 10gb
+ features: 'dpdk|sriov'
+ mac_address: "00:00:00:00:00:00" # MACs will be assigned by libvirt
+ vlan: native
+ - name: 'nic2'
+ speed: 10gb
+ features: 'dpdk|sriov'
+ mac_address: "00:00:00:00:00:00"
+ vlan: native
+ - name: 'nic3'
+ speed: 10gb
+ features: 'dpdk|sriov'
+ mac_address: "00:00:00:00:00:00"
+ vlan: native
+ - name: 'nic4'
+ speed: 10gb
+ features: 'dpdk|sriov'
+ mac_address: "00:00:00:00:00:00"
+ vlan: native
+ ############################################################################
+ - name: node-2
+ node: *nodeparams
+ disks: *disks
+ remote_management: *remotemgmt
+ interfaces: *interfaces
+ ############################################################################
+ - name: node-3
+ node: *nodeparams
+ disks: *disks
+ remote_management: *remotemgmt
+ interfaces: *interfaces
+ ############################################################################
+ - name: node-4
+ node: *nodeparams
+ disks: *disks
+ remote_management: *remotemgmt
+ interfaces: *interfaces
+ ############################################################################
+ - name: node-5
+ node: *nodeparams
+ disks: *disks
+ remote_management: *remotemgmt
+ interfaces: *interfaces
NOTES:
------
This directory is highly likely to change and/or be replaced/complemented
-by the new PDF (Pod Descriptor File) info in securedlab OPNFV git repo.
+by the new PDF (Pod Descriptor File) info in Pharos OPNFV git repo.
+++ /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
-##############################################################################
----
-cluster:
- domain: baremetal-mcp-pike-ovs-ha.local
- states:
- - maas
- - baremetal_init
- - virtual_control_plane
- - openstack_ha
- - networks
-virtual:
- nodes:
- - cfg01
- - mas01
- cfg01:
- vcpus: 4
- ram: 6144
- mas01:
- vcpus: 4
- ram: 6144
+++ /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
-##############################################################################
----
-cluster:
- domain: baremetal-mcp-pike-ovs-dpdk-ha.local
- states:
- - maas
- - baremetal_init
- - virtual_control_plane
- - dpdk
- - openstack_ha
- - networks
- - networking_gw
-virtual:
- nodes:
- - cfg01
- - mas01
- cfg01:
- vcpus: 4
- ram: 6144
- mas01:
- vcpus: 4
- ram: 6144
+++ /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
-##############################################################################
----
-cluster:
- domain: baremetal-mcp-pike-odl-ha.local
- states:
- - maas
- - baremetal_init
- - virtual_control_plane
- - opendaylight
- - openstack_ha
- - networks
-virtual:
- nodes:
- - cfg01
- - mas01
- cfg01:
- vcpus: 4
- ram: 6144
- mas01:
- vcpus: 4
- ram: 6144
+++ /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
-##############################################################################
----
-base_image: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img
-virtual:
- default:
- vcpus: 2
- ram: 4096
- common:
- apt:
- keys:
- - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.11/SALTSTACK-GPG-KEY.pub
- repos:
- # <repo name> <repo prio> deb [arch=<arch>] <repo url> <repo dist> <repo comp>
- - saltstack 500 deb [arch=amd64] http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.11 xenial main
- pkg:
- install:
- - salt-minion
- control:
- pkg:
- install:
- - cloud-init
##############################################################################
-# Copyright (c) 2017 Mirantis Inc. and others.
+# 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
##############################################################################
---
-base_image: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-arm64-uefi1.img
-virtual:
+x86_64:
+ base_image: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img
+ default:
+ vcpus: 2
+ ram: 4096
+ common:
+ apt:
+ keys:
+ - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.11/SALTSTACK-GPG-KEY.pub
+ repos:
+ # <repo name> <repo prio> deb [arch=<arch>] <repo url> <repo dist> <repo comp>
+ - saltstack 500 deb [arch=amd64] http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.11 xenial main
+ pkg:
+ install:
+ - linux-generic-hwe-16.04
+ - salt-minion
+ control:
+ apt: ~
+ pkg:
+ install:
+ - cloud-init
+aarch64:
+ base_image: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-arm64-uefi1.img
default:
vcpus: 6
ram: 4096
- linux-headers-generic-hwe-16.04-edge
- salt-minion
control:
+ apt: ~
pkg:
install:
- cloud-init
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{%- set cluster = {'has_virtual_nodes': False} %}
+{%- for node in conf.nodes %}
+ {%- if not cluster.has_virtual_nodes and node.node.type == 'baremetal' %}
+ {%- do cluster.update({'has_baremetal_nodes': True}) %}
+ {%- endif %}
+{%- endfor %}
+---
+cluster:
+ domain: mcp-pike-ovs-ha.local
+ states:
+{%- if cluster.has_baremetal_nodes %}
+ - maas
+ - baremetal_init
+{%- endif %}
+{%- if conf.MCP_VCP %}
+ - virtual_control_plane
+{%- endif %}
+ - openstack_ha
+ - networks
+virtual:
+ nodes:
+ - cfg01
+{%- if cluster.has_baremetal_nodes %}
+ - mas01
+{%- endif %}
+{#- Most likely, controllers will always have the same type and number (3) #}
+{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %}
+ - kvm01
+ - kvm02
+ - kvm03
+{%- endif %}
+{#- Later, we might have mixed computes here, for hybrid multi-arch testing #}
+{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %}
+ - cmp001
+ - cmp002
+{%- endif %}
+ cfg01:
+ vcpus: 4
+ ram: 6144
+ # Below values are only used when nodes are defined in virtual.nodes above
+ mas01:
+ vcpus: 4
+ ram: 6144
+ # NOTE: We might need to add more RAM here
+ kvm01:
+ vcpus: 4
+ ram: 14336
+ kvm02:
+ vcpus: 4
+ ram: 14336
+ kvm03:
+ vcpus: 4
+ ram: 14336
+ cmp001:
+ vcpus: 4
+ ram: 8192
+ cmp002:
+ vcpus: 4
+ ram: 8192
##############################################################################
---
cluster:
- domain: virtual-mcp-pike-ovs-noha.local
+ domain: mcp-pike-ovs-noha.local
states:
- openstack_noha
- neutron_gateway
- - neutron_compute
- networks
virtual:
nodes:
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{%- set cluster = {'has_virtual_nodes': False} %}
+{%- for node in conf.nodes %}
+ {%- if not cluster.has_virtual_nodes and node.node.type == 'baremetal' %}
+ {%- do cluster.update({'has_baremetal_nodes': True}) %}
+ {%- endif %}
+{%- endfor %}
+---
+cluster:
+ domain: mcp-pike-ovs-dpdk-ha.local
+ states:
+{%- if cluster.has_baremetal_nodes %}
+ - maas
+ - baremetal_init
+{%- endif %}
+{%- if conf.MCP_VCP %}
+ - virtual_control_plane
+{%- endif %}
+ - dpdk
+ - openstack_ha
+ - networks
+virtual:
+ nodes:
+ - cfg01
+{%- if cluster.has_baremetal_nodes %}
+ - mas01
+{%- endif %}
+{#- Most likely, controllers will always have the same type and number (3) #}
+{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %}
+ - kvm01
+ - kvm02
+ - kvm03
+{%- endif %}
+{#- Later, we might have mixed computes here, for hybrid multi-arch testing #}
+{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %}
+ - cmp001
+ - cmp002
+{%- endif %}
+ cfg01:
+ vcpus: 4
+ ram: 6144
+ # Below values are only used when nodes are defined in virtual.nodes above
+ mas01:
+ vcpus: 4
+ ram: 6144
+ # NOTE: We might need to add more RAM here
+ kvm01:
+ vcpus: 4
+ ram: 14336
+ kvm02:
+ vcpus: 4
+ ram: 14336
+ kvm03:
+ vcpus: 4
+ ram: 14336
+ cmp001:
+ vcpus: 4
+ ram: 8192
+ cmp002:
+ vcpus: 4
+ ram: 8192
##############################################################################
---
cluster:
- domain: virtual-mcp-pike-ovs-dpdk-noha.local
+ domain: mcp-pike-ovs-dpdk-noha.local
states:
- dpdk
- openstack_noha
- neutron_gateway
- - neutron_compute
- networks
virtual:
nodes:
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{%- set cluster = {'has_virtual_nodes': False} %}
+{%- for node in conf.nodes %}
+ {%- if not cluster.has_virtual_nodes and node.node.type == 'baremetal' %}
+ {%- do cluster.update({'has_baremetal_nodes': True}) %}
+ {%- endif %}
+{%- endfor %}
+---
+cluster:
+ domain: mcp-pike-odl-ha.local
+ states:
+{%- if cluster.has_baremetal_nodes %}
+ - maas
+ - baremetal_init
+{%- endif %}
+{%- if conf.MCP_VCP %}
+ - virtual_control_plane
+{%- endif %}
+ - opendaylight
+ - openstack_ha
+ - networks
+virtual:
+ nodes:
+ - cfg01
+{%- if cluster.has_baremetal_nodes %}
+ - mas01
+{%- endif %}
+{#- Most likely, controllers will always have the same type and number (3) #}
+{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %}
+ - kvm01
+ - kvm02
+ - kvm03
+{%- endif %}
+{#- Later, we might have mixed computes here, for hybrid multi-arch testing #}
+{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %}
+ - cmp001
+ - cmp002
+{%- endif %}
+ cfg01:
+ vcpus: 4
+ ram: 6144
+ # Below values are only used when nodes are defined in virtual.nodes above
+ mas01:
+ vcpus: 4
+ ram: 6144
+ # NOTE: We might need to add more RAM here
+ kvm01:
+ vcpus: 4
+ ram: 14336
+ kvm02:
+ vcpus: 4
+ ram: 14336
+ kvm03:
+ vcpus: 4
+ ram: 14336
+ cmp001:
+ vcpus: 4
+ ram: 8192
+ cmp002:
+ vcpus: 4
+ ram: 8192
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
cluster:
- domain: virtual-mcp-pike-odl-noha.local
+ domain: mcp-pike-odl-noha.local
states:
- opendaylight
- openstack_noha
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{%- set cluster = {'has_virtual_nodes': False} %}
+{%- for node in conf.nodes %}
+ {%- if not cluster.has_virtual_nodes and node.node.type == 'baremetal' %}
+ {%- do cluster.update({'has_baremetal_nodes': True}) %}
+ {%- endif %}
+{%- endfor %}
+---
+cluster:
+ domain: mcp-pike-ovn-ha.local
+ states:
+{%- if cluster.has_baremetal_nodes %}
+ - maas
+ - baremetal_init
+{%- endif %}
+{%- if conf.MCP_VCP %}
+ - virtual_control_plane
+{%- endif %}
+ - openstack_ha
+ - networks
+virtual:
+ nodes:
+ - cfg01
+{%- if cluster.has_baremetal_nodes %}
+ - mas01
+{%- endif %}
+{#- Most likely, controllers will always have the same type and number (3) #}
+{%- if conf.nodes[nm.ctl01.idx].node.type == 'virtual' %}
+ - kvm01
+ - kvm02
+ - kvm03
+{%- endif %}
+{#- Later, we might have mixed computes here, for hybrid multi-arch testing #}
+{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %}
+ - cmp001
+ - cmp002
+{%- endif %}
+ cfg01:
+ vcpus: 4
+ ram: 6144
+ # Below values are only used when nodes are defined in virtual.nodes above
+ mas01:
+ vcpus: 4
+ ram: 6144
+ # NOTE: We might need to add more RAM here
+ kvm01:
+ vcpus: 4
+ ram: 14336
+ kvm02:
+ vcpus: 4
+ ram: 14336
+ kvm03:
+ vcpus: 4
+ ram: 14336
+ cmp001:
+ vcpus: 4
+ ram: 8192
+ cmp002:
+ vcpus: 4
+ ram: 8192
##############################################################################
---
cluster:
- domain: virtual-mcp-pike-ovn-noha.local
+ domain: mcp-pike-ovn-noha.local
states:
- openstack_noha
- - ovn_ctl_opts
- - neutron_compute
- networks
virtual:
nodes:
#!/bin/bash -e
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
salt -C 'kvm*' pkg.install bridge-utils
salt -C 'kvm*' state.apply linux.network,linux.system.kernel
salt -C 'kvm* or cmp*' state.apply salt.minion
-salt -C 'cmp*' state.apply linux.system
+wait_for 5.0 "salt -C 'cmp*' state.apply linux.system"
+# wrap distro `route` binary to silence errors when route already exists
+wait_for 5.0 "salt -C 'kvm* or cmp*' state.apply opnfv.route_wrapper"
salt -C 'cmp*' state.apply linux.network || true
+wait_for 30.0 "salt -C 'kvm* or cmp*' test.ping"
# disable dhcp offered routes on compute nodes
salt -C 'cmp*' file.write /etc/dhcp/dhclient-enter-hooks.d/no-default-route \
# shellcheck disable=SC1090
source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/lib.sh"
-salt -I 'nova:compute' system.reboot
-wait_for 90.0 "salt -I 'nova:compute' test.ping"
-
salt -I 'nova:compute' alternatives.set ovs-vswitchd /usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk
salt -I 'nova:compute' service.restart openvswitch-switch
source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/globals.sh"
source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/lib.sh"
+bm_nodes=$(salt --out yaml 'mas01*' pillar.get maas:region:machines | \
+ awk '/^\s+\w+[[:digit:]]+:$/ {gsub(/:$/, "*"); printf "%s ", $1}')
+
# Wait for MaaS commissioning/deploy to finish, retry on failure
function maas_fixup() {
local statuscmd="salt 'mas01*' --out yaml state.apply maas.machines.status"
local fcnodes=$(echo "${statusout}" | \
grep -Pzo 'status: Failed commissioning\n\s+system_id: \K.+\n')
+ local ftnodes=$(echo "${statusout}" | \
+ grep -Pzo 'status: Failed testing\n\s+system_id: \K.+\n')
for node_system_id in ${fcnodes}; do
salt -C 'mas01*' state.apply maas.machines.delete \
pillar="{'system_id': '${node_system_id}'}"
sleep 10
done
- if [ -n "${fcnodes}" ]; then
+ for node_system_id in ${ftnodes}; do
+ salt -C 'mas01*' state.apply maas.machines.override_failed_testing \
+ pillar="{'system_id': '${node_system_id}'}"
+ sleep 10
+ done
+ if [ -n "${fcnodes}" ] || [ -n "${ftnodes}" ]; then
salt -C 'mas01*' state.apply maas.machines
return 1
fi
sleep 10
done
if [ -n "${fdnodes}" ] || [ -n "${rnodes}" ]; then
+ for node_system_id in ${fdnodes} ${rnodes}; do
+ # For now, we allocate 30GB (fixed) for / on cmp nodes
+ local node_hostname=$(echo "${statusout}" | \
+ grep -Pzo 'hostname: \K.+(?=\n.+\n\s+system_id: '"${node_system_id}"')')
+ if [[ "${node_hostname}" =~ ^cmp ]]; then
+ salt -C 'mas01*' state.apply maas.machines.set_storage_layout \
+ pillar="{'system_id': '${node_system_id}', 'lv_size': '32212254720'}"
+ sleep 10
+ fi
+ done
salt -C 'mas01*' state.apply maas.machines.deploy
return 1
fi
# MaaS rack/region controller, node commissioning
salt -C 'mas01*' state.apply linux,salt,openssh,ntp
+salt -C 'mas01*' state.apply maas.pxe_nat
salt -C 'mas01*' state.apply maas.cluster
wait_for 10 "salt -C 'mas01*' state.apply maas.region"
-salt -C 'mas01*' state.apply maas.machines
+if [ -n "${bm_nodes}" ]; then
+ salt -C 'mas01*' state.apply maas.machines
+fi
# cleanup outdated salt keys
sleep 30
salt-key --out yaml | awk '!/^(minions|- cfg01|- mas01)/ {print $2}' | \
- xargs -I{} salt-key -yd {}
+ xargs --no-run-if-empty -I{} salt-key -yd {}
# MaaS node deployment
wait_for 10 maas_fixup
maas:region:admin:password
# Check all baremetal nodes are available
-rc=1
-attempt=0
-total_attempts=10
-while [ $rc -ne 0 ] && [ ${attempt} -lt ${total_attempts} ]; do
- bm_nodes=$(salt --out yaml 'mas01*' pillar.get maas:region:machines | \
- awk '/^\s+\w+[[:digit:]]+:$/ {gsub(/:$/, "*"); print $1}')
- rc=0
- for node in $bm_nodes; do
- salt "$node" test.ping 2>/dev/null || { rc=$?; break; };
- done
- sleep 5
- ((attempt+=1))
-done
+wait_for 5.0 "(for n in ${bm_nodes}; do salt \${n} test.ping 2>/dev/null || exit; done)"
wait_for 10.0 "salt -C '* and not cfg01* and not mas01*' saltutil.sync_all"
+++ /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
-
-salt -I 'neutron:compute' state.sls neutron
#!/bin/bash -e
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
CI_DEBUG=${CI_DEBUG:-0}; [[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
-salt -I 'opendaylight:server' state.sls opendaylight
-salt -I 'opendaylight:client' state.sls opendaylight.client
-salt -I 'opendaylight:client' cmd.run 'neutron-odl-ovs-hostconfig --noovs_dpdk'
-salt -I 'neutron:server' state.sls opendaylight.client
+# shellcheck disable=SC1090
+source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/lib.sh"
+
+# Get OpenDaylight server options with prefix odl_
+function odl() {
+ salt --out txt -I 'opendaylight:server' pillar.get "opendaylight:server:odl_$1" | cut -d ' ' -f2
+}
+
+wait_for 5.0 "salt -I 'opendaylight:server' state.sls opendaylight"
+wait_for 20 "salt --out yaml -C 'I@neutron:server and *01*' network.connect $(odl bind_ip) $(odl rest_port) | fgrep -q 'result: true'"
# shellcheck disable=SC1090
source "$(dirname "${BASH_SOURCE[0]}")/../../scripts/lib.sh"
-salt -I 'keepalived:cluster' state.sls keepalived -b 1
-salt -I 'keepalived:cluster' pillar.get keepalived:cluster:instance:VIP:address
+wait_for 5.0 "salt -I 'keepalived:cluster' state.sls keepalived -b 1"
+wait_for 5.0 "salt -I 'keepalived:cluster' pillar.get keepalived:cluster:instance:VIP:address"
salt -C 'I@rabbitmq:server and *01*' state.sls rabbitmq
salt -I 'rabbitmq:server' state.sls rabbitmq
salt -I 'glusterfs:client' state.sls glusterfs.client
salt -I 'galera:master' state.sls galera
-salt -I 'galera:slave' state.sls galera
+salt -I 'galera:slave' state.sls galera -b 1
salt -I 'galera:master' mysql.status | grep -A1 wsrep_cluster_size
-salt -I 'memcached:server' state.sls memcached
+wait_for 3.0 "salt -I 'memcached:server' state.sls memcached"
salt -I 'haproxy:proxy' state.sls haproxy
salt -I 'haproxy:proxy' service.status haproxy
salt -I 'keystone:server' service.restart apache2
salt -I 'keystone:server' state.sls keystone.server -b 1
-wait_for 30 "salt -I 'keystone:client' state.sls keystone.client"
+wait_for 30.0 "salt -I 'keystone:client' state.sls keystone.client"
salt -I 'keystone:server' cmd.run ". /root/keystonercv3; openstack service list"
salt -I 'glance:server' state.sls glance -b 1
salt -I 'nova:controller' state.sls nova -b 1
salt -I 'heat:server' state.sls heat -b 1
-wait_for 5 "salt -I 'cinder:controller' state.sls cinder -b 1"
-wait_for 3 "salt -I 'cinder:volume' state.sls cinder"
+wait_for 5.0 "salt -I 'cinder:controller' state.sls cinder -b 1"
+wait_for 3.0 "salt -I 'cinder:volume' state.sls cinder"
salt -I 'neutron:server' state.sls neutron -b 1
salt -I 'neutron:gateway' state.sls neutron.gateway
salt -I 'nova:compute' state.sls nova
salt -C 'I@mongodb:server and *01*' state.sls mongodb || true
-wait_for 10 "salt -C 'I@mongodb:server and *01*' cmd.run 'mongo localhost:27017/admin'"
+wait_for 10.0 "salt -C 'I@mongodb:server and *01*' cmd.run 'mongo localhost:27017/admin'"
salt -C 'I@mongodb:server and *01*' cmd.run 'mongo localhost:27017/admin --eval "rs.initiate()"'
salt -I 'mongodb:server' state.sls mongodb
salt -I 'ceilometer:agent' state.sls ceilometer
salt -I 'horizon:server' state.sls horizon
-salt -I 'nginx:server' state.sls nginx,sphinx
-
-# workaround for the pike horizon is missing css, FUEL-324
-salt -I 'horizon:server' file.symlink \
- /var/lib/openstack-dashboard/static \
- /usr/share/openstack-dashboard/static
-salt -I 'horizon:server' cmd.run "/usr/share/openstack-dashboard/manage.py collectstatic --noinput"
-salt -I 'horizon:server' cmd.run "/usr/share/openstack-dashboard/manage.py compress --force"
-salt -I 'horizon:server' file.append /etc/openstack-dashboard/local_settings.py \
- "AVAILABLE_THEMES = [ ('default', 'Default', 'themes/default'),]"
-salt -I 'horizon:server' service.reload apache2
-
-clstr_vip_addr=$(salt -C 'I@nginx:server and *01*' --out=yaml \
- pillar.get _param:cluster_vip_address | awk '{print $2; exit}')
-salt -C 'I@nginx:server and *01*' cp.push \
- "/etc/ssl/certs/${clstr_vip_addr}-with-chain.crt" upload_path='certs/os_cacert'
-cd /etc/ssl/certs && ln -sf /var/cache/salt/master/minions/prx01.*/files/certs/os_cacert
+salt -I 'nginx:server' state.sls nginx
+
+# workaround for Ubuntu Pike Horizon missing css, FUEL-324
+if ! salt -C 'I@horizon:server and *01*' --out=yaml pkg.version openstack-dashboard | grep -qE ':.*mcp'; then
+ salt -I 'horizon:server' file.symlink \
+ /var/lib/openstack-dashboard/static \
+ /usr/share/openstack-dashboard/static
+ salt -I 'horizon:server' cmd.run "/usr/share/openstack-dashboard/manage.py collectstatic --noinput"
+ salt -I 'horizon:server' cmd.run "/usr/share/openstack-dashboard/manage.py compress --force"
+ salt -I 'horizon:server' file.append /etc/openstack-dashboard/local_settings.py \
+ "AVAILABLE_THEMES = [ ('default', 'Default', 'themes/default'),]"
+ salt -I 'horizon:server' service.reload apache2
+fi
+
+cluster_public_host=$(salt -C 'I@nginx:server and *01*' --out=yaml \
+ pillar.get _param:cluster_public_host | awk '{print $2; exit}')
+dashboard_host=$(salt -C 'I@nginx:server and *01*' --out=yaml cp.push \
+ "/etc/ssl/certs/${cluster_public_host}-with-chain.crt" \
+ upload_path='certs/os_cacert' | cut -d':' -f1)
+cd /etc/ssl/certs && \
+ ln -sf "/var/cache/salt/master/minions/${dashboard_host}/files/certs/os_cacert"
# glance v1 api is required by orchestra tests
salt -I 'glance:server' ini.set_option /etc/glance/glance-api.conf '{DEFAULT: {enable_v1_api: True}}'
wait_for 3 "salt -I 'cinder:volume' state.sls cinder"
salt -I 'neutron:server' state.sls neutron
+salt -I 'neutron:compute' state.sls neutron
salt -I 'nova:compute' state.sls nova
+++ /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
-
-salt -I 'neutron:server' file.append /etc/default/ovn-central \
- args="OVN_CTL_OPTS='--db-nb-create-insecure-remote=yes --db-sb-create-insecure-remote=yes'"
-salt -I 'neutron:server' service.restart ovn-central
-sleep 30
wait_for 10.0 "salt -C 'kvm*' state.sls salt.control"
vcp_nodes=$(salt --out yaml 'kvm01*' pillar.get salt:control:cluster:internal:node | \
- awk '/\s+\w+:$/ {gsub(/:$/, "*"); print $1}')
+ awk '/\s+\w+:$/ {gsub(/:$/, "*"); printf "%s ", $1}')
# Check all vcp nodes are available
-rc=1
-attempt=0
-total_attempts=50
-while [ $rc -ne 0 ] && [ ${attempt} -lt ${total_attempts} ]; do
- rc=0
- for node in $vcp_nodes; do
- salt "$node" test.ping 2>/dev/null || { rc=$?; break; };
- done
- sleep 5
- ((attempt+=1))
-done
+wait_for 25.0 "(for n in ${vcp_nodes}; do salt \${n} test.ping 2>/dev/null || exit; done)"
wait_for 10.0 "salt -C '* and not cfg01* and not mas01*' saltutil.sync_all"
salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' cp.get_file \
"salt://maas/files/$(basename "${APT_CONF_D_CURTIN}")" "${APT_CONF_D_CURTIN}"
-wait_for 10 "salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' state.apply salt"
+wait_for 10.0 "salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' state.apply salt"
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} \
# Disable proxy dhcp routes after installation
salt -C 'prx*' file.write /etc/dhcp/dhclient-enter-hooks.d/no-default-route \
args='unset new_routers'
+salt -C 'prx*' state.apply opnfv.route_wrapper
salt -C 'prx*' system.reboot
wait_for 30.0 "salt -C 'prx*' test.ping"
applications:
- opendaylight
parameters:
+ _param:
+ version: oxygen
opendaylight:
server:
enabled: 'True'
+ version: ${_param:version}
+ repo: 'odl-team/${_param:version}'
logging:
engine: syslog
+++ /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: Michael Polenchuk <mpolenchuk@mirantis.com>
-Date: Thu, 29 Jun 2017 12:05:25 +0400
-Subject: [PATCH] Bring in opendaylight support
-
-Change-Id: Ie9073fafccba336f94b1996bd85c98d7a7f5060b
-
-diff --git a/neutron/files/pike/dhcp_agent.ini b/neutron/files/pike/dhcp_agent.ini
-index d327e64..739dddf 100644
---- a/neutron/files/pike/dhcp_agent.ini
-+++ b/neutron/files/pike/dhcp_agent.ini
-@@ -1,3 +1,8 @@
-+{%- if pillar.neutron.gateway is defined %}
-+{%- from "neutron/map.jinja" import gateway as neutron with context %}
-+{%- else %}
-+{%- from "neutron/map.jinja" import compute as neutron with context %}
-+{%- endif %}
- [DEFAULT]
-
- #
-@@ -48,6 +53,7 @@ enable_isolated_metadata = True
- # this value will force the DHCP server to append specific host routes to the DHCP request. If this option is set, then the metadata service
- # will be activated for all the networks. (boolean value)
- #force_metadata = false
-+{% if neutron.backend.router is defined %}force_metadata = True{% endif %}
-
- # Allows for serving metadata requests coming from a dedicated metadata access network whose CIDR is 169.254.169.254/16 (or larger prefix),
- # and is connected to a Neutron router from which the VMs send metadata:1 request. In this case DHCP Option 121 will not be injected in VMs,
-diff --git a/neutron/files/pike/ml2_conf.ini b/neutron/files/pike/ml2_conf.ini
-index b61e313..02da3b1 100644
---- a/neutron/files/pike/ml2_conf.ini
-+++ b/neutron/files/pike/ml2_conf.ini
-@@ -134,7 +134,8 @@ tenant_network_types = {{ server.backend.tenant_network_types }}
- {%- for mechanism_name, mechanism in server.get('backend', {}).get('mechanism', []).items() %}
- {%- do mechanism_drivers.append(mechanism.get('driver')) if 'driver' in mechanism %}
- {%- endfor %}
--{%- if "vxlan" in server.backend.tenant_network_types %}
-+{%- set opendaylight_enabled = true if 'opendaylight' in mechanism_drivers|join else false %}
-+{%- if "vxlan" in server.backend.tenant_network_types and not opendaylight_enabled %}
- {%- do mechanism_drivers.append('l2population') %}
- {%- endif %}
- mechanism_drivers = {{ ','.join(mechanism_drivers) }}
-@@ -311,3 +312,11 @@ ovn_nb_connection = tcp:{{ server.controller_vip }}:6641
- ovn_sb_connection = tcp:{{ server.controller_vip }}:6642
- ovn_l3_scheduler = leastloaded
- {%- endif %}
-+
-+{%- if opendaylight_enabled %}
-+[ml2_odl]
-+port_binding_controller = pseudo-agentdb-binding
-+url = http://{{ server.backend.host }}:{{ server.backend.rest_api_port }}/controller/nb/v2/neutron
-+username = {{ server.backend.user }}
-+password = {{ server.backend.password }}
-+{%- endif %}
-diff --git a/neutron/files/pike/neutron-generic.conf.Debian b/neutron/files/pike/neutron-generic.conf.Debian
-index 123386d..d77f6c8 100644
---- a/neutron/files/pike/neutron-generic.conf.Debian
-+++ b/neutron/files/pike/neutron-generic.conf.Debian
-@@ -37,7 +37,7 @@ auth_strategy = keystone
-
- core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
-
--service_plugins =neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.metering.metering_plugin.MeteringPlugin
-+service_plugins = {{ neutron.backend.get('router', 'router')}}, metering
-
- {% endif %}
-
-@@ -668,7 +668,7 @@ root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
- # needs to execute commands in Dom0 in the hypervisor of XenServer, this item
- # should be set to 'xenapi_root_helper', so that it will keep a XenAPI session
- # to pass commands to Dom0. (string value)
--root_helper_daemon = sudo neutron-rootwrap-daemon /etc/neutron/rootwrap.conf
-+#root_helper_daemon = <None>
-
- # Seconds between nodes reporting state to server; should be less than
- # agent_down_time, best if it is half or less than agent_down_time. (floating
-@@ -2092,3 +2092,8 @@ heartbeat_rate = 2
- # Sets the list of available ciphers. value should be a string in the OpenSSL
- # cipher list format. (string value)
- #ciphers = <None>
-+
-+{%- if neutron.backend.ovsdb_connection is defined %}
-+[ovs]
-+ovsdb_connection = {{ neutron.backend.ovsdb_connection }}
-+{%- endif %}
-diff --git a/neutron/files/pike/neutron-server.conf.Debian b/neutron/files/pike/neutron-server.conf.Debian
-index 79376a2..a7a4645 100644
---- a/neutron/files/pike/neutron-server.conf.Debian
-+++ b/neutron/files/pike/neutron-server.conf.Debian
-@@ -50,7 +50,7 @@ core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
- {% set l3_plugin = 'networking_ovn.l3.l3_ovn.OVNL3RouterPlugin' %}
- {% endif %}
-
--service_plugins ={{ l3_plugin }}, neutron.services.metering.metering_plugin.MeteringPlugin
-+service_plugins = {{ server.backend.get('router', l3_plugin)}}, metering
- {%- if server.lbaas is defined -%},lbaasv2{%- endif -%}
- {%- if fwaas.get('enabled', False) -%},{{ fwaas[fwaas.api_version]['service_plugin'] }}{%- endif -%}
- {%- if server.get('qos', 'True') -%},neutron.services.qos.qos_plugin.QoSPlugin{%- endif -%}
-@@ -703,7 +703,7 @@ root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
- # needs to execute commands in Dom0 in the hypervisor of XenServer, this item
- # should be set to 'xenapi_root_helper', so that it will keep a XenAPI session
- # to pass commands to Dom0. (string value)
--root_helper_daemon = sudo neutron-rootwrap-daemon /etc/neutron/rootwrap.conf
-+#root_helper_daemon = <None>
-
- # Seconds between nodes reporting state to server; should be less than
- # agent_down_time, best if it is half or less than agent_down_time. (floating
-@@ -2245,3 +2245,8 @@ username = {{ server.identity.user }}
- password = {{ server.identity.password }}
- auth_url=http://{{ server.identity.host }}:35357
- {%- endif %}
-+
-+{%- if server.backend.ovsdb_connection is defined %}
-+[ovs]
-+ovsdb_connection = {{ server.backend.ovsdb_connection }}
-+{%- endif %}
-diff --git a/neutron/gateway.sls b/neutron/gateway.sls
-index 81513d8..7ec9b91 100644
---- a/neutron/gateway.sls
-+++ b/neutron/gateway.sls
-@@ -32,6 +32,7 @@ neutron_gateway_packages:
- /etc/neutron/dhcp_agent.ini:
- file.managed:
- - source: salt://neutron/files/{{ gateway.version }}/dhcp_agent.ini
-+ - template: jinja
- - require:
- - pkg: neutron_gateway_packages
-
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
+++ /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: Charalampos Kominos <Charalampos.Kominos@enea.com>
-Date: Sat, 5 Aug 2017 02:03:01 +0200
-Subject: [PATCH] maas: region: use authorized_keys 1st entry
-
-MaaS custom py modules accepts the "sshprefs" variable via pillar,
-however we want to read it from ~ubuntu/.ssh/authorized_keys.
-
-Bypass the py module and call MaaS CLI directly, passing the first
-authorized key, which should be mcp.rsa.pub.
-
-Signed-off-by: Charalampos Kominos <Charalampos.Kominos@enea.com>
----
-
-diff --git a/maas/region.sls b/maas/region.sls
---- a/maas/region.sls
-+++ b/maas/region.sls
-@@ -242,12 +242,16 @@
- - require:
- - module: maas_config
-
--{%- if region.get('sshprefs', False) %}
- maas_sshprefs:
-- module.run:
-- - name: maas.process_sshprefs
-+# NOTE(armband): maas.process_sshprefs also works, but we need to read the key
-+# from authorized_keys. Should be reworked at some point.
-+# module.run:
-+# - name: maas.process_sshprefs
-+# - require:
-+ cmd.run:
-+ - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && SSH_KEY=$(cat authorized_keys | head -1) && (maas opnfv sshkeys read | grep -q \"$SSH_KEY\" || maas opnfv sshkeys create \"key=$SSH_KEY\")"
-+ - cwd: "/home/ubuntu/.ssh"
- - require:
- - module: maas_config
--{%- endif %}
-
- {%- endif %}
--- /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: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Sun, 25 Feb 2018 03:43:49 +0100
+Subject: [PATCH] network.dpdk: Move ifcfg-br-prv to interfaces.u
+
+Workaround for Upstream-Bug:
+https://github.com/saltstack/salt/issues/40262
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ linux/network/dpdk.sls | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/linux/network/dpdk.sls b/linux/network/dpdk.sls
+index 05fe05f..cc0ff9e 100644
+--- a/linux/network/dpdk.sls
++++ b/linux/network/dpdk.sls
+@@ -128,7 +128,7 @@ linux_network_dpdk_bridge_interface_{{ interface_name }}:
+ After=openvswitch-switch.service
+
+ {# enforce ip address and mtu for ovs dpdk br-prv #}
+-/etc/network/interfaces.d/ifcfg-{{ interface_name }}:
++/etc/network/interfaces.u/ifcfg-{{ interface_name }}:
+ file.managed:
+ - contents: |
+ auto {{ interface_name }}
+@@ -138,6 +138,7 @@ linux_network_dpdk_bridge_interface_{{ interface_name }}:
+ {%- if interface.mtu is defined %}
+ mtu {{ interface.mtu }}
+ {%- endif %}
++ - makedirs: True
+ - require:
+ - file: /etc/systemd/system/ifup@{{ interface_name }}.service.d/override.conf
+
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
--- /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: Michael Polenchuk <mpolenchuk@mirantis.com>
+Date: Mon, 12 Mar 2018 17:43:09 +0400
+Subject: [PATCH] Handle extra environment variables
+
+Change-Id: Ieae46ac65041630759c82238a8a5ce0535c454b2
+
+diff --git a/keystone/files/keystonercv3 b/keystone/files/keystonercv3
+index 1b7f378..984c8a2 100644
+--- a/keystone/files/keystonercv3
++++ b/keystone/files/keystonercv3
+@@ -11,3 +11,6 @@ export OS_REGION_NAME={{ server.region }}
+ export OS_INTERFACE=internal
+ export OS_ENDPOINT_TYPE="internal"
+ export OS_CACERT="{{ server.cacert }}"
++{%- for opt, value in server.get('openrc_extra', {}).iteritems() %}
++{{ "export %s=%s"|format(opt|upper, value) }}
++{%- endfor %}
+++ /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: Michael Polenchuk <mpolenchuk@mirantis.com>
-Date: Thu, 25 Jan 2018 13:22:39 +0400
-Subject: [PATCH] Handle kernel boot options
-
-The 'system.kernel.elevator' and 'system.kernel.isolcpu' options
-have been kept for backward compatibility and should be used in new
-fashion way with system.kernel.boot_options parameter.
-
-Change-Id: I51f7167b8b8946500df2065ee6b02bcf21809bc9
-
-diff --git a/linux/system/kernel.sls b/linux/system/kernel.sls
-index 59b7177..b1c3f3b 100644
---- a/linux/system/kernel.sls
-+++ b/linux/system/kernel.sls
-@@ -3,39 +3,24 @@
-
- {%- if system.kernel is defined %}
-
--{%- if system.kernel.isolcpu is defined or system.kernel.elevator is defined %}
-+{%- set kernel_boot_opts = [] %}
-+{%- do kernel_boot_opts.append('isolcpus=' ~ system.kernel.isolcpu) if system.kernel.isolcpu is defined %}
-+{%- do kernel_boot_opts.append('elevator=' ~ system.kernel.elevator) if system.kernel.elevator is defined %}
-+{%- do kernel_boot_opts.extend(system.kernel.boot_options) if system.kernel.boot_options is defined %}
-
-+{%- if kernel_boot_opts %}
- include:
- - linux.system.grub
-
--{%- if system.kernel.isolcpu is defined %}
--
--/etc/default/grub.d/90-isolcpu.cfg:
-- file.managed:
-- - contents: 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT isolcpus={{ system.kernel.isolcpu }}"'
-- - require:
-- - file: grub_d_directory
--{%- if grains.get('virtual_subtype', None) not in ['Docker', 'LXC'] %}
-- - watch_in:
-- - cmd: grub_update
--
--{%- endif %}
--{%- endif %}
--
--{%- if system.kernel.elevator is defined %}
--
--/etc/default/grub.d/91-elevator.cfg:
-+/etc/default/grub.d/99-custom-settings.cfg:
- file.managed:
-- - contents: 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT elevator={{ system.kernel.elevator }}"'
-+ - contents: 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT {{ kernel_boot_opts|join(' ') }}"'
- - require:
- - file: grub_d_directory
- {%- if grains.get('virtual_subtype', None) not in ['Docker', 'LXC'] %}
- - watch_in:
- - cmd: grub_update
--
--{%- endif %}
- {%- endif %}
--
- {%- endif %}
-
- {%- if system.kernel.version is defined %}
+++ /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: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
-Date: Wed, 3 Jan 2018 00:50:50 +0100
-Subject: [PATCH] controller: Use keystoneclient to check project ID
-
-Port fix from [1] for using the internal network when connecting
-to keystone during project ID validation in nova, instead of
-going through public endpoint (and using SSL).
-
-[1] https://bugs.launchpad.net/nova/+bug/1716344
-
-Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
----
- nova/controller.sls | 10 ++
- ...keystoneclient-to-check-project-ID-exists.patch | 116 +++++++++++++++++++++
- 2 files changed, 126 insertions(+)
- create mode 100644 nova/files/0001-Use-keystoneclient-to-check-project-ID-exists.patch
-
-diff --git a/nova/controller.sls b/nova/controller.sls
-index a55d037..59af945 100644
---- a/nova/controller.sls
-+++ b/nova/controller.sls
-@@ -71,6 +71,16 @@ contrail_nova_packages:
-
- {%- endif %}
-
-+nova-api-openstack-identity-patch:
-+ file.patch:
-+ - name: /usr/lib/python2.7/dist-packages
-+ - source: salt://nova/files/0001-Use-keystoneclient-to-check-project-ID-exists.patch
-+ - hash: False
-+ - options: '-p1'
-+ - unless: 'test -f /var/cache/salt/minion/files/base/nova/files/0001-Use-keystoneclient-to-check-project-ID-exists.patch && cd /usr/lib/python2.7/dist-packages && patch -p1 -R --dry-run /var/cache/salt/minion/files/base/nova/files/0001-Use-keystoneclient-to-check-project-ID-exists.patch'
-+ - require:
-+ - pkg: nova_controller_packages
-+
- /etc/nova/nova.conf:
- file.managed:
- - source: salt://nova/files/{{ controller.version }}/nova-controller.conf.{{ grains.os_family }}
-diff --git a/nova/files/0001-Use-keystoneclient-to-check-project-ID-exists.patch b/nova/files/0001-Use-keystoneclient-to-check-project-ID-exists.patch
-new file mode 100644
-index 0000000..58d027e
---- /dev/null
-+++ b/nova/files/0001-Use-keystoneclient-to-check-project-ID-exists.patch
-@@ -0,0 +1,116 @@
-+From: Christoph Fiehe <fiehe@gmx.de>
-+Date: Wed, 3 Jan 2018 00:11:20 +0100
-+Subject: [PATCH] Use keystoneclient to check project ID exists
-+
-+Based on Christoph's implementation proposed in [1].
-+
-+[1] https://bugs.launchpad.net/nova/+bug/1716344
-+
-+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
-+---
-+ nova/api/openstack/identity.py | 81 ++++++++++++++++--------------------------
-+ 1 file changed, 30 insertions(+), 51 deletions(-)
-+
-+diff --git a/nova/api/openstack/identity.py b/nova/api/openstack/identity.py
-+index 833d3b5..3269cec 100644
-+--- a/nova/api/openstack/identity.py
-++++ b/nova/api/openstack/identity.py
-+@@ -12,16 +12,15 @@
-+ # License for the specific language governing permissions and limitations
-+ # under the License.
-+
-+-from keystoneauth1 import exceptions as kse
-+-from keystoneauth1 import loading as ks_loading
-++from keystoneauth1 import session
-++from keystoneclient import exceptions as kse
-++from keystoneclient.v3 import client
-+ from oslo_log import log as logging
-+ import webob
-+
-+-import nova.conf
-+ from nova.i18n import _
-+
-+
-+-CONF = nova.conf.CONF
-+ LOG = logging.getLogger(__name__)
-+
-+
-+@@ -32,51 +31,31 @@ def verify_project_id(context, project_id):
-+ an HTTPBadRequest is emitted.
-+
-+ """
-+- sess = ks_loading.load_session_from_conf_options(
-+- CONF, 'keystone', auth=context.get_auth_plugin())
-+-
-+- failure = webob.exc.HTTPBadRequest(
-+- explanation=_("Project ID %s is not a valid project.") %
-+- project_id)
-++ auth = context.get_auth_plugin()
-++ sess = session.Session(auth=auth)
-++ keystone = client.Client(session=sess)
-+ try:
-+- resp = sess.get('/projects/%s' % project_id,
-+- endpoint_filter={
-+- 'service_type': 'identity',
-+- 'version': (3, 0)
-+- },
-+- raise_exc=False)
-+- except kse.EndpointNotFound:
-+- LOG.error(
-+- "Keystone identity service version 3.0 was not found. This might "
-+- "be because your endpoint points to the v2.0 versioned endpoint "
-+- "which is not supported. Please fix this.")
-+- raise failure
-+- except kse.ClientException:
-+- # something is wrong, like there isn't a keystone v3 endpoint,
-+- # we'll take the pass and default to everything being ok.
-+- LOG.exception("Unable to contact keystone to verify project_id")
-+- return True
-+-
-+- if resp:
-+- # All is good with this 20x status
-+- return True
-+- elif resp.status_code == 404:
-+- # we got access, and we know this project is not there
-+- raise failure
-+- elif resp.status_code == 403:
-+- # we don't have enough permission to verify this, so default
-+- # to "it's ok".
-+- LOG.info(
-+- "Insufficient permissions for user %(user)s to verify "
-+- "existence of project_id %(pid)s",
-+- {"user": context.user_id, "pid": project_id})
-+- return True
-+- else:
-+- LOG.warning(
-+- "Unexpected response from keystone trying to "
-+- "verify project_id %(pid)s - resp: %(code)s %(content)s",
-+- {"pid": project_id,
-+- "code": resp.status_code,
-+- "content": resp.content})
-+- # realize we did something wrong, but move on with a warning
-+- return True
-++ project = keystone.projects.get(project_id)
-++ except kse.ClientException as e:
-++ if e.http_status == 404:
-++ # we got access, and we know this project is not there
-++ raise webob.exc.HTTPBadRequest(
-++ explanation=_("Project ID %s is not a valid project.") %
-++ project_id)
-++ elif e.http_status == 403:
-++ # we don't have enough permission to verify this, so default
-++ # to "it's ok".
-++ LOG.info(
-++ "Insufficient permissions for user %(user)s to verify "
-++ "existence of project_id %(pid)s",
-++ {"user": context.user_id, "pid": project_id})
-++ return True
-++ else:
-++ LOG.warning(
-++ "Unexpected response from keystone trying to "
-++ "verify project_id %(pid)s - resp: %(code)s %(content)s",
-++ {"pid": project_id,
-++ "code": resp.status_code,
-++ "content": resp.content})
-++ # realize we did something wrong, but move on with a warning
-++ return True
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
One alternative would be to handle this via API calls, for each
node's PXE physical interface, but that overcomplicates things.
+3. MaaS blocksize: For some reason the python library behind tftp forces ip
+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>
diff --git a/maas/region.sls b/maas/region.sls
--- a/maas/region.sls
+++ b/maas/region.sls
-@@ -19,6 +19,36 @@
+@@ -19,6 +19,46 @@
- require:
- pkg: maas_region_packages
+ - require_in:
+ - service: maas_region_services
+
++maas_ip_blksize_force:
++ file.replace:
++ - name: "/usr/lib/python3/dist-packages/tftp/bootstrap.py"
++ - pattern: 'int_blksize = min\(\(int_blksize, MAX_BLOCK_SIZE\)\)'
++ - repl: 'int_blksize = 1464'
++ - require:
++ - pkg: maas_region_packages
++ - require_in:
++ - service: maas_region_services
++
+maas_interface_default_mode_dhcp:
+ file.replace:
+ - name: "/usr/lib/python3/dist-packages/maasserver/models/node.py"
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
If linux:system:proxy:keyserver is not defined, the behavior is
unchanged for backwards compatibility.
+To allow runtime decisions whether the keyserver proxy should be used
+add an additional condition for it to match the first nameserver.
+This allows us to mix virtual nodes with MaaS-provisioned nodes in
+Fuel@OPNFV, while keeping the ext_pillar common.
+
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
---
README.rst | 16 ++++++++++++++++
2 files changed, 56 insertions(+)
diff --git a/linux/system/repo.sls b/linux/system/repo.sls
-index 5d4d059..724db5a 100644
--- a/linux/system/repo.sls
+++ b/linux/system/repo.sls
@@ -96,13 +96,50 @@ linux_repo_{{ name }}_key:
- name: "curl -s {{ repo.key_url }} | apt-key add -"
- watch:
- file: default_repo_list
-+{%- if system.proxy.keyserver is defined %}
++{%- if system.proxy.keyserver is defined and grains['dns']['nameservers'][0] in system.proxy.keyserver.http %}
+ - env:
+ - http_proxy: {{ system.proxy.get('keyserver', {}).get('http', '') }}
+ - https_proxy: {{ system.proxy.get('keyserver', {}).get('https', '') }}
{%- if repo.get('enabled', True) %}
-+{%- if system.proxy.keyserver is defined %}
++{%- if system.proxy.keyserver is defined and grains['dns']['nameservers'][0] in system.proxy.keyserver.http %}
+
+{%- if repo.get('key') %}
+
{%- endif %}
- file: /etc/apt/sources.list.d/{{ name }}.list
- clean_file: {{ repo.clean|default(True) }}
-+ {%- if system.proxy.keyserver is not defined %}
++ {%- if system.proxy.keyserver is not defined or grains['dns']['nameservers'][0] not in system.proxy.keyserver.http %}
{%- if repo.key_id is defined %}
- keyid: {{ repo.key_id }}
{%- endif %}
+++ /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: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
-Date: Sat, 18 Nov 2017 22:03:01 +0200
-Subject: [PATCH] linux.storage.lvm: Disable filter
-
-Due to upstream bug [1], mixing OS-managed LVM volumes with Cinder
-LVM volumes leads to a broken filter value in lvm.conf.
-Temporarily disable the filter (whitelisting all devices, similar
-to no-Cinder use-cases) until upstream bug is fixed.
-
-[1] https://github.com/salt-formulas/salt-formula-linux/issues/127
-
-Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
----
-
-diff --git a/linux/files/lvm.conf b/linux/files/lvm.conf
---- a/linux/files/lvm.conf
-+++ b/linux/files/lvm.conf
-@@ -129,7 +129,8 @@
- # Example
- # Accept every block device:
-
-- filter = [ {%- for vgname, vg in storage.lvm.iteritems() %}{%- if vg.get('enabled', True) %}{%- for dev in vg.devices %}"a|{{ dev }}*|"{%- if not loop.last %},{%- endif %}{%- endfor %}{%- endif %}{%- endfor %}, "r|.*|" ]
-+ # NOTE(opnfv): https://github.com/salt-formulas/salt-formula-linux/issues/127
-+ # filter = [ {%- for vgname, vg in storage.lvm.iteritems() %}{%- if vg.get('enabled', True) %}{%- for dev in vg.devices %}"a|{{ dev }}*|"{%- if not loop.last %},{%- endif %}{%- endfor %}{%- endif %}{%- endfor %}, "r|.*|" ]
-
- # filter = [ "a|.*/|" ]
- # Reject the cdrom drive:
--- /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: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Mon, 8 Jan 2018 05:09:11 +0100
+Subject: [PATCH] routes: Skip network restart on 'noifupdown'
+
+Previously, setting up routes did not allow passing 'require_reboot',
+so each route change would lead to a networking service restart,
+rendering interface configuration options like 'noifupdown' useless.
+Allow disabling network restart per-interface using the existing
+'noifupdown' option.
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ linux/network/interface.sls | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/linux/network/interface.sls b/linux/network/interface.sls
+index 921ceac..6ebc670 100644
+--- a/linux/network/interface.sls
++++ b/linux/network/interface.sls
+@@ -338,6 +338,9 @@ linux_network_{{ interface_name }}_routes:
+ gateway: {{ route.gateway }}
+ {%- endif %}
+ {%- endfor %}
++ {%- if interface.noifupdown is defined %}
++ - require_reboot: {{ interface.noifupdown }}
++ {%- endif %}
+
+ {%- endif %}
+
+++ /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: Michael Polenchuk <mpolenchuk@mirantis.com>
-Date: Mon, 22 Jan 2018 15:22:47 +0400
-Subject: [PATCH] [dpdk] Support ovs bridge tagging
-
-Bring in "tag" option for dpdk/ovs bridges
-to support vlan-tagged vxlan mode.
-
-Change-Id: I7f1f88233694f2c8b968a6cf55584f32879ec042
-
-diff --git a/linux/network/dpdk.sls b/linux/network/dpdk.sls
-index 1ac9e25..05fe05f 100644
---- a/linux/network/dpdk.sls
-+++ b/linux/network/dpdk.sls
-@@ -110,7 +110,7 @@ linux_network_dpdk_bond_mode_{{ interface_name }}:
-
- linux_network_dpdk_bridge_interface_{{ interface_name }}:
- cmd.run:
-- - name: "ovs-vsctl add-br {{ interface_name }} -- set bridge {{ interface_name }} datapath_type=netdev"
-+ - name: "ovs-vsctl add-br {{ interface_name }} -- set bridge {{ interface_name }} datapath_type=netdev{% if interface.tag is defined %} -- set port {{ interface_name }} tag={{ interface.tag }}{% endif %}"
- - unless: "ovs-vsctl show | grep {{ interface_name }}"
-
- {# OVS dpdk needs ip address for vxlan termination on bridge br-prv #}
--- /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: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Sun, 03 Dec 2017 22:03:01 +0200
+Subject: [PATCH] reclass.storage.node: Merge duplicate nodes
+
+Reclass does not support duplicate nodes in top pillar, so merge all
+nodes with the same name into a single node, inheriting classes from
+all instances.
+
+This allows using multiple "system.reclass.storage.system.*_cluster"
+classes for the same node, based on re-using the name (hostname).
+
+NOTE: defaults.merge module does not merge lists (e.g. for classes),
+so handle that case separately.
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+
+diff --git a/reclass/storage/node.sls b/reclass/storage/node.sls
+--- a/reclass/storage/node.sls
++++ b/reclass/storage/node.sls
+@@ -1,7 +1,15 @@
+ {%- from "reclass/map.jinja" import storage with context %}
+ {%- if storage.enabled %}
+
++{%- set storage_by_name = {} %}
+ {%- for node_name, node in storage.get('node', {}).iteritems() %}
++{%- set new_node_name = node.get('name', node_name) %}
++{%- set new_node = storage_by_name.get(new_node_name, {'classes': []}) %}
++{%- do salt['defaults.merge'](node, {'classes': new_node.classes + node.classes}) %}
++{%- do salt['defaults.merge'](storage_by_name, {new_node_name: node}) %}
++{%- endfor %}
++
++{%- for node_name, node in storage_by_name.iteritems() %}
+
+ {%- if node.repeat is defined %}
+
--- /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: Michael Polenchuk <mpolenchuk@mirantis.com>
+Date: Wed, 28 Feb 2018 17:54:28 +0400
+Subject: [PATCH] Set ovs bridges as L3 interfaces
+
+Change-Id: I1e83129cc184cf481bea21d7aa452bf60d9e0499
+
+diff --git a/linux/files/ovs_bridge b/linux/files/ovs_bridge
+new file mode 100644
+index 0000000..c609e45
+--- /dev/null
++++ b/linux/files/ovs_bridge
+@@ -0,0 +1,13 @@
++auto {{ bridge_name }}
++allow-ovs {{ bridge_name }}
++iface {{ bridge_name }} inet static
++ ovs_type OVSBridge
++ address {{ bridge.address }}
++ netmask {{ bridge.netmask }}
++ mtu {{ bridge.get('mtu', '1500') }}
++ {%- if bridge.use_interfaces is defined %}
++ ovs_ports {{ bridge.use_interfaces|join(' ') }}
++ {%- endif %}
++ {%- if bridge.datapath_type is defined %}
++ ovs_extra set Bridge ${IFACE} datapath_type={{ bridge.datapath_type }}
++ {%- endif %}
+diff --git a/linux/files/ovs_port b/linux/files/ovs_port
+index 222ca8e..efb0307 100644
+--- a/linux/files/ovs_port
++++ b/linux/files/ovs_port
+@@ -1,6 +1,9 @@
+ auto {{ port_name }}
+ allow-{{ port.bridge }} {{ port_name }}
+ iface {{ port_name }} inet {{ port.get('proto', 'manual') }}
++{%- if '.' in port_name %}
++vlan-raw-device {{ port_name.split('.')[0] }}
++{%- endif %}
+ ovs_type {{ port.get('ovs_port_type', 'OVSIntPort') }}
+ 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
+--- a/linux/network/interface.sls
++++ b/linux/network/interface.sls
+@@ -91,6 +91,34 @@ add_int_{{ int_name }}_to_ovs_dpdk_bridge_{{ interface_name }}:
+ ovs_bridge_{{ interface_name }}:
+ openvswitch_bridge.present:
+ - name: {{ interface_name }}
++{%- if interface.get('proto', 'manual') == 'static' %}
++ file.managed:
++ - name: /etc/network/interfaces.u/ifcfg-{{ interface_name }}
++ - makedirs: True
++ - source: salt://linux/files/ovs_bridge
++ - defaults:
++ bridge: {{ interface|yaml }}
++ bridge_name: {{ interface_name }}
++ - template: jinja
++
++linux_interfaces_include_{{ interface_name }}:
++ file.prepend:
++ - name: /etc/network/interfaces
++ - text: |
++ source /etc/network/interfaces.d/*
++ # Workaround for Upstream-Bug: https://github.com/saltstack/salt/issues/40262
++ source /etc/network/interfaces.u/*
++
++ovs_bridge_up_{{ interface_name }}:
++ cmd.run:
++ - name: ifup {{ interface_name }}
++ - require:
++ - file: ovs_bridge_{{ interface_name }}
++ - openvswitch_bridge: ovs_bridge_{{ interface_name }}
++ - file: linux_interfaces_final_include
++ - unless:
++ - ip link show {{ interface_name }} | grep -q '\<UP\>'
++{%- endif %}
+
+ {# add linux network interface into OVS bridge #}
+ {%- for int_name, int in network.interface.items() %}
--- /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: Michael Polenchuk <mpolenchuk@mirantis.com>
+Date: Thu, 26 Apr 2018 16:29:02 +0400
+Subject: [PATCH] Set boot source selections
+
+Change-Id: I8dc738b3e6e6f1bfcc1348873f162651aff8bbdf
+
+diff --git a/maas/region.sls b/maas/region.sls
+--- a/maas/region.sls
++++ b/maas/region.sls
+@@ -171,6 +171,13 @@ maas_login_admin:
+ cmd.run:
+ - name: "maas-region apikey --username {{ region.admin.username }} > /var/lib/maas/.maas_credentials"
+
++boot_source_selections:
++ cmd.run:
++ - name: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv boot-source-selection update 1 1 release='{{ region.maas_config.default_distro_series }}'"
++ - require:
++ - cmd: maas_login_admin
++ - unless: "maas login {{ region.admin.username }} http://{{ region.bind.host }}:5240/MAAS/api/2.0 - < /var/lib/maas/.maas_credentials && maas opnfv boot-source-selections read 1 | grep -q {{ region.maas_config.default_distro_series }}"
++
+ maas_force_artifact_sync:
+ cmd.script:
+ - name: salt://maas/files/maas-artifact-sync.sh
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
if [ -r "$1" ]; then
while IFS=': ' read -r p_dest p_file; do
- if [[ ! "${p_dest}" =~ '^#' ]] && [[ "${p_dest}" =~ $2 ]] && \
- ! 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}"
+ 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 < "$1"
+ done < <(grep -vE '^#' "${1}" | grep -E "^.*${2}.*: ")
fi
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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: 0001-opendaylight-formula-neutron.patch
/usr/share/salt-formulas/env: 0002-maas-region-skip-credentials-update.patch
/usr/share/salt-formulas/env: 0003-maas-region-force-artifact-download.patch
-/usr/share/salt-formulas/env: 0004-maas-region-use-authorized_keys-1st-entry.patch
+/usr/share/salt-formulas/env: 0004-network.dpdk-Move-ifcfg-br-prv-to-interfaces.u.patch
/usr/share/salt-formulas/env: 0005-maas-module-Obtain-fabric-ID-from-CIDR.patch
/usr/share/salt-formulas/env: 0006-maas-module-Add-VLAN-DHCP-enable-support.patch
/usr/share/salt-formulas/env: 0007-network.interface-Fix-ifup-OVS-port-with-route.patch
-/usr/share/salt-formulas/env: 0008-Handle-kernel-boot-options.patch
-/usr/share/salt-formulas/env: 0009-controller-Use-keystoneclient-to-check-project-ID.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: 0012-linux.storage.lvm-Disable-filter.patch
-/usr/share/salt-formulas/env: 0013-dpdk-Support-ovs-bridge-tagging.patch
+/usr/share/salt-formulas/env: 0012-routes-Skip-network-restart-on-noifupdown.patch
+/usr/share/salt-formulas/env: 0015-Set-ovs-bridges-as-L3-interfaces.patch
+/usr/share/salt-formulas/env: 0016-Set-boot-source-selections.patch
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
----
-classes:
- - cluster.virtual-mcp-pike-common-noha.openstack_init
+/usr/share/salt-formulas/env: 0014-reclass.storage.node-Merge-duplicate-nodes.patch
+++ /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: Michael Polenchuk <mpolenchuk@mirantis.com>
-Date: Thu, 29 Jun 2017 12:22:42 +0400
-Subject: [PATCH] Bring in opendaylight support
-
-Change-Id: I3efec9a8b586a6c75b1c1635ad2a7024d73d9ad2
----
- neutron/control/opendaylight/cluster.yml | 17 +++++++++++++++++
- neutron/control/opendaylight/single.yml | 15 +++++++++++++++
- neutron/gateway/opendaylight/single.yml | 7 +++++++
- opendaylight/server/single.yml | 2 ++
- reclass/storage/system/opendaylight_control_single.yml | 13 +++++++++++++
- 5 files changed, 54 insertions(+)
- create mode 100644 neutron/control/opendaylight/cluster.yml
- create mode 100644 neutron/control/opendaylight/single.yml
- create mode 100644 neutron/gateway/opendaylight/single.yml
- create mode 100644 opendaylight/server/single.yml
- create mode 100644 reclass/storage/system/opendaylight_control_single.yml
-
-diff --git a/neutron/control/opendaylight/cluster.yml b/neutron/control/opendaylight/cluster.yml
-new file mode 100644
-index 0000000..a32e7ab
---- /dev/null
-+++ b/neutron/control/opendaylight/cluster.yml
-@@ -0,0 +1,17 @@
-+classes:
-+- service.keepalived.cluster.single
-+- service.haproxy.proxy.single
-+- service.neutron.control.cluster
-+- system.neutron.control.openvswitch.cluster
-+parameters:
-+ neutron:
-+ server:
-+ backend:
-+ host: ${_param:opendaylight_service_host}
-+ rest_api_port: 8282
-+ user: admin
-+ password: admin
-+ ovsdb_connection: tcp:127.0.0.1:6639
-+ mechanism:
-+ ovs:
-+ driver: opendaylight_v2
-diff --git a/neutron/control/opendaylight/single.yml b/neutron/control/opendaylight/single.yml
-new file mode 100644
-index 0000000..053f14d
---- /dev/null
-+++ b/neutron/control/opendaylight/single.yml
-@@ -0,0 +1,15 @@
-+classes:
-+- service.neutron.control.single
-+- system.neutron.control.openvswitch.single
-+parameters:
-+ neutron:
-+ server:
-+ backend:
-+ host: ${_param:opendaylight_service_host}
-+ rest_api_port: 8282
-+ user: admin
-+ password: admin
-+ ovsdb_connection: tcp:127.0.0.1:6639
-+ mechanism:
-+ ovs:
-+ driver: opendaylight_v2
-diff --git a/neutron/gateway/opendaylight/single.yml b/neutron/gateway/opendaylight/single.yml
-new file mode 100644
-index 0000000..2169001
---- /dev/null
-+++ b/neutron/gateway/opendaylight/single.yml
-@@ -0,0 +1,7 @@
-+classes:
-+- service.neutron.gateway.single
-+parameters:
-+ neutron:
-+ gateway:
-+ backend:
-+ ovsdb_connection: tcp:127.0.0.1:6639
-diff --git a/opendaylight/server/single.yml b/opendaylight/server/single.yml
-new file mode 100644
-index 0000000..3d11872
---- /dev/null
-+++ b/opendaylight/server/single.yml
-@@ -0,0 +1,2 @@
-+classes:
-+- service.opendaylight.server.single
-diff --git a/reclass/storage/system/opendaylight_control_single.yml b/reclass/storage/system/opendaylight_control_single.yml
-new file mode 100644
-index 0000000..ad809f5
---- /dev/null
-+++ b/reclass/storage/system/opendaylight_control_single.yml
-@@ -0,0 +1,13 @@
-+parameters:
-+ _param:
-+ opendaylight_control_hostname: odl01
-+ reclass:
-+ storage:
-+ node:
-+ opendaylight_control_node01:
-+ name: ${_param:opendaylight_control_hostname}
-+ domain: ${_param:cluster_domain}
-+ params:
-+ salt_master_host: ${_param:reclass_config_master}
-+ linux_system_codename: ${_param:linux_system_codename}
-+ single_address: ${_param:opendaylight_service_host}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/keystone/client/single.yml b/keystone/client/single.yml
-index ebf5b5f..8007710 100644
+index a79ed7ec..86b4e09e 100644
--- a/keystone/client/single.yml
+++ b/keystone/client/single.yml
@@ -4,7 +4,7 @@ classes:
+- system.keystone.client.service.keystone3
- system.keystone.client.service.neutron
parameters:
- linux:
+ _param:
+++ /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: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
-Date: Sun, 10 Dec 2017 21:58:52 +0100
-Subject: [PATCH] mongodb: Parameterize cluster hostnames
-
-Replace mdb{01,02,03} with reclass params, similar to prev commit.
-
-Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
----
- mongodb/server/cluster.yml | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/mongodb/server/cluster.yml b/mongodb/server/cluster.yml
-index f3c16d6..1d1e397 100644
---- a/mongodb/server/cluster.yml
-+++ b/mongodb/server/cluster.yml
-@@ -3,9 +3,9 @@ classes:
- parameters:
- _param:
- mongodb_server_replica_set: mongodb
-- mongodb_master: mdb01
-+ mongodb_master: ${_param:openstack_telemetry_node01_hostname}
- mongodb_server_members:
-- - host: mdb01
-+ - host: ${_param:openstack_telemetry_node01_hostname}
- priority: 2
-- - host: mdb02
-- - host: mdb03
-+ - host: ${_param:openstack_telemetry_node02_hostname}
-+ - host: ${_param:openstack_telemetry_node03_hostname}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
--- /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: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Fri, 8 Dec 2017 20:30:46 +0100
+Subject: [PATCH] salt-master-init.sh: Apply OPNFV Fuel patches
+
+Some of Fuel@OPNFV patches need to be applied before the reclass
+storage.node state is ran for Salt Master, i.e. between installing
+salt-formula-* packages and configuring the Salt Master salt services.
+
+JIRA: FUEL-310
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ salt-master-init.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/salt-master-init.sh b/salt-master-init.sh
+index 343324c..a4ec138 100755
+--- a/salt-master-init.sh
++++ b/salt-master-init.sh
+@@ -284,6 +284,7 @@ options
+ system_config
+
+ saltmaster_bootstrap &&\
++ /root/fuel/mcp/patches/patch.sh /root/fuel/mcp/patches/patches_init.list formulas &&\
+ saltmaster_init &&\
+
+ verify_salt_minions
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-: Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+: 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
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/salt-master-init.sh b/salt-master-init.sh
-index 343324c..48a05b9 100755
+index a4ec138..db90a22 100755
--- a/salt-master-init.sh
+++ b/salt-master-init.sh
@@ -24,6 +24,12 @@ options() {
**/*_pdf.yml
+mcp-pike-common-ha/infra/init.yml
+mcp-pike-common-ha/openstack_control.yml
+mcp-pike-common-ha/openstack_init.yml
+mcp-pike-common-ha/openstack_interface_vcp_biport.yml
+mcp-pike-common-ha/openstack_interface_vcp_triport.yml
+mcp-pike-common-ha/openstack_proxy.yml
+mcp-pike-ovs-ha/infra/init_vcp.yml
+mcp-pike-ovs-ha/infra/kvm.yml
+mcp-pike-ovs-dpdk-ha/infra/init_vcp.yml
+mcp-pike-ovs-dpdk-ha/infra/kvm.yml
+mcp-pike-odl-ha/infra/init_vcp.yml
+mcp-pike-odl-ha/infra/kvm.yml
+mcp-pike-ovn-ha/infra/init_vcp.yml
+mcp-pike-ovn-ha/infra/kvm.yml
+mcp-pike-odl-ha/opendaylight/control.yml
+mcp-pike-odl-ha/openstack/init.yml
Overview
--------
-#. Common classes (baremetal + virtual)
+#. Common classes (HA + noHA)
- all-mcp-arch-common
-#. Common classes (specific to either baremetal or virtual deploys)
+#. Common classes (HA baremetal/virtual, noHA virtual)
- - baremetal-mcp-<release>-common-ha
- - virtual-mcp-<release>-common-noha
+ - mcp-<release>-common-ha
+ - mcp-<release>-common-noha
#. Cluster specific classes
- - baremetal-mcp-<release>-*-{ha,noha}
- - virtual-mcp-<release>-*-{ha,noha}
+ - mcp-<release>-*-{ha,noha}
+ - mcp-<release>-*-{ha,noha}
---
parameters:
_param:
+ salt_control_trusty_image: '' # Dummy value, to keep reclass 1.5.2 happy
salt_control_xenial_image: salt://salt/files/control/images/base_image_opnfv_fuel_vcp.img
# VMs spawned on Foundation Node / Jump Host net ifaces (max 4)
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+---
+parameters:
+ reclass:
+ storage:
+ node:
+ # NOTE: Until SDF is in place, assume all computes are identical
+ openstack_compute_node01: &openstack_compute_node01
+ params:
+{#- No partial defaults, all or nothing. Defaults tuned for lf-pod2. #}
+{%- if conf.idf.fuel.reclass is defined %}
+{%- if conf.idf.fuel.reclass.node[nm.cmp001.idx].compute_params.dpdk is defined %}
+{#- Can't dump json here due to dpdk0_* below, explicitly create yaml #}
+{%- set _dpdk = conf.idf.fuel.reclass.node[nm.cmp001.idx].compute_params.dpdk %}
+{%- for _i in _dpdk %}
+ {{ _i }}: '"{{ _dpdk[_i] }}"'
+{%- endfor %}
+{%- endif %}
+{%- else %}
+ compute_hugepages_size: 2M
+ compute_hugepages_count: 8192
+ compute_hugepages_mount: /mnt/hugepages_2M
+ compute_kernel_isolcpu: 2,3,10,11
+ compute_dpdk_driver: uio
+ compute_ovs_pmd_cpu_mask: '"0xc04"'
+ compute_ovs_dpdk_socket_mem: '"2048,2048"'
+ compute_ovs_dpdk_lcore_mask: '"0x8"'
+ compute_ovs_memory_channels: '"2"'
+ dpdk0_driver: igb_uio
+ dpdk0_n_rxq: 2
+{%- endif %}
+ dpdk0_name: {{ nm.cmp001.nic_private }}
+ dpdk0_pci: '"{{ nm.cmp001.bus_private }}"'
+ openstack_compute_node02:
+ <<: *openstack_compute_node01
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+---
+parameters:
+ reclass:
+ storage:
+ node:
+ # NOTE: Until SDF is in place, assume all computes are identical
+ openstack_compute_node01: &openstack_compute_node01
+ params:
+{#- No partial defaults, all or nothing. Defaults tuned for lf-pod2. #}
+{%- if conf.idf.fuel.reclass is defined %}
+{%- if conf.idf.fuel.reclass.node[nm.cmp001.idx].compute_params.common is defined %}
+{%- set _common = conf.idf.fuel.reclass.node[nm.cmp001.idx].compute_params.common %}
+{%- for _i in _common %}
+ {{ _i }}: '"{{ _common[_i] }}"'
+{%- endfor %}
+{%- else %}
+ dummy_value: ~
+{%- endif %}
+{%- else %}
+ compute_hugepages_size: 1G
+ compute_hugepages_count: 16
+ compute_hugepages_mount: /mnt/hugepages_1G
+{%- endif %}
+ openstack_compute_node02:
+ <<: *openstack_compute_node01
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
+++ /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
-##############################################################################
----
-parameters:
- _param:
-
- opnfv_infra_config_address: 10.167.4.100
- opnfv_infra_config_pxe_address: 192.168.11.2
- opnfv_infra_maas_node01_address: 10.167.4.3
- opnfv_infra_maas_node01_deploy_address: 192.168.11.3
- opnfv_infra_kvm_address: 10.167.4.140
- opnfv_infra_kvm_node01_address: 10.167.4.141
- opnfv_infra_kvm_node02_address: 10.167.4.142
- opnfv_infra_kvm_node03_address: 10.167.4.143
-
- opnfv_infra_maas_pxe_network_address: 192.168.11.0
- opnfv_infra_maas_pxe_start_address: 192.168.11.4
- opnfv_infra_maas_pxe_end_address: 192.168.11.100
-
- opnfv_openstack_gateway_node01_address: 10.167.4.124
- opnfv_openstack_gateway_node02_address: 10.167.4.125
- opnfv_openstack_gateway_node03_address: 10.167.4.126
- opnfv_openstack_gateway_node01_tenant_address: 10.1.0.6
- opnfv_openstack_gateway_node02_tenant_address: 10.1.0.7
- opnfv_openstack_gateway_node03_tenant_address: 10.1.0.9
- opnfv_openstack_proxy_address: 172.30.10.103
- opnfv_openstack_proxy_node01_address: 172.30.10.104
- opnfv_openstack_proxy_node02_address: 172.30.10.105
- opnfv_openstack_proxy_control_address: 10.167.4.103
- opnfv_openstack_proxy_node01_control_address: 10.167.4.104
- opnfv_openstack_proxy_node02_control_address: 10.167.4.105
- opnfv_openstack_control_address: 10.167.4.10
- opnfv_openstack_control_node01_address: 10.167.4.11
- opnfv_openstack_control_node02_address: 10.167.4.12
- opnfv_openstack_control_node03_address: 10.167.4.13
- opnfv_openstack_database_address: 10.167.4.50
- opnfv_openstack_database_node01_address: 10.167.4.51
- opnfv_openstack_database_node02_address: 10.167.4.52
- opnfv_openstack_database_node03_address: 10.167.4.53
- opnfv_openstack_message_queue_address: 10.167.4.40
- opnfv_openstack_message_queue_node01_address: 10.167.4.41
- opnfv_openstack_message_queue_node02_address: 10.167.4.42
- opnfv_openstack_message_queue_node03_address: 10.167.4.43
- opnfv_openstack_telemetry_address: 10.167.4.75
- opnfv_openstack_telemetry_node01_address: 10.167.4.76
- opnfv_openstack_telemetry_node02_address: 10.167.4.77
- opnfv_openstack_telemetry_node03_address: 10.167.4.78
- opnfv_openstack_compute_node01_single_address: 10.167.4.101
- opnfv_openstack_compute_node02_single_address: 10.167.4.102
- opnfv_openstack_compute_node03_single_address: 10.167.4.103
- opnfv_openstack_compute_node01_control_address: 10.167.4.101
- opnfv_openstack_compute_node02_control_address: 10.167.4.102
- opnfv_openstack_compute_node03_control_address: 10.167.4.103
- opnfv_openstack_compute_node01_tenant_address: 10.1.0.101
- opnfv_openstack_compute_node02_tenant_address: 10.1.0.102
- opnfv_openstack_compute_node03_tenant_address: 10.1.0.103
- opnfv_openstack_compute_node01_external_address: 172.30.10.101
- opnfv_openstack_compute_node02_external_address: 172.30.10.102
-
- opnfv_opendaylight_server_node01_single_address: 10.167.4.111
-
- opnfv_net_public: 172.30.10.0/24
- opnfv_net_public_mask: 255.255.255.0
- opnfv_net_public_gw: 172.30.10.1
- opnfv_net_public_pool_start: 172.30.10.80
- opnfv_net_public_pool_end: 172.30.10.100
- opnfv_name_servers: ['8.8.8.8', '8.8.4.4']
- opnfv_dns_server01: '8.8.8.8'
-
- opnfv_net_mgmt_vlan: 300
- opnfv_net_tenant_vlan: 1000
-
- opnfv_maas_node01_architecture: 'amd64/generic'
- opnfv_maas_node01_power_address: 172.30.8.75
- opnfv_maas_node01_power_type: ipmi
- opnfv_maas_node01_power_user: admin
- opnfv_maas_node01_power_password: octopus
- opnfv_maas_node01_interface_mac: '00:25:b5:a0:00:2a'
-
- opnfv_maas_node02_architecture: 'amd64/generic'
- opnfv_maas_node02_power_address: 172.30.8.65
- opnfv_maas_node02_power_type: ipmi
- opnfv_maas_node02_power_user: admin
- opnfv_maas_node02_power_password: octopus
- opnfv_maas_node02_interface_mac: '00:25:b5:a0:00:3a'
-
- opnfv_maas_node03_architecture: 'amd64/generic'
- opnfv_maas_node03_power_address: 172.30.8.74
- opnfv_maas_node03_power_type: ipmi
- opnfv_maas_node03_power_user: admin
- opnfv_maas_node03_power_password: octopus
- opnfv_maas_node03_interface_mac: '00:25:b5:a0:00:4a'
-
- opnfv_maas_node04_architecture: 'amd64/generic'
- opnfv_maas_node04_power_address: 172.30.8.73
- opnfv_maas_node04_power_type: ipmi
- opnfv_maas_node04_power_user: admin
- opnfv_maas_node04_power_password: octopus
- opnfv_maas_node04_interface_mac: '00:25:b5:a0:00:5a'
-
- opnfv_maas_node05_architecture: 'amd64/generic'
- opnfv_maas_node05_power_address: 172.30.8.72
- opnfv_maas_node05_power_type: ipmi
- opnfv_maas_node05_power_user: admin
- opnfv_maas_node05_power_password: octopus
- opnfv_maas_node05_interface_mac: '00:25:b5:a0:00:6a'
+++ /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
-##############################################################################
----
-parameters:
- _param:
- opnfv_salt_master_ip: 10.20.0.2
- opnfv_maas_mcp_address: 10.20.0.3
- opnfv_net_mcpcontrol: 10.20.0.0
- opnfv_net_mcpcontrol_mask: 255.255.255.0
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{#- conf.MCPCONTROL_NET & co are mandatory, defaults are set via globals.sh #}
parameters:
_param:
- # NOTE: This file is overwritten at runtime by parsing the PDF.
- opnfv_use_pod_descriptor_file: true
+ opnfv_salt_master_ip: {{ conf.SALT_MASTER }}
+ opnfv_maas_mcp_address: {{ conf.MAAS_IP }}
+ opnfv_net_mcpcontrol: {{ conf.MCPCONTROL_NET }}
+ opnfv_net_mcpcontrol_mask: {{ conf.MCPCONTROL_PREFIX | netmask }}
+++ /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
-##############################################################################
----
-parameters:
- _param:
- opnfv_salt_master_ip: ${SALT_MASTER}
- opnfv_maas_mcp_address: ${MAAS_IP}
- opnfv_net_mcpcontrol: ${SALT_MASTER%.*}.0
- opnfv_net_mcpcontrol_mask: 255.255.255.0
---
parameters:
_param:
+ salt_control_trusty_image: '' # Dummy value, to keep reclass 1.5.2 happy
salt_control_xenial_image: salt://salt/files/control/images/base_image_opnfv_fuel_vcp.img
# VMs spawned on Foundation Node / Jump Host net ifaces (max 4)
+++ /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
-##############################################################################
-{# NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
-{%- if conf.idf is defined and conf.idf.net_config is defined -%}
- {#- NOTE: Currently, we assume all cluster nodes use the same mapping -#}
-
- {#- Determine interface index for each network (plumbing vars) -#}
- {%- set idx_admin = conf['idf']['net_config']['admin']['interface'] -%}
- {%- set idx_mgmt = conf['idf']['net_config']['mgmt']['interface'] -%}
- {%- set idx_private = conf['idf']['net_config']['private']['interface'] -%}
- {%- set idx_public = conf['idf']['net_config']['public']['interface'] -%}
-
- {#- Physical interface OS name for each network (e.g. em1, enp1s0f1) -#}
- {%- set node = conf['idf']['fuel']['network']['node'][0] -%}
- {%- set nic_admin = node['interfaces'][idx_admin] -%}
- {%- set nic_mgmt = node['interfaces'][idx_mgmt] -%}
- {%- set nic_private = node['interfaces'][idx_private] -%}
- {%- set nic_public = node['interfaces'][idx_public] -%}
-
- {#- PCI addresses (only for DPDK on private) -#}
- {%- set bus_private = node['busaddr'][idx_private] -%}
-
- {#- VLAN for each network (only untagged 'admin' is supported by MaaS config!) -#}
- {%- set vlan_admin = conf['idf']['net_config']['admin']['vlan'] -%}
- {%- set vlan_mgmt = conf['idf']['net_config']['mgmt']['vlan'] -%}
- {%- set vlan_private = conf['idf']['net_config']['private']['vlan'] -%}
- {%- set vlan_public = conf['idf']['net_config']['public']['vlan'] -%}
-{%- else -%}
- {%- set nic_admin = 'enp6s0' -%}
- {%- set nic_mgmt = 'enp6s0' -%}
- {%- set nic_private = None -%}
- {%- set nic_public = None -%}
- {%- set vlan_admin = 'native' -%}
- {%- set vlan_mgmt = '300' -%}
- {%- set vlan_private = '1000' -%}
-{%- endif -%}
-
-{#- Filter-out NIC duplicates by constructing a dict (used NICs only) -#}
-{%- set nics = { nic_admin: True, nic_mgmt: True, nic_public: True } -%}
-
-{%- set vlans = { vlan_admin: nic_admin, vlan_mgmt: nic_mgmt, vlan_public: nic_public } -%}
----
-parameters:
- linux:
- network:
- interface:
-{%- for nic in nics %}
- {{ nic }}:
- enabled: true
- type: eth
- proto: manual
- address: 0.0.0.0
- netmask: 255.255.255.0
- name: {{ nic }}
- noifupdown: true
-{%- endfor %}
-
-{%- for vlan in vlans %}
- {%- if vlan and vlan != 'native' %}
- {{ vlans[vlan] }}.{{ vlan }}:
- enabled: true
- proto: manual
- type: vlan
- name: {{ vlans[vlan] }}.{{ vlan }}
- use_interfaces:
- - {{ vlans[vlan] }}
- {%- endif %}
-{%- endfor %}
-
- br-mgmt:
- enabled: true
- proto: dhcp
- type: bridge
- use_interfaces:
- - {{ nic_admin }}{% if vlan_admin and vlan_admin != 'native' %}.{{ vlan_admin }}{% endif %}
- noifupdown: true
- br-ctl:
- enabled: true
- type: bridge
- proto: static
- address: ${_param:single_address}
- netmask: 255.255.255.0
- use_interfaces:
- - {{ nic_mgmt }}{% if vlan_mgmt and vlan_mgmt != 'native' %}.{{ vlan_mgmt }}{% endif %}
- br-ex:
- enabled: true
- proto: manual
- address: 0.0.0.0
- netmask: ${_param:opnfv_net_public_mask}
- type: bridge
- use_interfaces:
- - {{ nic_public }}{% if vlan_public and vlan_public != 'native' %}.{{ vlan_public }}{% endif %}
- noifupdown: 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
-##############################################################################
-{# NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
-{%- if conf.idf is defined and conf.idf.net_config is defined -%}
- {#- NOTE: Currently, we assume all cluster nodes use the same mapping -#}
-
- {#- Determine interface index for each network (plumbing vars) -#}
- {%- set idx_admin = conf['idf']['net_config']['admin']['interface'] -%}
- {%- set idx_mgmt = conf['idf']['net_config']['mgmt']['interface'] -%}
- {%- set idx_private = conf['idf']['net_config']['private']['interface'] -%}
- {%- set idx_public = conf['idf']['net_config']['public']['interface'] -%}
-
- {#- Physical interface OS name for each network (e.g. em1, enp1s0f1) -#}
- {%- set iface_names = conf['idf']['fuel']['network']['node'][3]['interfaces'] -%}
- {%- set nic_admin = iface_names[idx_admin] -%}
- {%- set nic_mgmt = iface_names[idx_mgmt] -%}
- {%- set nic_private = iface_names[idx_private] -%}
- {%- set nic_public = iface_names[idx_public] -%}
-
- {#- VLAN for each network (only untagged 'admin' is supported by MaaS config!) -#}
- {%- set vlan_admin = conf['idf']['net_config']['admin']['vlan'] -%}
- {%- set vlan_mgmt = conf['idf']['net_config']['mgmt']['vlan'] -%}
- {%- set vlan_private = conf['idf']['net_config']['private']['vlan'] -%}
- {%- set vlan_public = conf['idf']['net_config']['public']['vlan'] -%}
-{%- else -%}
- {%- set nic_admin = 'enp6s0' -%}
- {%- set nic_mgmt = 'enp6s0' -%}
- {%- set nic_private = None -%}
- {%- set nic_public = None -%}
- {%- set vlan_admin = 'native' -%}
- {%- set vlan_mgmt = '300' -%}
- {%- set vlan_private = '1000' -%}
-{%- endif -%}
-
-{#- Filter-out NIC duplicates by constructing a dict (used NICs only) -#}
-{%- set nics = { nic_admin: True, nic_mgmt: True } -%}
-
-{%- set vlans = { vlan_admin: nic_admin, vlan_mgmt: nic_mgmt } -%}
----
-parameters:
- linux:
- network:
- bridge: openvswitch
- interface:
-{%- for nic in nics %}
- {%- if nic == nic_admin %}
- {{ nic }}:
- enabled: true
- type: eth
- proto: dhcp
- name: {{ nic }}
- {%- else %}
- {{ nic }}:
- enabled: true
- type: eth
- proto: manual
- address: 0.0.0.0
- {%- if nic == nic_public %}
- netmask: ${_param:opnfv_net_public_mask}
- {%- else %}
- netmask: 255.255.255.0
- {%- endif %}
- mtu: ${_param:interface_mtu}
- name: {{ nic }}
- {%- endif %}
-{%- endfor %}
-
-{%- for vlan in vlans %}
- {%- if vlan and vlan != 'native' %}
- {{ vlans[vlan] }}.{{ vlan }}:
- enabled: true
- proto: manual
- type: vlan
- name: {{ vlans[vlan] }}.{{ vlan }}
- use_interfaces:
- - {{ vlans[vlan] }}
- {%- endif %}
-{%- endfor %}
-
- br-ctl:
- enabled: true
- type: bridge
- proto: static
- address: ${_param:single_address}
- netmask: 255.255.255.0
- use_interfaces:
- - {{ nic_mgmt }}{% if vlan_mgmt and vlan_mgmt != 'native' %}.{{ vlan_mgmt }}{% endif %}
- br-floating:
- enabled: true
- type: ovs_bridge
- mtu: ${_param:interface_mtu}
- br-ex:
- enabled: true
- type: ovs_port
- bridge: br-floating
- proto: static
- {%- if vlan_public and vlan_public != 'native' %}
- ovs_options: tag={{ vlan_public }}
- {%- endif %}
- address: ${_param:external_address}
- netmask: 255.255.255.0
- route:
- public:
- address: 0.0.0.0
- netmask: 0.0.0.0
- gateway: ${_param:opnfv_net_public_gw}
- {{ nic_public }}:
- enabled: true
- proto: manual
- ovs_port_type: OVSPort
- type: ovs_port
- ovs_bridge: br-floating
- bridge: br-floating
+++ /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
-##############################################################################
----
-classes:
- - system.nginx.server.single
- - system.nginx.server.proxy.openstack_api
- - system.nginx.server.proxy.openstack_vnc
- - system.nginx.server.proxy.openstack_web
- - system.nginx.server.proxy.openstack.aodh
- - system.nginx.server.proxy.openstack.ceilometer
- - system.horizon.server.single
- - system.salt.minion.cert.proxy
- - system.sphinx.server.doc.reclass
- - service.keepalived.cluster.single
- - system.keepalived.cluster.instance.openstack_web_public_vip
-parameters:
- _param:
- cluster_vip_address: ${_param:openstack_proxy_address}
- keepalived_openstack_web_public_vip_address: ${_param:cluster_vip_address}
- keepalived_openstack_web_public_vip_interface: ${_param:single_nic}
- keepalived_vip_address: ${_param:openstack_proxy_control_address}
- keepalived_vip_interface: ${_param:control_nic}
- keepalived_vip_virtual_router_id: 240
- nginx_proxy_ssl:
- enabled: true
- authority: ${_param:salt_minion_ca_authority}
- engine: salt
- mode: secure
- salt_minion_ca_host: cfg01.${_param:cluster_domain}
- linux:
- system:
- package:
- libapache2-mod-wsgi:
- version: latest
- salt:
- minion:
- cert:
- proxy:
- alternative_names: "IP:${_param:openstack_proxy_address}"
- key_usage: 'digitalSignature, keyEncipherment'
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_compute
- - cluster.baremetal-mcp-pike-odl-ha.openstack.compute_pdf
- - cluster.baremetal-mcp-pike-odl-ha.infra
- - system.neutron.gateway.opendaylight.single
-parameters:
- _param:
- neutron_agents:
- - neutron-dhcp-agent
- - neutron-metadata-agent
- opendaylight:
- client:
- ovsdb_server_iface: ptcp:6639:127.0.0.1
- ovsdb_odl_iface: tcp:${_param:opendaylight_service_host}:6640
- tunnel_ip: ${_param:tenant_address}
- provider_mappings: physnet1:br-floating
- neutron:
- gateway:
- agent_mode: ${_param:neutron_gateway_agent_mode}
- pkgs: ${_param:neutron_agents}
- services: ${_param:neutron_agents}
- backend:
- router: ${_param:opendaylight_router}
+++ /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
-##############################################################################
-{# NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
-{%- if conf.idf is defined and conf.idf.net_config is defined -%}
- {#- NOTE: Currently, we assume all cluster nodes use the same mapping -#}
-
- {#- Determine interface index for each network (plumbing vars) -#}
- {%- set idx_admin = conf['idf']['net_config']['admin']['interface'] -%}
- {%- set idx_mgmt = conf['idf']['net_config']['mgmt']['interface'] -%}
- {%- set idx_private = conf['idf']['net_config']['private']['interface'] -%}
- {%- set idx_public = conf['idf']['net_config']['public']['interface'] -%}
-
- {#- Physical interface OS name for each network (e.g. em1, enp1s0f1) -#}
- {%- set node = conf['idf']['fuel']['network']['node'][1] -%}
- {%- set nic_admin = node['interfaces'][idx_admin] -%}
- {%- set nic_mgmt = node['interfaces'][idx_mgmt] -%}
- {%- set nic_private = node['interfaces'][idx_private] -%}
- {%- set nic_public = node['interfaces'][idx_public] -%}
-
- {#- PCI addresses (only for DPDK on private) -#}
- {%- set bus_private = node['busaddr'][idx_private] -%}
-
- {#- VLAN for each network (only untagged 'admin' is supported by MaaS config!) -#}
- {%- set vlan_admin = conf['idf']['net_config']['admin']['vlan'] -%}
- {%- set vlan_mgmt = conf['idf']['net_config']['mgmt']['vlan'] -%}
- {%- set vlan_private = conf['idf']['net_config']['private']['vlan'] -%}
- {%- set vlan_public = conf['idf']['net_config']['public']['vlan'] -%}
-{%- else -%}
- {%- set nic_admin = 'enp6s0' -%}
- {%- set nic_mgmt = 'enp6s0' -%}
- {%- set nic_private = None -%}
- {%- set nic_public = None -%}
- {%- set vlan_admin = 'native' -%}
- {%- set vlan_mgmt = '300' -%}
- {%- set vlan_private = '1000' -%}
-{%- endif -%}
-
-{#- Filter-out NIC duplicates by constructing a dict (used NICs only) -#}
-{%- set nics = { nic_private: True } -%}
-
-{%- set vlans = { vlan_private: nic_private } -%}
----
-parameters:
- linux:
- network:
- interface:
-{%- for nic in nics %}
- {{ nic }}:
- enabled: true
- type: eth
- {%- if nic == nic_admin %}
- proto: dhcp
- {%- else %}
- proto: manual
- {%- endif %}
- name: {{ nic }}
-{%- endfor %}
-
-{%- for vlan in vlans %}
- {%- if vlan and vlan != 'native' %}
- {{ vlans[vlan] }}.{{ vlan }}:
- enabled: true
- proto: manual
- type: vlan
- name: {{ vlans[vlan] }}.{{ vlan }}
- use_interfaces:
- - {{ vlans[vlan] }}
- {%- endif %}
-{%- endfor %}
-
- br-mesh:
- enabled: true
- type: bridge
- address: ${_param:tenant_address}
- netmask: 255.255.255.0
- mtu: 1500
- use_interfaces:
- - {{ nic_private }}{% if vlan_private and vlan_private != 'native' %}.{{ vlan_private }}{% endif %}
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_database
- - cluster.baremetal-mcp-pike-odl-ha
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_telemetry
- - cluster.baremetal-mcp-pike-odl-ha.infra
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.config
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra.config_pdf
+++ /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
-##############################################################################
-{# NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
-{%- if conf.idf is defined and conf.idf.net_config is defined -%}
- {#- NOTE: Currently, we assume all cluster nodes use the same mapping -#}
-
- {#- Determine interface index for each network (plumbing vars) -#}
- {%- set idx_admin = conf['idf']['net_config']['admin']['interface'] -%}
- {%- set idx_mgmt = conf['idf']['net_config']['mgmt']['interface'] -%}
- {%- set idx_private = conf['idf']['net_config']['private']['interface'] -%}
- {%- set idx_public = conf['idf']['net_config']['public']['interface'] -%}
-
- {#- Physical interface OS name for each network (e.g. em1, enp1s0f1) -#}
- {%- set node = conf['idf']['fuel']['network']['node'][0] -%}
- {%- set nic_admin = node['interfaces'][idx_admin] -%}
- {%- set nic_mgmt = node['interfaces'][idx_mgmt] -%}
- {%- set nic_private = node['interfaces'][idx_private] -%}
- {%- set nic_public = node['interfaces'][idx_public] -%}
-
- {#- PCI addresses (only for DPDK on private) -#}
- {%- set bus_private = node['busaddr'][idx_private] -%}
-
- {#- VLAN for each network (only untagged 'admin' is supported by MaaS config!) -#}
- {%- set vlan_admin = conf['idf']['net_config']['admin']['vlan'] -%}
- {%- set vlan_mgmt = conf['idf']['net_config']['mgmt']['vlan'] -%}
- {%- set vlan_private = conf['idf']['net_config']['private']['vlan'] -%}
- {%- set vlan_public = conf['idf']['net_config']['public']['vlan'] -%}
-{%- else -%}
- {%- set nic_admin = 'enp6s0' -%}
- {%- set nic_mgmt = 'enp6s0' -%}
- {%- set nic_private = None -%}
- {%- set nic_public = None -%}
- {%- set vlan_admin = 'native' -%}
- {%- set vlan_mgmt = '300' -%}
- {%- set vlan_private = '1000' -%}
-{%- endif -%}
----
-parameters:
- reclass:
- storage:
- node:
- openstack_compute_node01:
- params:
- dpdk0_name: {{ nic_private }}
- dpdk0_pci: '"{{ bus_private }}"'
- openstack_compute_node02:
- params:
- dpdk0_name: {{ nic_private }}
- dpdk0_pci: '"{{ bus_private }}"'
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.kvm
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.maas
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
+++ /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
-##############################################################################
-{%- if conf.idf is defined and conf.idf.net_config is defined -%}
- {%- set vlan_private = conf['idf']['net_config']['private']['vlan'] -%}
-{%- else -%}
- {%- set vlan_private = '1000' -%}
-{%- endif -%}
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_compute
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
- - system.neutron.compute.nfv.dpdk
-parameters:
- neutron:
- gateway:
- dpdk: 'True'
- vhost_socket_dir: ${_param:compute_ovs_vhost_socket_dir}
- backend:
- tenant_vlan_range: ${_param:neutron_tenant_vlan_range}
- nova:
- compute:
- libvirt_service: libvirtd
- libvirt_bin: /etc/default/libvirtd
- linux:
- network:
- interface:
- dpdk0:
- name: ${_param:dpdk0_name}
- pci: ${_param:dpdk0_pci}
- driver: igb_uio
- enabled: true
- bridge: br-prv
- type: dpdk_ovs_port
- n_rxq: 2
- br-prv:
- enabled: true
- type: dpdk_ovs_bridge
- address: ${_param:tenant_address}
- netmask: 255.255.255.0
- {%- if vlan_private and vlan_private != 'native' %}
- tag: {{ vlan_private }}
- {%- endif %}
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_database
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_init
-parameters:
- _param:
- neutron_tenant_network_types: "flat,vxlan"
- neutron_tenant_vlan_range: "1000:1030"
- nova_cpu_pinning: "5-7,13-15"
- compute_hugepages_size: 2M
- compute_hugepages_count: 8192
- compute_hugepages_mount: /mnt/hugepages_2M
- compute_kernel_isolcpu: 2,3,5,6,7,10,11,13,14,15
- compute_dpdk_driver: uio
- compute_ovs_pmd_cpu_mask: "0xc04"
- compute_ovs_dpdk_socket_mem: "2048,2048"
- compute_ovs_dpdk_lcore_mask: "0x8"
- compute_ovs_memory_channels: "2"
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_triport
- - cluster.baremetal-mcp-pike-common-ha.openstack_proxy
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_telemetry
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.kvm
- - cluster.baremetal-mcp-pike-ovs-ha.infra
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.maas
- - cluster.baremetal-mcp-pike-ovs-ha.infra
+++ /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
-##############################################################################
-{# NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
-{%- if conf.idf is defined and conf.idf.net_config is defined -%}
- {#- NOTE: Currently, we assume all cluster nodes use the same mapping -#}
-
- {#- Determine interface index for each network (plumbing vars) -#}
- {%- set idx_admin = conf['idf']['net_config']['admin']['interface'] -%}
- {%- set idx_mgmt = conf['idf']['net_config']['mgmt']['interface'] -%}
- {%- set idx_private = conf['idf']['net_config']['private']['interface'] -%}
- {%- set idx_public = conf['idf']['net_config']['public']['interface'] -%}
-
- {#- Physical interface OS name for each network (e.g. em1, enp1s0f1) -#}
- {%- set node = conf['idf']['fuel']['network']['node'][0] -%}
- {%- set nic_admin = node['interfaces'][idx_admin] -%}
- {%- set nic_mgmt = node['interfaces'][idx_mgmt] -%}
- {%- set nic_private = node['interfaces'][idx_private] -%}
- {%- set nic_public = node['interfaces'][idx_public] -%}
-
- {#- PCI addresses (only for DPDK on private) -#}
- {%- set bus_private = node['busaddr'][idx_private] -%}
-
- {#- VLAN for each network (only untagged 'admin' is supported by MaaS config!) -#}
- {%- set vlan_admin = conf['idf']['net_config']['admin']['vlan'] -%}
- {%- set vlan_mgmt = conf['idf']['net_config']['mgmt']['vlan'] -%}
- {%- set vlan_private = conf['idf']['net_config']['private']['vlan'] -%}
- {%- set vlan_public = conf['idf']['net_config']['public']['vlan'] -%}
-{%- else -%}
- {%- set nic_admin = 'enp6s0' -%}
- {%- set nic_mgmt = 'enp6s0' -%}
- {%- set nic_private = None -%}
- {%- set nic_public = None -%}
- {%- set vlan_admin = 'native' -%}
- {%- set vlan_mgmt = '300' -%}
- {%- set vlan_private = '1000' -%}
-{%- endif -%}
-
-{#- Filter-out NIC duplicates by constructing a dict (used NICs only) -#}
-{%- set nics = { nic_private: True } -%}
-
-{%- set vlans = { vlan_private: nic_private } -%}
----
-parameters:
- linux:
- network:
- interface:
-{%- for nic in nics %}
- {{ nic }}:
- enabled: true
- type: eth
- {%- if nic == nic_admin %}
- proto: dhcp
- {%- else %}
- proto: manual
- {%- endif %}
- name: {{ nic }}
-{%- endfor %}
-
-{%- for vlan in vlans %}
- {%- if vlan and vlan != 'native' %}
- {{ vlans[vlan] }}.{{ vlan }}:
- enabled: true
- proto: manual
- type: vlan
- name: {{ vlans[vlan] }}.{{ vlan }}
- use_interfaces:
- - {{ vlans[vlan] }}
- {%- endif %}
-{%- endfor %}
-
- br-mesh:
- enabled: true
- type: bridge
- address: ${_param:tenant_address}
- netmask: 255.255.255.0
- mtu: 1500
- use_interfaces:
- - {{ nic_private }}{% if vlan_private and vlan_private != 'native' %}.{{ vlan_private }}{% endif %}
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_database
- - cluster.baremetal-mcp-pike-ovs-ha
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_init
-parameters:
- _param:
- neutron_tenant_network_types: "flat,vxlan"
- nova_cpu_pinning: "1,2,3,4,5,7,8,9,10,11"
- compute_hugepages_size: 1G
- compute_hugepages_count: 16
- compute_hugepages_mount: /mnt/hugepages_1G
- compute_kernel_isolcpu: ${_param:nova_cpu_pinning}
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_triport
- - cluster.baremetal-mcp-pike-common-ha.openstack_proxy
- - cluster.baremetal-mcp-pike-ovs-ha.infra
+++ /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
-##############################################################################
----
-classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_telemetry
- - cluster.baremetal-mcp-pike-ovs-ha.infra
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
# - system.reclass.storage.system.stacklight_monitor_cluster
# - system.reclass.storage.system.stacklight_telemetry_cluster
- system.reclass.storage.system.infra_maas_single
- - cluster.baremetal-mcp-pike-common-ha.infra.lab_proxy_pdf
+ - cluster.mcp-pike-common-ha.include.lab_proxy_pdf
parameters:
_param:
salt_master_base_environment: prd
# - system.kibana.client.single
openstack_control_node01:
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_control_init
+ - cluster.mcp-pike-common-ha.openstack_control_init
params:
linux_system_codename: xenial
+ # NOTE: When VCP is present, external_address is not used
+ external_address: ${_param:openstack_proxy_node01_address}
openstack_control_node02:
params:
linux_system_codename: xenial
+ external_address: 0.0.0.0
openstack_control_node03:
params:
linux_system_codename: xenial
+ external_address: ${_param:openstack_proxy_node02_address}
openstack_database_node01:
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_database_init
+ - cluster.mcp-pike-common-ha.openstack_database_init
params:
linux_system_codename: xenial
openstack_database_node02:
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
classes:
- system.linux.system.single
- cluster.all-mcp-arch-common
- # - cluster.baremetal-mcp-pike-common-ha.stacklight
- # - cluster.baremetal-mcp-pike-common-ha.stacklight.client
+ # - cluster.mcp-pike-common-ha.stacklight
+ # - cluster.mcp-pike-common-ha.stacklight.client
parameters:
_param:
- apt_mk_version: stable
+ apt_mk_version: nightly
mcp_repo_version: 1.1
salt_version: 2016.11
cluster_domain: ${_param:cluster_name}.local
infra_maas_node01_deploy_address: ${_param:opnfv_infra_maas_node01_deploy_address}
infra_kvm_address: ${_param:opnfv_infra_kvm_address}
+{%- if conf.MCP_VCP %}
infra_kvm_node01_address: ${_param:opnfv_infra_kvm_node01_address}
infra_kvm_node02_address: ${_param:opnfv_infra_kvm_node02_address}
infra_kvm_node03_address: ${_param:opnfv_infra_kvm_node03_address}
+{%- else %}
+ # For NOVCP, we override kvm addresses to overlap with ctl
+ infra_kvm_node01_address: ${_param:openstack_control_node01_address}
+ infra_kvm_node02_address: ${_param:openstack_control_node02_address}
+ infra_kvm_node03_address: ${_param:openstack_control_node03_address}
+{%- endif %}
infra_maas_node01_hostname: mas01
infra_kvm_node01_hostname: kvm01
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
# - system.salt.control.cluster.stacklight_server_cluster
# - system.salt.control.cluster.stacklight_log_cluster
# - system.salt.control.cluster.stacklight_telemetry_cluster
- - cluster.baremetal-mcp-pike-common-ha.infra.kvm_pdf
- - cluster.baremetal-mcp-pike-common-ha.include.proxy
+ - cluster.mcp-pike-common-ha.infra.kvm_pdf
+ - cluster.mcp-pike-common-ha.include.maas_proxy
+ - cluster.mcp-pike-common-ha.include.lab_proxy_pdf
parameters:
_param:
linux_system_codename: xenial
keepalived_vip_interface: br-ctl
keepalived_vip_virtual_router_id: 69
linux:
- network:
- remove_iface_files:
- - '/etc/network/interfaces.d/50-cloud-init.cfg'
system:
kernel:
boot_options:
--- /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
+##############################################################################
+{#- NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
+{%- import 'net_map.j2' as nm 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 } %}
+---
+parameters:
+ linux:
+ network:
+ interface:
+{%- for nic in nics %}
+ {{ nic }}:
+ enabled: true
+ type: eth
+ proto: manual
+ address: 0.0.0.0
+ netmask: 255.255.255.0
+ name: {{ nic }}
+ noifupdown: true
+{%- endfor %}
+
+{%- for vlan in vlans %}
+ {%- if vlan | int > 0 %}
+ {{ vlans[vlan] }}.{{ vlan }}:
+ enabled: true
+ proto: manual
+ type: vlan
+ name: {{ vlans[vlan] }}.{{ vlan }}
+ use_interfaces:
+ - {{ vlans[vlan] }}
+ noifupdown: true
+ {%- endif %}
+{%- endfor %}
+
+ br-mgmt:
+ enabled: true
+ proto: dhcp
+ type: bridge
+ use_interfaces:
+ - {{ nm.ctl01.nic_admin }}{% if nm.vlan_admin | int > 0 %}.{{ nm.vlan_admin }}{% endif %}
+ noifupdown: true
+ br-ctl:
+ enabled: true
+ type: bridge
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
+ use_interfaces:
+ - {{ nm.ctl01.nic_mgmt }}{% if nm.vlan_mgmt | int > 0 %}.{{ nm.vlan_mgmt }}{% endif %}
+ noifupdown: true
+ br-ex:
+ enabled: true
+ proto: manual
+ address: 0.0.0.0
+ netmask: ${_param:opnfv_net_public_mask}
+ type: bridge
+ use_interfaces:
+ - {{ nm.ctl01.nic_public }}{% if nm.vlan_public | int > 0 %}.{{ nm.vlan_public }}{% endif %}
+ noifupdown: true
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
classes:
- system.maas.region.single
- service.maas.cluster.single
- - cluster.baremetal-mcp-pike-common-ha.infra.lab_proxy_pdf
+ - cluster.mcp-pike-common-ha.include.lab_proxy_pdf
+ - cluster.mcp-pike-common-ha.infra.maas_pdf
parameters:
_param:
dhcp_interface: ${_param:opnfv_fn_vm_primary_interface}
maas_db_password: opnfv_secret
dns_server01: ${_param:opnfv_dns_server01}
single_address: ${_param:infra_maas_node01_deploy_address}
- hwe_kernel: 'ga-16.04'
+ hwe_kernel: 'hwe-16.04'
maas:
region:
salt_master_ip: ${_param:reclass_config_master}
vid: 0
dhcp_on: true
primary_rack: ${_param:infra_maas_node01_hostname}
- machines:
- kvm01:
- interface:
- mac: ${_param:opnfv_maas_node01_interface_mac}
- power_parameters:
- power_address: ${_param:opnfv_maas_node01_power_address}
- power_password: ${_param:opnfv_maas_node01_power_password}
- power_type: ${_param:opnfv_maas_node01_power_type}
- power_user: ${_param:opnfv_maas_node01_power_user}
- architecture: ${_param:opnfv_maas_node01_architecture}
- distro_series: xenial
- hwe_kernel: ${_param:hwe_kernel}
- kvm02:
- interface:
- mac: ${_param:opnfv_maas_node02_interface_mac}
- power_parameters:
- power_address: ${_param:opnfv_maas_node02_power_address}
- power_password: ${_param:opnfv_maas_node02_power_password}
- power_type: ${_param:opnfv_maas_node02_power_type}
- power_user: ${_param:opnfv_maas_node02_power_user}
- architecture: ${_param:opnfv_maas_node02_architecture}
- distro_series: xenial
- hwe_kernel: ${_param:hwe_kernel}
- kvm03:
- interface:
- mac: ${_param:opnfv_maas_node03_interface_mac}
- power_parameters:
- power_address: ${_param:opnfv_maas_node03_power_address}
- power_password: ${_param:opnfv_maas_node03_power_password}
- power_type: ${_param:opnfv_maas_node03_power_type}
- power_user: ${_param:opnfv_maas_node03_power_user}
- architecture: ${_param:opnfv_maas_node03_architecture}
- distro_series: xenial
- hwe_kernel: ${_param:hwe_kernel}
- cmp001:
- interface:
- mac: ${_param:opnfv_maas_node04_interface_mac}
- power_parameters:
- power_address: ${_param:opnfv_maas_node04_power_address}
- power_password: ${_param:opnfv_maas_node04_power_password}
- power_type: ${_param:opnfv_maas_node04_power_type}
- power_user: ${_param:opnfv_maas_node04_power_user}
- architecture: ${_param:opnfv_maas_node04_architecture}
- distro_series: xenial
- hwe_kernel: ${_param:hwe_kernel}
- cmp002:
- interface:
- mac: ${_param:opnfv_maas_node05_interface_mac}
- power_parameters:
- power_address: ${_param:opnfv_maas_node05_power_address}
- power_password: ${_param:opnfv_maas_node05_power_password}
- power_type: ${_param:opnfv_maas_node05_power_type}
- power_user: ${_param:opnfv_maas_node05_power_user}
- architecture: ${_param:opnfv_maas_node05_architecture}
- distro_series: xenial
- hwe_kernel: ${_param:hwe_kernel}
cluster:
saltstack_repo_xenial: "http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.11/ xenial main"
linux:
--- /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
+##############################################################################
+---
+parameters:
+ maas:
+ region:
+ sshprefs:
+ - '{{ conf.MAAS_SSH_KEY }}'
+ machines:
+ {%- set pxe_interface = conf.idf.net_config.admin.interface %}
+ {#- We only support exactly 5 nodes for now, hardcoded order #}
+ {%- set node_roles = ['kvm01', 'kvm02', 'kvm03', 'cmp001', 'cmp002'] %}
+ {%- for node in conf.nodes %}
+ {%- if node.node.type == 'baremetal' %}
+ {{ node_roles[loop.index0] }}:
+ interface:
+ mac: {{ node.interfaces[pxe_interface].mac_address }}
+ power_parameters:
+ power_address: {{ node.remote_management.address.rsplit('/')[0] }}
+ power_password: {{ node.remote_management.pass }}
+ power_type: {{ node.remote_management.type }}
+ power_user: {{ node.remote_management.user }}
+ architecture: {{ node.node.arch | dpkg_arch }}/generic
+ distro_series: xenial
+ hwe_kernel: ${_param:hwe_kernel}
+ {%- endif %}
+ {%- endfor %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
+ - system.linux.system.repo.mcp.openstack
- system.linux.system.repo.glusterfs
- - system.linux.storage.loopback
- system.glusterfs.client.cluster
- system.nova.compute.cluster
- system.nova.compute.nfv.hugepages
- - system.nova.compute.nfv.cpu_pinning
- system.neutron.gateway.cluster
- system.cinder.volume.single
- system.cinder.volume.backend.lvm
- system.ceilometer.agent.cluster
- - cluster.baremetal-mcp-pike-common-ha.openstack_compute_pdf
- - cluster.baremetal-mcp-pike-common-ha.include.proxy
+ - cluster.mcp-pike-common-ha.openstack_compute_pdf
+ - cluster.mcp-pike-common-ha.include.maas_proxy
+ - cluster.mcp-pike-common-ha.include.lab_proxy_pdf
parameters:
_param:
cluster_vip_address: ${_param:openstack_control_address}
interface_mtu: 1500
keepalived_vip_interface: br-ctl
keepalived_vip_virtual_router_id: 69
- loopback_device_size: 20
linux_system_codename: xenial
glusterfs_version: '3.13'
glusterfs:
server: ${_param:glusterfs_service_host}
# yamllint disable-line rule:line-length
opts: "defaults,backup-volfile-servers=${_param:cluster_node01_address}:${_param:cluster_node02_address}:${_param:cluster_node03_address}"
+ cinder:
+ volume:
+ backend:
+ lvm-driver:
+ # Align system.cinder.volume.backend.lvm and MaaS data
+ volume_group: ${linux:storage:lvm:cinder-vg:name}
linux:
- network:
- remove_iface_files:
- - '/etc/network/interfaces.d/50-cloud-init.cfg'
+ storage:
+ lvm:
+ # Align with both system.cinder.volume.backend.lvm and MaaS data
+ cinder-vg:
+ name: vgroot
system:
kernel:
sysctl:
neutron:
gateway:
vlan_aware_vms: true
+ root_helper_daemon: false
+ nova:
+ compute:
+ disk_cachemodes: file=directsync,block=none
--- /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
+##############################################################################
+{#- NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
+{%- import 'net_map.j2' as nm with context %}
+{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
+{%- set nics = { nm.cmp001.nic_admin: True, nm.cmp001.nic_mgmt: True } %}
+{%- set vlans = { nm.vlan_admin: nm.cmp001.nic_admin, nm.vlan_mgmt: nm.cmp001.nic_mgmt } %}
+---
+parameters:
+ _param:
+ # Should later be determined via PDF/IDF, AArch64 has ESP on /dev/sda1
+{%- if conf.nodes[nm.cmp001.idx].node.type == 'virtual' %}
+ ~cinder_lvm_devices: ['/dev/vdb']
+{%- elif conf.nodes[nm.cmp001.idx].node.arch == 'aarch64' or
+ conf.nodes[nm.cmp001.idx].disks.0.disk_capacity | storage_size_num | float > 2000000000000 %}
+ ~cinder_lvm_devices: ['/dev/sda2']
+{%- else %}
+ ~cinder_lvm_devices: ['/dev/sda1']
+{%- endif %}
+ linux:
+ network:
+ bridge: openvswitch
+ interface:
+{%- for nic in nics %}
+ {%- if nic == nm.cmp001.nic_admin %}
+ {{ nic }}:
+ enabled: true
+ type: eth
+ proto: dhcp
+ name: {{ nic }}
+ {%- else %}
+ {{ nic }}:
+ enabled: true
+ type: eth
+ proto: manual
+ address: 0.0.0.0
+ {%- if nic == nm.cmp001.nic_public %}
+ netmask: ${_param:opnfv_net_public_mask}
+ {%- else %}
+ netmask: 255.255.255.0
+ {%- endif %}
+ mtu: ${_param:interface_mtu}
+ name: {{ nic }}
+ {%- endif %}
+{%- endfor %}
+
+{%- for vlan in vlans %}
+ {%- if vlan | int > 0 %}
+ {{ vlans[vlan] }}.{{ vlan }}:
+ enabled: true
+ proto: manual
+ type: vlan
+ name: {{ vlans[vlan] }}.{{ vlan }}
+ use_interfaces:
+ - {{ vlans[vlan] }}
+ {%- endif %}
+{%- endfor %}
+
+ br-ctl:
+ enabled: true
+ type: bridge
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
+ use_interfaces:
+ - {{ nm.cmp001.nic_mgmt }}{% if nm.vlan_mgmt | int > 0 %}.{{ nm.vlan_mgmt }}{% endif %}
+ br-floating:
+ enabled: true
+ type: ovs_bridge
+ mtu: ${_param:interface_mtu}
+ proto: static
+ address: ${_param:external_address}
+ netmask: ${_param:opnfv_net_public_mask}
+ use_interfaces:
+ - {{ nm.cmp001.nic_public }}{% if nm.vlan_public | int > 0 %}.{{ nm.vlan_public }}{% endif %}
+ route:
+ public:
+ address: 0.0.0.0
+ netmask: 0.0.0.0
+ gateway: ${_param:opnfv_net_public_gw}
+ ovs_port_{{ nm.cmp001.nic_public }}:
+ enabled: true
+ name: {{ nm.cmp001.nic_public }}{% if nm.vlan_public | int > 0 %}.{{ nm.vlan_public }}{% endif %}
+ proto: manual
+ ovs_port_type: OVSPort
+ type: ovs_port
+ ovs_bridge: br-floating
+ bridge: br-floating
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
- system.glusterfs.client.cluster
- system.glusterfs.client.volume.glance
- system.glusterfs.client.volume.keystone
+{%- if not conf.MCP_VCP %}
+ # sync from kvm
+ - service.keepalived.cluster.single
+ - system.glusterfs.server.volume.glance
+ - system.glusterfs.server.volume.keystone
+ - system.glusterfs.server.cluster
+ # NOTE(armband): Disabled for novcp
+ # - system.salt.control.virt
+ # - system.salt.control.cluster.openstack_control_cluster
+ # - system.salt.control.cluster.openstack_proxy_cluster
+ # - system.salt.control.cluster.openstack_database_cluster
+ # - system.salt.control.cluster.openstack_message_queue_cluster
+ # - system.salt.control.cluster.openstack_telemetry_cluster
+ # - system.salt.control.cluster.stacklight_server_cluster
+ # - system.salt.control.cluster.stacklight_log_cluster
+ # - system.salt.control.cluster.stacklight_telemetry_cluster
+ - cluster.mcp-pike-common-ha.infra.kvm_pdf
+ - cluster.mcp-pike-common-ha.include.maas_proxy
+ - cluster.mcp-pike-common-ha.include.lab_proxy_pdf
+{%- endif %}
parameters:
_param:
+{%- if not conf.MCP_VCP %}
+ linux_system_codename: xenial # sync from kvm
+ # For NOVCP, we switch keepalived VIPs, to keep cluster_vip_address in ctl
+ single_nic: br-ctl # for keepalive_vip_interface interpolation
+ control_nic: ~ # Dummy value to keep reclass 1.5.2 happy
+ keepalived_openstack_web_public_vip_address: ${_param:openstack_proxy_address}
+ keepalived_openstack_web_public_vip_interface: br-ex
+{%- endif %}
keepalived_vip_interface: ${_param:single_nic}
keepalived_vip_virtual_router_id: 50
cluster_vip_address: ${_param:openstack_control_address}
cluster_node03_address: ${_param:openstack_control_node03_address}
nova_vncproxy_url: https://${_param:cluster_public_host}:6080
glusterfs_version: '3.13'
+{%- if conf.MCP_VCP %}
heat:
server:
metadata:
- nova-novncproxy
- nova-scheduler
- python-novaclient
+{%- else %}
+ libvirt:
+ server:
+ service: libvirtd
+ config_sys: /etc/default/libvirtd
+ unix_sock_group: libvirt
+ linux:
+ network:
+ # Add public IPs here as overrides, no need to fork another kvm_pdf.j2
+ interface:
+ br-ex:
+ address: ${_param:external_address}
+ proto: static
+ apache:
+ server:
+ bind:
+ ~ports: ~
+ ~modules:
+ - rewrite
+ - wsgi
+ # sync from common-ha kvm role
+ glusterfs:
+ server:
+ service: glusterd
+ volumes:
+ nova_instances:
+ storage: /srv/glusterfs/nova_instances
+ replica: 3
+ bricks:
+ - ${_param:cluster_node01_address}:/srv/glusterfs/nova_instances
+ - ${_param:cluster_node02_address}:/srv/glusterfs/nova_instances
+ - ${_param:cluster_node03_address}:/srv/glusterfs/nova_instances
+ options:
+ cluster.readdir-optimize: 'True'
+ nfs.disable: 'True'
+ network.remote-dio: 'True'
+ cluster.favorite-child-policy: mtime
+ diagnostics.client-log-level: WARNING
+ diagnostics.brick-log-level: WARNING
+{%- endif %}
neutron:
server:
vlan_aware_vms: true
+ root_helper_daemon: false
keystone:
server:
cacert: /etc/ssl/certs/mcp_os_cacert
+ openrc_extra:
+ volume_device_name: vdc
bind:
server:
control:
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
openstack_version: pike
# openstack service addresses
+{%- if conf.MCP_VCP %}
openstack_proxy_control_address: ${_param:opnfv_openstack_proxy_control_address}
openstack_proxy_node01_control_address: ${_param:opnfv_openstack_proxy_node01_control_address}
openstack_proxy_node02_control_address: ${_param:opnfv_openstack_proxy_node02_control_address}
+{%- else %}
+ openstack_proxy_control_address: ${_param:opnfv_openstack_control_address}
+ openstack_proxy_node01_control_address: ${_param:opnfv_openstack_control_node01_address}
+ openstack_proxy_node02_control_address: ${_param:opnfv_openstack_control_node03_address}
+{%- endif %}
+
openstack_proxy_address: ${_param:opnfv_openstack_proxy_address}
openstack_proxy_node01_address: ${_param:opnfv_openstack_proxy_node01_address}
openstack_proxy_node02_address: ${_param:opnfv_openstack_proxy_node02_address}
+
openstack_control_address: ${_param:opnfv_openstack_control_address}
openstack_control_node01_address: ${_param:opnfv_openstack_control_node01_address}
openstack_control_node02_address: ${_param:opnfv_openstack_control_node02_address}
openstack_control_node03_address: ${_param:opnfv_openstack_control_node03_address}
+
+{%- if conf.MCP_VCP %}
openstack_database_address: ${_param:opnfv_openstack_database_address}
openstack_database_node01_address: ${_param:opnfv_openstack_database_node01_address}
openstack_database_node02_address: ${_param:opnfv_openstack_database_node02_address}
openstack_database_node03_address: ${_param:opnfv_openstack_database_node03_address}
+
openstack_message_queue_address: ${_param:opnfv_openstack_message_queue_address}
openstack_message_queue_node01_address: ${_param:opnfv_openstack_message_queue_node01_address}
openstack_message_queue_node02_address: ${_param:opnfv_openstack_message_queue_node02_address}
openstack_message_queue_node03_address: ${_param:opnfv_openstack_message_queue_node03_address}
-
- openstack_telemetry_hostname: mdb
- openstack_telemetry_node01_hostname: mdb01
- openstack_telemetry_node02_hostname: mdb02
- openstack_telemetry_node03_hostname: mdb03
-
openstack_telemetry_address: ${_param:opnfv_openstack_telemetry_address}
openstack_telemetry_node01_address: ${_param:opnfv_openstack_telemetry_node01_address}
openstack_telemetry_node02_address: ${_param:opnfv_openstack_telemetry_node02_address}
openstack_telemetry_node03_address: ${_param:opnfv_openstack_telemetry_node03_address}
+{%- else %}
+ openstack_database_address: ${_param:openstack_control_address}
+ openstack_database_node01_address: ${_param:openstack_control_node01_address}
+ openstack_database_node02_address: ${_param:openstack_control_node02_address}
+ openstack_database_node03_address: ${_param:openstack_control_node03_address}
+
+ openstack_message_queue_address: ${_param:openstack_control_address}
+ openstack_message_queue_node01_address: ${_param:openstack_control_node01_address}
+ openstack_message_queue_node02_address: ${_param:openstack_control_node02_address}
+ openstack_message_queue_node03_address: ${_param:openstack_control_node03_address}
+
+ openstack_telemetry_address: ${_param:openstack_control_address}
+ openstack_telemetry_node01_address: ${_param:openstack_control_node01_address}
+ openstack_telemetry_node02_address: ${_param:openstack_control_node02_address}
+ openstack_telemetry_node03_address: ${_param:openstack_control_node03_address}
+{%- endif %}
# OpenStack Compute
openstack_compute_node01_single_address: ${_param:opnfv_openstack_compute_node01_single_address}
openstack_compute_node02_external_address: ${_param:opnfv_openstack_compute_node02_external_address}
# openstack service hostnames
+{%- if conf.MCP_VCP %}
openstack_proxy_hostname: prx
openstack_proxy_node01_hostname: prx01
openstack_proxy_node02_hostname: prx02
openstack_message_queue_node01_hostname: msg01
openstack_message_queue_node02_hostname: msg02
openstack_message_queue_node03_hostname: msg03
+ openstack_telemetry_hostname: mdb
+ openstack_telemetry_node01_hostname: mdb01
+ openstack_telemetry_node02_hostname: mdb02
+ openstack_telemetry_node03_hostname: mdb03
+{%- else %}
+ openstack_proxy_hostname: ${_param:openstack_control_hostname}
+ openstack_proxy_node01_hostname: ${_param:openstack_control_node01_hostname}
+ openstack_proxy_node02_hostname: ${_param:openstack_control_node03_hostname}
+ openstack_control_hostname: kvm
+ openstack_control_node01_hostname: kvm01
+ openstack_control_node02_hostname: kvm02
+ openstack_control_node03_hostname: kvm03
+ openstack_database_hostname: ${_param:openstack_control_hostname}
+ openstack_database_node01_hostname: ${_param:openstack_control_node01_hostname}
+ openstack_database_node02_hostname: ${_param:openstack_control_node02_hostname}
+ openstack_database_node03_hostname: ${_param:openstack_control_node03_hostname}
+ openstack_message_queue_hostname: ${_param:openstack_control_hostname}
+ openstack_message_queue_node01_hostname: ${_param:openstack_control_node01_hostname}
+ openstack_message_queue_node02_hostname: ${_param:openstack_control_node02_hostname}
+ openstack_message_queue_node03_hostname: ${_param:openstack_control_node03_hostname}
+ openstack_telemetry_hostname: ${_param:openstack_control_hostname}
+ openstack_telemetry_node01_hostname: ${_param:openstack_control_node01_hostname}
+ openstack_telemetry_node02_hostname: ${_param:openstack_control_node02_hostname}
+ openstack_telemetry_node03_hostname: ${_param:openstack_control_node03_hostname}
+{%- endif %}
# openstack compute
openstack_compute_node01_hostname: cmp001
openstack_compute_node02_hostname: cmp002
+ # opendaylight options
+{%- if conf.MCP_VCP %}
+ opendaylight_server_node01_hostname: odl01
+ opendaylight_server_node01_single_address: ${_param:opnfv_opendaylight_server_node01_single_address}
+{%- else %}
+ opendaylight_control_hostname: ${_param:openstack_control_node02_hostname}
+ opendaylight_server_node01_hostname: ${_param:opendaylight_control_hostname}
+ opendaylight_server_node01_single_address: ${_param:opnfv_openstack_control_node02_address}
+{%- endif %}
+
openstack_region: RegionOne
admin_email: root@localhost
# Neutron osv/nodvr
neutron_control_dvr: 'False'
- neutron_l3_ha: 'True'
neutron_global_physnet_mtu: 1500
neutron_external_mtu: 1500
neutron_gateway_dvr: 'False'
nova_service_host: ${_param:openstack_control_address}
neutron_version: ${_param:openstack_version}
neutron_service_host: ${_param:openstack_control_address}
+{%- if conf.MCP_VCP %}
glusterfs_service_host: ${_param:infra_kvm_address}
+{%- else %}
+ glusterfs_service_host: ${_param:openstack_control_address}
+{%- endif %}
mysql_admin_user: root
mysql_admin_password: opnfv_secret
mysql_cinder_password: opnfv_secret
linux:
system:
repo:
+ uca-staging:
+ source: "deb http://ppa.launchpad.net/ubuntu-cloud-archive/${_param:openstack_version}-staging/ubuntu xenial main"
+ key_id: 9F68104E
+ key_server: keyserver.ubuntu.com
uca:
source: "deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/${_param:openstack_version} main"
- architectures: amd64
key_id: EC4926EA
key_server: keyserver.ubuntu.com
kernel:
net.ipv4.tcp_fin_timeout: 30
network:
host:
+{%- if conf.MCP_VCP %}
prx:
address: ${_param:openstack_proxy_control_address}
names:
names:
- ${_param:openstack_telemetry_node03_hostname}
- ${_param:openstack_telemetry_node03_hostname}.${_param:cluster_domain}
+{%- else %}
+ kvm:
+ address: ${_param:openstack_control_address}
+ names:
+ - ${_param:openstack_control_hostname}
+ - ${_param:openstack_control_hostname}.${_param:cluster_domain}
+ kvm01:
+ address: ${_param:openstack_control_node01_address}
+ names:
+ - ${_param:openstack_control_node01_hostname}
+ - ${_param:openstack_control_node01_hostname}.${_param:cluster_domain}
+ kvm02:
+ address: ${_param:openstack_control_node02_address}
+ names:
+ - ${_param:openstack_control_node02_hostname}
+ - ${_param:openstack_control_node02_hostname}.${_param:cluster_domain}
+ kvm03:
+ address: ${_param:openstack_control_node03_address}
+ names:
+ - ${_param:openstack_control_node03_hostname}
+ - ${_param:openstack_control_node03_hostname}.${_param:cluster_domain}
+{%- endif %}
cmp001:
address: ${_param:openstack_compute_node01_control_address}
names:
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{%- if conf.MCP_VCP %}
classes:
- - cluster.baremetal-mcp-pike-common-ha.include.proxy
+ - cluster.mcp-pike-common-ha.include.maas_proxy
+ - cluster.mcp-pike-common-ha.include.lab_proxy_pdf
parameters:
_param:
dhcp_nic: ${_param:opnfv_vcp_vm_primary_interface}
name: ${_param:single_nic}
address: ${_param:single_address}
netmask: ${_param:opnfv_net_public_mask}
+{%- endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{%- if conf.MCP_VCP %}
classes:
- - cluster.baremetal-mcp-pike-common-ha.include.proxy
+ - cluster.mcp-pike-common-ha.include.maas_proxy
+ - cluster.mcp-pike-common-ha.include.lab_proxy_pdf
parameters:
_param:
dhcp_nic: ${_param:opnfv_vcp_vm_primary_interface}
name: ${_param:control_nic}
address: ${_param:control_address}
netmask: 255.255.255.0
+{%- endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
--- /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
+##############################################################################
+---
+classes:
+ - system.nginx.server.single
+ - system.nginx.server.proxy.openstack_api
+ - system.nginx.server.proxy.openstack_vnc
+ - system.nginx.server.proxy.openstack_web
+ - system.nginx.server.proxy.openstack.aodh
+ - system.nginx.server.proxy.openstack.ceilometer
+ - system.horizon.server.single
+ - system.salt.minion.cert.proxy
+ - system.sphinx.server.doc.reclass
+ - service.keepalived.cluster.single
+ - system.keepalived.cluster.instance.openstack_web_public_vip
+parameters:
+ _param:
+ cluster_vip_address: ${_param:openstack_proxy_address}
+ keepalived_openstack_web_public_vip_address: ${_param:cluster_vip_address}
+ keepalived_openstack_web_public_vip_interface: ${_param:single_nic}
+ keepalived_vip_address: ${_param:openstack_proxy_control_address}
+ keepalived_vip_interface: ${_param:control_nic}
+ keepalived_vip_virtual_router_id: 240
+ nginx_proxy_ssl:
+ enabled: true
+ authority: ${_param:salt_minion_ca_authority}
+ engine: salt
+ mode: secure
+ salt_minion_ca_host: cfg01.${_param:cluster_domain}
+ linux:
+ system:
+ package:
+ libapache2-mod-wsgi:
+ version: latest
+{%- if not conf.MCP_VCP %}
+ # Set up routes similar to prx*ovs-ha
+ network:
+ interface:
+ br-ex:
+ route:
+ public:
+ address: 0.0.0.0
+ netmask: 0.0.0.0
+ gateway: ${_param:opnfv_net_public_gw}
+ nginx:
+ server:
+ # NOTE(armband): Define host.address for all proxies for uniformity
+ site:
+ nginx_proxy_novnc: &nginx_openstack_proxy_address
+ host:
+ address: ${_param:openstack_proxy_address}
+ nginx_proxy_openstack_api_aodh:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_ceilometer:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_cinder:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_glance:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_heat:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_heat_cfn:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_heat_cloudwatch:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_keystone:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_keystone_private:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_neutron:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_nova:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_nova_ec2:
+ <<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_web:
+ <<: *nginx_openstack_proxy_address
+ nginx_ssl_redirect_openstack_web:
+ <<: *nginx_openstack_proxy_address
+ nginx_static_reclass_doc:
+ <<: *nginx_openstack_proxy_address
+{%- endif %}
+ salt:
+ minion:
+ cert:
+ proxy:
+ alternative_names: "IP:${_param:openstack_proxy_address}"
+ key_usage: 'digitalSignature, keyEncipherment'
+ keepalived:
+ cluster:
+ vrrp_scripts:
+ check_pidof:
+ args: 'nginx'
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
_param:
openstack_control_node01_hostname: ctl01
reclass_data_repository: local
- reclass_config_master: ${_param:opnfv_salt_master_ip}
+ reclass_config_master: ${_param:opnfv_infra_config_pxe_address}
salt_master_environment_repository: "https://github.com/tcpcloud"
salt_master_environment_revision: master
- single_address: 172.16.10.100
+ single_address: ${_param:opnfv_infra_config_address}
salt_master_host: 127.0.0.1
salt_master_base_environment: prd
salt_minion_ca_host: ${linux:network:fqdn}
linux:
network:
interface:
+ dhcp:
+ enabled: true
+ type: eth
+ proto: dhcp
+ name: ${_param:opnfv_fn_vm_primary_interface}
single_int:
enabled: true
name: ${_param:opnfv_fn_vm_secondary_interface}
proto: static
address: ${_param:single_address}
netmask: 255.255.255.0
+ pxe:
+ enabled: true
+ type: eth
+ proto: static
+ name: ${_param:opnfv_fn_vm_tertiary_interface}
+ address: ${_param:opnfv_infra_config_pxe_address}
+ netmask: 255.255.255.0
salt:
master:
file_recv: true
single_address: ${_param:openstack_control_node01_address}
openstack_compute_node01:
params:
- single_address: 172.16.10.105
- tenant_address: 10.1.0.105
- external_address: 10.16.0.105
+ single_address: ${_param:opnfv_openstack_compute_node01_control_address}
+ tenant_address: ${_param:opnfv_openstack_compute_node01_tenant_address}
+ external_address: ${_param:opnfv_openstack_compute_node01_external_address}
openstack_compute_node02:
params:
- single_address: 172.16.10.106
- tenant_address: 10.1.0.106
- external_address: 10.16.0.106
+ single_address: ${_param:opnfv_openstack_compute_node02_control_address}
+ tenant_address: ${_param:opnfv_openstack_compute_node02_tenant_address}
+ external_address: ${_param:opnfv_openstack_compute_node02_external_address}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+classes:
+ - cluster.all-mcp-arch-common
parameters:
_param:
# infra service addresses
- infra_config_address: 172.16.10.100
+ infra_config_address: ${_param:opnfv_infra_config_address}
# openstack service addresses
- openstack_control_address: 172.16.10.101
- openstack_control_node01_address: 172.16.10.101
- openstack_control_node02_address: 172.16.10.102
- openstack_control_node03_address: 172.16.10.103
+ openstack_control_address: ${_param:opnfv_openstack_control_node01_address}
+ openstack_control_node01_address: ${_param:opnfv_openstack_control_node01_address}
+ openstack_control_node02_address: ${_param:opnfv_openstack_control_node02_address}
+ openstack_control_node03_address: ${_param:opnfv_openstack_control_node03_address}
openstack_database_address: ${_param:openstack_control_address}
openstack_message_queue_address: ${_param:openstack_control_address}
openstack_message_queue_node01_address: ${_param:openstack_control_node01_address}
openstack_message_queue_node02_address: ${_param:openstack_control_node02_address}
openstack_message_queue_node03_address: ${_param:openstack_control_node03_address}
- openstack_gateway_address: 172.16.10.110
+ openstack_gateway_address: ${_param:opnfv_openstack_gateway_node01_address}
control_address: ${_param:openstack_control_address}
ntp_strata_host1: 1.se.pool.ntp.org
ntp_strata_host2: 0.se.pool.ntp.org
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - system.linux.storage.loopback
- service.nfs.client
- system.nova.compute.single
- service.cinder.volume.single
- system.ceilometer.agent.cluster
- system.ceilometer.client.nova_compute
- system.ceilometer.client.cinder_volume
+ - system.linux.system.repo.mcp.openstack
+ - cluster.mcp-pike-common-noha.openstack_compute_pdf
parameters:
_param:
- primary_interface: ${_param:opnfv_fn_vm_secondary_interface}
- tenant_interface: ${_param:opnfv_fn_vm_tertiary_interface}
- external_interface: ${_param:opnfv_fn_vm_quaternary_interface}
interface_mtu: 9000
linux_system_codename: xenial
- loopback_device_size: 20
+ ~cinder_lvm_devices: ['/dev/vdb']
nova:
compute:
libvirt_service: libvirtd
libvirt_bin: /etc/default/libvirtd
+ disk_cachemodes: file=directsync,block=none
vncproxy_url: http://${_param:cluster_vip_address}:6080
+ bind:
+ vnc_address: ${_param:single_address}
network:
region: ${_param:openstack_region}
user: neutron
compute:
notification: true
vlan_aware_vms: true
+ root_helper_daemon: false
agent_mode: ${_param:neutron_compute_agent_mode}
message_queue:
host: ${_param:openstack_control_address}
sysctl:
vm.dirty_ratio: 10
vm.dirty_background_ratio: 5
- network:
- bridge: openvswitch
- interface:
- dhcp_int:
- enabled: true
- name: ${_param:opnfv_fn_vm_primary_interface}
- proto: dhcp
- type: eth
- mtu: ${_param:interface_mtu}
- primary_interface:
- enabled: true
- name: ${_param:primary_interface}
- proto: manual
- type: eth
- tenant_interface:
- enabled: true
- name: ${_param:tenant_interface}
- mtu: ${_param:interface_mtu}
- proto: manual
- type: eth
- br-mgmt:
- enabled: true
- type: bridge
- proto: static
- address: ${_param:single_address}
- netmask: 255.255.255.0
- use_interfaces:
- - ${_param:primary_interface}
--- /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
+##############################################################################
+{#- NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
+{%- import 'net_map.j2' as nm with context %}
+---
+parameters:
+ _param:
+ primary_interface: {{ nm.cmp001.nic_mgmt }}
+ tenant_interface: {{ nm.cmp001.nic_private }}
+ external_interface: {{ nm.cmp001.nic_public }}
+ linux:
+ network:
+ bridge: openvswitch
+ interface:
+ dhcp_int:
+ enabled: true
+ name: {{ nm.cmp001.nic_admin }}
+ proto: dhcp
+ type: eth
+ mtu: ${_param:interface_mtu}
+ primary_interface:
+ enabled: true
+ name: ${_param:primary_interface}
+ proto: manual
+ type: eth
+ tenant_interface:
+ enabled: true
+ name: ${_param:tenant_interface}
+ mtu: ${_param:interface_mtu}
+ proto: manual
+ type: eth
+ br-mgmt:
+ enabled: true
+ type: bridge
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
+ use_interfaces:
+ - ${_param:primary_interface}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
- system.aodh.server.single
- system.horizon.server.single
- service.haproxy.proxy.single
- - cluster.virtual-mcp-pike-common-noha.haproxy_openstack_api
+ - cluster.mcp-pike-common-noha.haproxy_openstack_api
+ - cluster.mcp-pike-common-noha.openstack_control_pdf
parameters:
_param:
linux_system_codename: xenial
package:
python-msgpack:
version: latest
- network:
- interface:
- single_int:
- enabled: true
- name: ${_param:opnfv_fn_vm_secondary_interface}
- type: eth
- proto: static
- address: ${_param:single_address}
- netmask: 255.255.255.0
- public_int:
- enabled: true
- name: ${_param:opnfv_fn_vm_quaternary_interface}
- type: eth
- proto: static
- address: ${_param:cluster_public_host}
- netmask: 255.255.255.0
keystone:
server:
admin_email: ${_param:admin_email}
+ openrc_extra:
+ volume_device_name: vdc
glance:
server:
storage:
neutron:
server:
vlan_aware_vms: true
+ root_helper_daemon: false
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+---
+parameters:
+ linux:
+ network:
+ interface:
+ dhcp_int:
+ enabled: true
+ name: {{ nm.ctl01.nic_admin }}
+ proto: dhcp
+ type: eth
+ single_int:
+ enabled: true
+ name: {{ nm.ctl01.nic_mgmt }}
+ type: eth
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
+ public_int:
+ enabled: true
+ name: {{ nm.ctl01.nic_public }}
+ type: eth
+ proto: static
+ address: ${_param:cluster_public_host}
+ netmask: 255.255.255.0
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra.config
+ - cluster.mcp-pike-common-noha.openstack_gateway_pdf
parameters:
_param:
+ interface_mtu: 9000
linux_system_codename: xenial
- reclass_data_revision: master
- linux:
- system:
- name: cfg01
- domain: baremetal-mcp-pike-ovs-dpdk-ha.local
+ neutron:
+ gateway:
+ notification: true
+ agent_mode: ${_param:neutron_gateway_agent_mode}
+ vlan_aware_vms: true
+ root_helper_daemon: false
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{%- import 'net_map.j2' as nm with context %}
parameters:
_param:
- primary_interface: ${_param:opnfv_fn_vm_secondary_interface}
- tenant_interface: ${_param:opnfv_fn_vm_tertiary_interface}
- external_interface: ${_param:opnfv_fn_vm_quaternary_interface}
- interface_mtu: 9000
- linux_system_codename: xenial
- neutron:
- gateway:
- notification: true
- agent_mode: ${_param:neutron_gateway_agent_mode}
- vlan_aware_vms: true
+ primary_interface: {{ nm.ctl01.nic_mgmt }}
+ tenant_interface: {{ nm.ctl01.nic_private }}
+ external_interface: {{ nm.ctl01.nic_public }}
linux:
network:
bridge: openvswitch
interface:
dhcp_int:
enabled: true
- name: ${_param:opnfv_fn_vm_primary_interface}
+ name: {{ nm.ctl01.nic_admin }}
proto: dhcp
type: eth
mtu: ${_param:interface_mtu}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
parameters:
_param:
openstack_version: pike
- apt_mk_version: stable
+ apt_mk_version: nightly
mcp_repo_version: 1.1
openstack_region: RegionOne
admin_email: root@localhost
cluster_public_protocol: http
- cluster_public_host: 10.16.0.101
+ cluster_public_host: ${_param:opnfv_openstack_control_node01_external_address}
neutron_public_protocol: http
neutron_control_dvr: 'False'
neutron_l3_ha: 'False'
cluster_vip_address: ${_param:cluster_public_host}
cluster_local_address: ${_param:openstack_control_address}
cluster_node01_hostname: ctl01
- cluster_node01_address: 172.16.10.101
+ cluster_node01_address: ${_param:opnfv_openstack_control_node01_address}
cluster_node02_hostname: ctl02
- cluster_node02_address: 172.16.10.102
+ cluster_node02_address: ${_param:opnfv_openstack_control_node02_address}
cluster_node03_hostname: ctl03
- cluster_node03_address: 172.16.10.103
+ cluster_node03_address: ${_param:opnfv_openstack_control_node03_address}
rabbitmq_secret_key: opnfv_secret
rabbitmq_admin_password: opnfv_secret
rabbitmq_openstack_password: opnfv_secret
ceilometer_database_host: ${_param:cluster_local_address}
cinder_version: ${_param:openstack_version}
cinder_service_host: ${_param:cluster_local_address}
- ceilometer_graphite_publisher_host: 172.16.10.107
- ceilometer_graphite_publisher_port: 2013
nova_version: ${_param:openstack_version}
nova_service_host: ${_param:cluster_local_address}
nova_vncproxy_url: http://${_param:cluster_vip_address}:8060
linux:
system:
repo:
+ uca-staging:
+ # yamllint disable rule:line-length
+ source: "deb http://ppa.launchpad.net/ubuntu-cloud-archive/${_param:openstack_version}-staging/ubuntu xenial main"
+ key_id: 9F68104E
+ key_server: keyserver.ubuntu.com
+ # yamllint enable rule:line-length
uca:
source: "deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/${_param:openstack_version} main"
- architectures: amd64
key_id: EC4926EA
key_server: keyserver.ubuntu.com
kernel:
- gtw01
- gtw01.${_param:cluster_domain}
cmp01:
- address: 172.16.10.105
+ address: ${_param:opnfv_openstack_compute_node01_control_address}
names:
- cmp01
- cmp01.${_param:cluster_domain}
cmp02:
- address: 172.16.10.106
+ address: ${_param:opnfv_openstack_compute_node02_control_address}
names:
- cmp02
- cmp02.${_param:cluster_domain}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.reclass.storage.system.opendaylight_control_single
- - cluster.baremetal-mcp-pike-common-ha.infra.config
- - cluster.baremetal-mcp-pike-odl-ha.infra
+ - cluster.mcp-pike-common-ha.infra.config
+ - cluster.mcp-pike-odl-ha.infra
+ - cluster.all-mcp-arch-common.infra.config_pdf
parameters:
reclass:
storage:
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra
+ - cluster.mcp-pike-odl-ha.openstack
+parameters:
+ _param:
+ cluster_name: mcp-pike-odl-ha
--- /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
+##############################################################################
+---
+{%- if conf.MCP_VCP %}
+classes:
+ - cluster.mcp-pike-odl-ha.infra
+{%- endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{%- if conf.MCP_VCP %}
+# NOTE(armband): we don't want to pull in salt.control for novcp
classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.kvm
- - cluster.baremetal-mcp-pike-odl-ha.infra
+ - cluster.mcp-pike-common-ha.infra.kvm
+ - cluster.mcp-pike-odl-ha.infra
parameters:
salt:
control:
# Default production sizing
opendaylight.server:
cpu: 4
- ram: 6144
+ ram: 8192
disk_profile: small
net_profile: default
cluster:
provider: ${_param:infra_kvm_node02_hostname}.${_param:cluster_domain}
image: ${_param:salt_control_xenial_image}
size: opendaylight.server
+{%- endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.infra
-
+ - cluster.mcp-pike-common-ha.infra.maas
+ - cluster.mcp-pike-odl-ha.infra
parameters:
_param:
- cluster_name: virtual-mcp-pike-ovs-dpdk-noha
+ hwe_kernel: 'ga-16.04'
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- cluster.all-mcp-arch-common
- - cluster.baremetal-mcp-pike-ovs-ha.infra
- - cluster.baremetal-mcp-pike-ovs-ha.openstack
+ - cluster.mcp-pike-odl-ha.infra
+ - cluster.mcp-pike-odl-ha.openstack
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - system.opendaylight.server.single
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-odl-ha
+ - service.opendaylight.server.single
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+{%- if conf.MCP_VCP %}
+ - cluster.mcp-pike-odl-ha
+{%- endif %}
parameters:
_param:
linux_system_codename: xenial
server:
odl_bind_ip: ${_param:single_address}
odl_rest_port: 8282
- java_min_mem: 4g
- java_max_mem: 4g
+ java_min_mem: 6g
+ java_max_mem: 6g
router_enabled: true
karaf_features:
odl_default:
- odl-restconf-all
- odl-aaa-authn
- - odl-dlux-all
- - odl-mdsal-apidocs
netvirt:
- odl-netvirt-openstack
--- /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
+##############################################################################
+---
+classes:
+ - service.neutron.gateway.opendaylight.single
+ - cluster.mcp-pike-common-ha.openstack_compute
+ - cluster.mcp-pike-odl-ha.openstack.compute_pdf
+ - cluster.mcp-pike-odl-ha.infra
+parameters:
+ neutron:
+ gateway:
+ agent_mode: ${_param:neutron_gateway_agent_mode}
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
+{%- set nics = { nm.cmp001.nic_private: True } %}
+{%- set vlan_private_start = nm.vlan_private.rsplit('-')[0] %}
+{%- set vlans = { vlan_private_start: nm.cmp001.nic_private } %}
+---
+parameters:
+ linux:
+ network:
+ interface:
+{%- for nic in nics %}
+ {{ nic }}:
+ enabled: true
+ type: eth
+ {%- if nic == nm.cmp001.nic_admin %}
+ proto: dhcp
+ {%- else %}
+ proto: manual
+ {%- endif %}
+ name: {{ nic }}
+{%- endfor %}
+
+{%- for vlan in vlans %}
+ {%- if vlan | int > 0 %}
+ {{ vlans[vlan] }}.{{ vlan }}:
+ enabled: true
+ proto: manual
+ type: vlan
+ name: {{ vlans[vlan] }}.{{ vlan }}
+ use_interfaces:
+ - {{ vlans[vlan] }}
+ {%- endif %}
+{%- endfor %}
+
+ br-mesh:
+ enabled: true
+ type: bridge
+ address: ${_param:tenant_address}
+ netmask: 255.255.255.0
+ mtu: 1500
+ use_interfaces:
+ - {{ nm.cmp001.nic_private }}{% if vlan_private_start | int > 0 %}.{{ vlan_private_start }}{% endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.neutron.control.opendaylight.cluster
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_control
- - cluster.baremetal-mcp-pike-odl-ha.infra
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_control
+ - cluster.mcp-pike-odl-ha.infra
parameters:
- neutron:
+ keystone:
server:
- backend:
- router: ${_param:opendaylight_router}
+ openrc_extra:
+ # For HA, all public services are available through nginx on prx
+ sdn_controller_ip: ${_param:cluster_public_host}
+ sdn_username: admin # Hardcoded to default ODL values for now
+ sdn_password: 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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_database
+ - cluster.mcp-pike-odl-ha.infra.init_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_init
+ - cluster.mcp-pike-common-ha.openstack_init
parameters:
_param:
# opendaylight options
- opendaylight_server_node01_single_address: ${_param:opnfv_opendaylight_server_node01_single_address}
opendaylight_service_host: ${_param:opendaylight_server_node01_single_address}
- opendaylight_server_node01_hostname: odl01
- opendaylight_router: odl-router_v2
neutron_tenant_network_types: "flat,vxlan"
- nova_cpu_pinning: "1,2,3,4,5,7,8,9,10,11"
- compute_hugepages_size: 1G
- compute_hugepages_count: 16
- compute_hugepages_mount: /mnt/hugepages_1G
- compute_kernel_isolcpu: ${_param:nova_cpu_pinning}
+{%- if conf.MCP_VCP %}
linux:
network:
host:
names:
- ${_param:opendaylight_server_node01_hostname}
- ${_param:opendaylight_server_node01_hostname}.${_param:cluster_domain}
+{%- endif %}
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_message_queue
+ - cluster.mcp-pike-odl-ha.infra.init_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_triport
- - cluster.baremetal-mcp-pike-common-ha.openstack_proxy
- - cluster.baremetal-mcp-pike-odl-ha.infra
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_triport
+ - cluster.mcp-pike-common-ha.openstack_proxy
+ - cluster.mcp-pike-odl-ha.infra.init_vcp
parameters:
nginx:
server:
site:
- nginx_proxy_opendaylight_web:
- enabled: true
- type: nginx_proxy
- name: opendaylight_web
- check: false
- proxy:
- host: ${_param:opendaylight_service_host}
- port: 8181
- protocol: http
- host:
- name: ${_param:nginx_proxy_openstack_api_host}
- port: 8181
nginx_proxy_opendaylight_rest:
enabled: true
type: nginx_proxy
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_telemetry
+ - cluster.mcp-pike-odl-ha.infra.init_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
classes:
- system.reclass.storage.system.opendaylight_control_single
- system.reclass.storage.system.openstack_gateway_single
- - cluster.virtual-mcp-pike-common-noha.infra.config
- - cluster.virtual-mcp-pike-odl-noha
+ - cluster.mcp-pike-common-noha.infra.config
+ - cluster.mcp-pike-odl-noha
+ - cluster.all-mcp-arch-common.infra.config_pdf
parameters:
reclass:
storage:
single_address: ${_param:opendaylight_service_host}
openstack_gateway_node01:
params:
- tenant_address: 10.1.0.110
- external_address: 10.16.0.110
+ tenant_address: ${_param:opnfv_openstack_gateway_node01_tenant_address}
+ external_address: ${_param:opnfv_openstack_gateway_node01_external_address}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.infra
+ - cluster.mcp-pike-common-noha.infra
parameters:
_param:
- cluster_name: virtual-mcp-pike-odl-noha
+ cluster_name: mcp-pike-odl-noha
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.linux.system.single
- - cluster.all-mcp-arch-common
- - cluster.virtual-mcp-pike-common-noha.init_options
- - cluster.virtual-mcp-pike-odl-noha.infra
- - cluster.virtual-mcp-pike-odl-noha.openstack
+ - cluster.mcp-pike-common-noha.init_options
+ - cluster.mcp-pike-odl-noha.infra
+ - cluster.mcp-pike-odl-noha.openstack
parameters:
_param:
- opendaylight_service_host: 172.16.10.111
+ opendaylight_service_host: ${_param:opnfv_opendaylight_server_node01_single_address}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
classes:
- system.linux.system.repo.mcp.openstack
- system.linux.system.repo.mcp.extra
- - system.opendaylight.server.single
- - cluster.virtual-mcp-pike-odl-noha
+ - service.opendaylight.server.single
+ - cluster.mcp-pike-odl-noha
+ - cluster.mcp-pike-odl-noha.opendaylight.control_pdf
parameters:
_param:
linux_system_codename: xenial
- linux:
- network:
- interface:
- single_int:
- enabled: true
- name: ${_param:opnfv_fn_vm_secondary_interface}
- type: eth
- proto: static
- address: ${_param:single_address}
- netmask: 255.255.255.0
opendaylight:
server:
odl_bind_ip: ${_param:single_address}
odl_default:
- odl-restconf-all
- odl-aaa-authn
- - odl-dlux-all
- - odl-mdsal-apidocs
netvirt:
- odl-netvirt-openstack
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+---
+parameters:
+ linux:
+ network:
+ interface:
+ dhcp_int:
+ enabled: true
+ name: {{ nm.ctl01.nic_admin }}
+ proto: dhcp
+ type: eth
+ single_int:
+ enabled: true
+ name: {{ nm.ctl01.nic_mgmt }}
+ type: eth
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- service.neutron.compute.single
- - cluster.virtual-mcp-pike-common-noha.openstack_compute
- - cluster.virtual-mcp-pike-odl-noha
+ - service.neutron.compute.opendaylight.single
+ - cluster.mcp-pike-common-noha.openstack_compute
+ - cluster.mcp-pike-odl-noha
parameters:
- opendaylight:
- client:
- ovsdb_server_iface: ptcp:6639:127.0.0.1
- ovsdb_odl_iface: tcp:${_param:opendaylight_service_host}:6640
- tunnel_ip: ${_param:tenant_address}
- provider_mappings: physnet1:br-floating
linux:
network:
- gateway: ${_param:openstack_gateway_address}
interface:
external_interface:
enabled: true
+ type: eth
name: ${_param:external_interface}
mtu: ${_param:interface_mtu}
proto: manual
- type: eth
br-mesh:
enabled: true
type: bridge
proto: static
address: ${_param:tenant_address}
netmask: 255.255.255.0
- gateway: 10.1.0.110
use_interfaces:
- ${_param:tenant_interface}
br-floating:
type: bridge
mtu: ${_param:interface_mtu}
address: ${_param:external_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_public_mask}
use_interfaces:
- ${_param:external_interface}
use_ovs_ports:
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.neutron.control.opendaylight.single
- - cluster.virtual-mcp-pike-common-noha.openstack_control
- - cluster.virtual-mcp-pike-odl-noha
+ - cluster.mcp-pike-common-noha.openstack_control
+ - cluster.mcp-pike-odl-noha
parameters:
- neutron:
- server:
- backend:
- router: ${_param:opendaylight_router}
haproxy:
proxy:
listen:
- opendaylight-web:
- type: general-service
- service_name: opendaylight
- binds:
- - address: ${_param:cluster_vip_address}
- port: 8181
- servers:
- - name: odl01
- host: ${_param:opendaylight_service_host}
- port: 8181
- params: ${_param:haproxy_check}
opendaylight-rest:
type: general-service
service_name: opendaylight
host: ${_param:opendaylight_service_host}
port: 8282
params: ${_param:haproxy_check}
+ keystone:
+ server:
+ openrc_extra:
+ # For noHA, all public services are available through haproxy on ctl
+ sdn_controller_ip: ${_param:cluster_vip_address}
+ sdn_username: admin # Hardcoded to default ODL values for now
+ sdn_password: admin
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.openstack_gateway
- - system.neutron.gateway.opendaylight.single
- - cluster.virtual-mcp-pike-odl-noha
+ - cluster.mcp-pike-common-noha.openstack_gateway
+ - service.neutron.gateway.opendaylight.single
+ - cluster.mcp-pike-odl-noha
parameters:
- _param:
- neutron_agents:
- - neutron-dhcp-agent
- - neutron-metadata-agent
- neutron:
- gateway:
- pkgs: ${_param:neutron_agents}
- services: ${_param:neutron_agents}
- backend:
- router: ${_param:opendaylight_router}
- opendaylight:
- client:
- ovsdb_server_iface: ptcp:6639:127.0.0.1
- ovsdb_odl_iface: tcp:${_param:opendaylight_service_host}:6640
- tunnel_ip: ${_param:tenant_address}
- provider_mappings: physnet1:br-floating
linux:
network:
interface:
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.openstack_init
+ - cluster.mcp-pike-common-noha.openstack_init
parameters:
_param:
neutron_tenant_network_types: "flat,vxlan"
network:
host:
odl01:
- address: 172.16.10.111
+ address: ${_param:opnfv_opendaylight_server_node01_single_address}
names:
- odl01
- odl01.${_param:cluster_domain}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.config
- - cluster.baremetal-mcp-pike-ovs-ha.infra
+ - cluster.mcp-pike-common-ha.infra.config
+ - cluster.mcp-pike-ovn-ha.infra
+ - cluster.all-mcp-arch-common.infra.config_pdf
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra
+ - cluster.mcp-pike-ovn-ha.openstack
+parameters:
+ _param:
+ cluster_name: mcp-pike-ovn-ha
--- /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
+##############################################################################
+---
+{%- if conf.MCP_VCP %}
+classes:
+ - cluster.mcp-pike-ovn-ha.infra
+{%- endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{%- if conf.MCP_VCP %}
+# NOTE(armband): we don't want to pull in salt.control for novcp
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_message_queue
- - cluster.baremetal-mcp-pike-odl-ha
+ - cluster.mcp-pike-common-ha.infra.kvm
+ - cluster.mcp-pike-ovn-ha.infra
+{%- endif %}
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra.maas
+ - cluster.mcp-pike-ovn-ha.infra
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- cluster.all-mcp-arch-common
- - cluster.baremetal-mcp-pike-odl-ha.infra
- - cluster.baremetal-mcp-pike-odl-ha.openstack
+ - cluster.mcp-pike-ovn-ha.infra
+ - cluster.mcp-pike-ovn-ha.openstack
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_compute
- - cluster.baremetal-mcp-pike-ovs-ha.openstack.compute_pdf
- - cluster.baremetal-mcp-pike-ovs-ha.infra
+ - cluster.mcp-pike-common-ha.openstack_compute
+ - cluster.mcp-pike-ovn-ha.openstack.compute_pdf
+ - cluster.mcp-pike-ovn-ha.infra
parameters:
nova:
compute:
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
+{%- set nics = { nm.cmp001.nic_private: True } %}
+{%- set vlan_private_start = nm.vlan_private.rsplit('-')[0] %}
+{%- set vlans = { vlan_private_start: nm.cmp001.nic_private } %}
+---
+parameters:
+ linux:
+ network:
+ interface:
+{%- for nic in nics %}
+ {{ nic }}:
+ enabled: true
+ type: eth
+ {%- if nic == nm.cmp001.nic_admin %}
+ proto: dhcp
+ {%- else %}
+ proto: manual
+ {%- endif %}
+ name: {{ nic }}
+{%- endfor %}
+
+{%- for vlan in vlans %}
+ {%- if vlan | int > 0 %}
+ {{ vlans[vlan] }}.{{ vlan }}:
+ enabled: true
+ proto: manual
+ type: vlan
+ name: {{ vlans[vlan] }}.{{ vlan }}
+ use_interfaces:
+ - {{ vlans[vlan] }}
+ {%- endif %}
+{%- endfor %}
+
+ br-mesh:
+ enabled: true
+ type: bridge
+ address: ${_param:tenant_address}
+ netmask: 255.255.255.0
+ mtu: 1500
+ use_interfaces:
+ - {{ nm.cmp001.nic_private }}{% if vlan_private_start | int > 0 %}.{{ vlan_private_start }}{% endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.neutron.control.openvswitch.cluster
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_control
- - cluster.baremetal-mcp-pike-ovs-ha.infra
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_control
+ - cluster.mcp-pike-ovn-ha.infra
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_database
+ - cluster.mcp-pike-ovn-ha.infra_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.openstack_init
+ - cluster.mcp-pike-common-ha.openstack_init
parameters:
_param:
neutron_tenant_network_types: "flat,vxlan"
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_message_queue
+ - cluster.mcp-pike-ovn-ha.infra_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.infra.maas
- - cluster.baremetal-mcp-pike-odl-ha.infra
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_triport
+ - cluster.mcp-pike-common-ha.openstack_proxy
+ - cluster.mcp-pike-ovn-ha.infra_vcp
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_telemetry
+ - cluster.mcp-pike-ovn-ha.infra_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.infra.config
- - cluster.virtual-mcp-pike-ovn-noha
+ - cluster.mcp-pike-common-noha.infra.config
+ - cluster.mcp-pike-ovn-noha
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.infra
+ - cluster.mcp-pike-common-noha.infra
parameters:
_param:
- cluster_name: virtual-mcp-pike-ovn-noha
+ cluster_name: mcp-pike-ovn-noha
--- /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
+##############################################################################
+---
+classes:
+ - system.linux.system.single
+ - cluster.mcp-pike-common-noha.init_options
+ - cluster.mcp-pike-ovn-noha.infra
+ - cluster.mcp-pike-ovn-noha.openstack
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- service.neutron.compute.ovn.single
- - cluster.virtual-mcp-pike-common-noha.openstack_compute
- - cluster.virtual-mcp-pike-ovn-noha
+ - cluster.mcp-pike-common-noha.openstack_compute
+ - cluster.mcp-pike-ovn-noha
parameters:
+ neutron:
+ compute:
+ controller_vip: ${_param:cluster_local_address}
linux:
network:
interface:
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.neutron.control.ovn.single
- - cluster.virtual-mcp-pike-common-noha.openstack_control
- - cluster.virtual-mcp-pike-ovn-noha
+ - cluster.mcp-pike-common-noha.openstack_control
+ - cluster.mcp-pike-ovn-noha
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-noha.openstack_init
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra.config
+ - cluster.mcp-pike-ovs-dpdk-ha.infra
+ - cluster.all-mcp-arch-common.infra.config_dpdk_pdf
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.infra
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.openstack
+ - cluster.mcp-pike-common-ha.infra
+ - cluster.mcp-pike-ovs-dpdk-ha.openstack
parameters:
_param:
- cluster_name: baremetal-mcp-pike-ovs-dpdk-ha
+ cluster_name: mcp-pike-ovs-dpdk-ha
linux:
system:
service:
--- /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
+##############################################################################
+---
+{%- if conf.MCP_VCP %}
+classes:
+ - cluster.mcp-pike-ovs-dpdk-ha.infra
+{%- endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{%- if conf.MCP_VCP %}
+# NOTE(armband): we don't want to pull in salt.control for novcp
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_message_queue
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha
+ - cluster.mcp-pike-common-ha.infra.kvm
+ - cluster.mcp-pike-ovs-dpdk-ha.infra
+{%- endif %}
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra.maas
+ - cluster.mcp-pike-ovs-dpdk-ha.infra
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- cluster.all-mcp-arch-common
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.openstack
+ - cluster.mcp-pike-ovs-dpdk-ha.infra
+ - cluster.mcp-pike-ovs-dpdk-ha.openstack
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_compute
+ - cluster.mcp-pike-ovs-dpdk-ha.infra
+ - cluster.mcp-pike-ovs-dpdk-ha.openstack.compute_pdf
+ - system.neutron.compute.nfv.dpdk
+parameters:
+ neutron:
+ gateway:
+ dpdk: 'True'
+ vhost_socket_dir: ${_param:compute_ovs_vhost_socket_dir}
+ backend:
+ tenant_vlan_range: ${_param:neutron_tenant_vlan_range}
+ nova:
+ compute:
+ libvirt_service: libvirtd
+ libvirt_bin: /etc/default/libvirtd
+ linux:
+ system:
+ kernel:
+ isolcpu: ${_param:compute_kernel_isolcpu}
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+---
+parameters:
+ linux:
+ network:
+ ovs_nowait: true
+ interface:
+ dpdk0:
+ name: ${_param:dpdk0_name}
+ pci: ${_param:dpdk0_pci}
+ driver: ${_param:dpdk0_driver}
+ enabled: true
+ bridge: br-prv
+ type: dpdk_ovs_port
+ n_rxq: ${_param:dpdk0_n_rxq}
+ br-prv:
+ enabled: true
+ type: dpdk_ovs_bridge
+ br-floating:
+ datapath_type: netdev
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.neutron.control.openvswitch.cluster
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_control
- - cluster.baremetal-mcp-pike-ovs-dpdk-ha.infra
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_control
+ - cluster.mcp-pike-ovs-dpdk-ha.infra
parameters:
neutron:
server:
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_database
+ - cluster.mcp-pike-ovs-dpdk-ha.infra.init_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.infra
- - cluster.baremetal-mcp-pike-ovs-ha.openstack
+ - cluster.mcp-pike-common-ha.openstack_init
parameters:
_param:
- cluster_name: baremetal-mcp-pike-ovs-ha
+ neutron_tenant_network_types: "flat,vlan"
+ neutron_tenant_vlan_range: ${_param:opnfv_net_tenant_vlan}
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_message_queue
+ - cluster.mcp-pike-ovs-dpdk-ha.infra.init_vcp
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_triport
+ - cluster.mcp-pike-common-ha.openstack_proxy
+ - cluster.mcp-pike-ovs-dpdk-ha.infra.init_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-common-ha.infra
- - cluster.baremetal-mcp-pike-odl-ha.openstack
-parameters:
- _param:
- cluster_name: baremetal-mcp-pike-odl-ha
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_telemetry
+ - cluster.mcp-pike-ovs-dpdk-ha.infra.init_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.reclass.storage.system.openstack_gateway_single
- - cluster.virtual-mcp-pike-common-noha.infra.config
- - cluster.virtual-mcp-pike-ovs-dpdk-noha
+ - cluster.mcp-pike-common-noha.infra.config
+ - cluster.mcp-pike-ovs-dpdk-noha
+ - cluster.all-mcp-arch-common.infra.config_dpdk_pdf
parameters:
reclass:
storage:
node:
- openstack_compute_node01:
- params:
- dpdk0_name: ${_param:opnfv_fn_vm_tertiary_interface}
- dpdk0_pci: '"0000:00:05.0"'
- openstack_compute_node02:
- params:
- dpdk0_name: ${_param:opnfv_fn_vm_tertiary_interface}
- dpdk0_pci: '"0000:00:05.0"'
openstack_gateway_node01:
params:
- tenant_address: 10.1.0.110
- external_address: 10.16.0.110
+ tenant_address: ${_param:opnfv_openstack_gateway_node01_tenant_address}
+ external_address: ${_param:opnfv_openstack_gateway_node01_external_address}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.infra
+ - cluster.mcp-pike-common-noha.infra
parameters:
_param:
- cluster_name: virtual-mcp-pike-ovs-noha
+ cluster_name: mcp-pike-ovs-dpdk-noha
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.linux.system.single
- - cluster.all-mcp-arch-common
- - cluster.virtual-mcp-pike-common-noha.init_options
- - cluster.virtual-mcp-pike-ovn-noha.infra
- - cluster.virtual-mcp-pike-ovn-noha.openstack
+ - cluster.mcp-pike-common-noha.init_options
+ - cluster.mcp-pike-ovs-dpdk-noha.infra
+ - cluster.mcp-pike-ovs-dpdk-noha.openstack
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
- system.nova.compute.nfv.hugepages
- system.neutron.compute.nfv.dpdk
- service.neutron.compute.single
- - cluster.virtual-mcp-pike-common-noha.openstack_compute
- - cluster.virtual-mcp-pike-ovs-dpdk-noha
+ - cluster.mcp-pike-common-noha.openstack_compute
+ - cluster.mcp-pike-ovs-dpdk-noha
parameters:
neutron:
compute:
dpdk0:
name: ${_param:dpdk0_name}
pci: ${_param:dpdk0_pci}
- driver: igb_uio
+ driver: ${_param:dpdk0_driver}
enabled: true
bridge: br-prv
type: dpdk_ovs_port
- n_rxq: 2
+ n_rxq: ${_param:dpdk0_n_rxq}
br-prv:
enabled: true
type: dpdk_ovs_bridge
+ tenant_interface:
+ type: dpdk # Not a meaningful type, just match 'dpdk' for filtering
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.neutron.control.openvswitch.single
- - cluster.virtual-mcp-pike-common-noha.openstack_control
- - cluster.virtual-mcp-pike-ovs-dpdk-noha
+ - cluster.mcp-pike-common-noha.openstack_control
+ - cluster.mcp-pike-ovs-dpdk-noha
parameters:
neutron:
server:
backend:
- tenant_vlan_range: 1000:1999
+ tenant_vlan_range: ${_param:opnfv_net_tenant_vlan}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.openstack_gateway
+ - cluster.mcp-pike-common-noha.openstack_gateway
- service.neutron.gateway.single
- - cluster.virtual-mcp-pike-ovs-dpdk-noha
+ - cluster.mcp-pike-ovs-dpdk-noha
parameters:
neutron:
gateway:
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-noha.openstack_init
+parameters:
+ _param:
+ neutron_tenant_network_types: "flat,vlan"
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra.config
+ - cluster.mcp-pike-ovs-ha.infra
+ - cluster.all-mcp-arch-common.infra.config_pdf
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra
+ - cluster.mcp-pike-ovs-ha.openstack
+parameters:
+ _param:
+ cluster_name: mcp-pike-ovs-ha
--- /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
+##############################################################################
+---
+{%- if conf.MCP_VCP %}
+classes:
+ - cluster.mcp-pike-ovs-ha.infra
+{%- endif %}
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
+{%- if conf.MCP_VCP %}
+# NOTE(armband): we don't want to pull in salt.control for novcp
classes:
- - cluster.baremetal-mcp-pike-common-ha.openstack_interface_vcp_biport
- - cluster.baremetal-mcp-pike-common-ha.openstack_message_queue
- - cluster.baremetal-mcp-pike-ovs-ha
+ - cluster.mcp-pike-common-ha.infra.kvm
+ - cluster.mcp-pike-ovs-ha.infra
+{%- endif %}
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.infra.maas
+ - cluster.mcp-pike-ovs-ha.infra
--- /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
+##############################################################################
+---
+classes:
+ - cluster.all-mcp-arch-common
+ - cluster.mcp-pike-ovs-ha.infra
+ - cluster.mcp-pike-ovs-ha.openstack
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_compute
+ - cluster.mcp-pike-ovs-ha.openstack.compute_pdf
+ - cluster.mcp-pike-ovs-ha.infra
+parameters:
+ nova:
+ compute:
+ libvirt_service: libvirtd
+ libvirt_bin: /etc/default/libvirtd
--- /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
+##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
+{%- set nics = { nm.cmp001.nic_private: True } %}
+{%- set vlan_private_start = nm.vlan_private.rsplit('-')[0] %}
+{%- set vlans = { vlan_private_start: nm.cmp001.nic_private } %}
+---
+parameters:
+ linux:
+ network:
+ interface:
+{%- for nic in nics %}
+ {{ nic }}:
+ enabled: true
+ type: eth
+ {%- if nic == nm.cmp001.nic_admin %}
+ proto: dhcp
+ {%- else %}
+ proto: manual
+ {%- endif %}
+ name: {{ nic }}
+{%- endfor %}
+
+{%- for vlan in vlans %}
+ {%- if vlan | int > 0 %}
+ {{ vlans[vlan] }}.{{ vlan }}:
+ enabled: true
+ proto: manual
+ type: vlan
+ name: {{ vlans[vlan] }}.{{ vlan }}
+ use_interfaces:
+ - {{ vlans[vlan] }}
+ {%- endif %}
+{%- endfor %}
+
+ br-mesh:
+ enabled: true
+ type: bridge
+ address: ${_param:tenant_address}
+ netmask: 255.255.255.0
+ mtu: 1500
+ use_interfaces:
+ - {{ nm.cmp001.nic_private }}{% if vlan_private_start | int > 0 %}.{{ vlan_private_start }}{% endif %}
--- /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
+##############################################################################
+---
+classes:
+ - system.neutron.control.openvswitch.cluster
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_control
+ - cluster.mcp-pike-ovs-ha.infra
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_database
+ - cluster.mcp-pike-ovs-ha.infra.init_vcp
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_init
+parameters:
+ _param:
+ neutron_tenant_network_types: "flat,vxlan"
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_message_queue
+ - cluster.mcp-pike-ovs-ha.infra.init_vcp
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_triport
+ - cluster.mcp-pike-common-ha.openstack_proxy
+ - cluster.mcp-pike-ovs-ha.infra.init_vcp
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-ha.openstack_interface_vcp_biport
+ - cluster.mcp-pike-common-ha.openstack_telemetry
+ - cluster.mcp-pike-ovs-ha.infra.init_vcp
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.reclass.storage.system.openstack_gateway_single
- - cluster.virtual-mcp-pike-common-noha.infra.config
- - cluster.virtual-mcp-pike-ovs-noha
+ - cluster.mcp-pike-common-noha.infra.config
+ - cluster.mcp-pike-ovs-noha
+ - cluster.all-mcp-arch-common.infra.config_pdf
parameters:
reclass:
storage:
node:
openstack_gateway_node01:
params:
- tenant_address: 10.1.0.110
- external_address: 10.16.0.110
+ tenant_address: ${_param:opnfv_openstack_gateway_node01_tenant_address}
+ external_address: ${_param:opnfv_openstack_gateway_node01_external_address}
-#!/bin/bash -e
##############################################################################
# Copyright (c) 2018 Mirantis Inc., Enea AB and others.
# All rights reserved. This program and the accompanying materials
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-noha.infra
-CI_DEBUG=${CI_DEBUG:-0}; [[ "${CI_DEBUG}" =~ (false|0) ]] || set -x
-
-salt -I 'neutron:gateway' cmd.run 'ifup --force --ignore-errors br-ex'
+parameters:
+ _param:
+ cluster_name: mcp-pike-ovs-noha
--- /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
+##############################################################################
+---
+classes:
+ - system.linux.system.single
+ - cluster.mcp-pike-common-noha.init_options
+ - cluster.mcp-pike-ovs-noha.infra
+ - cluster.mcp-pike-ovs-noha.openstack
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- service.neutron.compute.single
- - cluster.virtual-mcp-pike-common-noha.openstack_compute
- - cluster.virtual-mcp-pike-ovs-noha
+ - cluster.mcp-pike-common-noha.openstack_compute
+ - cluster.mcp-pike-ovs-noha
parameters:
linux:
network:
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
---
classes:
- system.neutron.control.openvswitch.single
- - cluster.virtual-mcp-pike-common-noha.openstack_control
- - cluster.virtual-mcp-pike-ovs-noha
+ - cluster.mcp-pike-common-noha.openstack_control
+ - cluster.mcp-pike-ovs-noha
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-common-noha.openstack_gateway
+ - cluster.mcp-pike-common-noha.openstack_gateway
- service.neutron.gateway.single
- - cluster.virtual-mcp-pike-ovs-noha
+ - cluster.mcp-pike-ovs-noha
parameters:
linux:
network:
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-common-noha.openstack_init
+parameters:
+ _param:
+ neutron_tenant_network_types: "flat,vxlan"
+++ /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
-##############################################################################
----
-classes:
- - system.linux.system.single
- - cluster.all-mcp-arch-common
- - cluster.virtual-mcp-pike-common-noha.init_options
- - cluster.virtual-mcp-pike-ovs-dpdk-noha.infra
- - cluster.virtual-mcp-pike-ovs-dpdk-noha.openstack
+++ /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
-##############################################################################
----
-classes:
- - cluster.virtual-mcp-pike-common-noha.openstack_init
-parameters:
- _param:
- neutron_tenant_network_types: "flat,vlan"
- compute_hugepages_size: 2M
- compute_hugepages_count: 2048
- compute_hugepages_mount: /mnt/hugepages_2M
- compute_dpdk_driver: uio
- compute_ovs_pmd_cpu_mask: "0x6"
- compute_ovs_dpdk_socket_mem: "1024"
- compute_ovs_dpdk_lcore_mask: "0x8"
- compute_ovs_memory_channels: "2"
+++ /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
-##############################################################################
----
-classes:
- - system.linux.system.single
- - cluster.all-mcp-arch-common
- - cluster.virtual-mcp-pike-common-noha.init_options
- - cluster.virtual-mcp-pike-ovs-noha.infra
- - cluster.virtual-mcp-pike-ovs-noha.openstack
-Subproject commit 86594f66eb239eda9424b58c96914fdb27e3e7ff
+Subproject commit 198b5b7459c9f602ded773e966888705d866f6dd
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-odl-ha.infra.config
+ - cluster.mcp-pike-odl-ha.infra.config
parameters:
_param:
linux_system_codename: xenial
linux:
system:
name: cfg01
- domain: baremetal-mcp-pike-odl-ha.local
+ domain: mcp-pike-odl-ha.local
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-ovn-noha.infra.config
+ - cluster.mcp-pike-odl-noha.infra.config
parameters:
_param:
linux_system_codename: xenial
linux:
system:
name: cfg01
- domain: virtual-mcp-pike-ovn-noha.local
+ domain: mcp-pike-odl-noha.local
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-ovn-ha.infra.config
+parameters:
+ _param:
+ linux_system_codename: xenial
+ reclass_data_revision: master
+ linux:
+ system:
+ name: cfg01
+ domain: mcp-pike-ovn-ha.local
##############################################################################
---
classes:
- - cluster.baremetal-mcp-pike-ovs-ha.infra.config
+ - cluster.mcp-pike-ovn-noha.infra.config
parameters:
_param:
linux_system_codename: xenial
linux:
system:
name: cfg01
- domain: baremetal-mcp-pike-ovs-ha.local
+ domain: mcp-pike-ovn-noha.local
##############################################################################
---
classes:
- - cluster.virtual-mcp-pike-odl-noha.infra.config
+ - cluster.mcp-pike-ovs-dpdk-ha.infra.config
parameters:
_param:
linux_system_codename: xenial
linux:
system:
name: cfg01
- domain: virtual-mcp-pike-odl-noha.local
+ domain: mcp-pike-ovs-dpdk-ha.local
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-ovs-dpdk-noha.infra.config
+parameters:
+ _param:
+ linux_system_codename: xenial
+ reclass_data_revision: master
+ linux:
+ system:
+ name: cfg01
+ domain: mcp-pike-ovs-dpdk-noha.local
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-ovs-ha.infra.config
+parameters:
+ _param:
+ linux_system_codename: xenial
+ reclass_data_revision: master
+ linux:
+ system:
+ name: cfg01
+ domain: mcp-pike-ovs-ha.local
--- /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
+##############################################################################
+---
+classes:
+ - cluster.mcp-pike-ovs-noha.infra.config
+parameters:
+ _param:
+ linux_system_codename: xenial
+ reclass_data_revision: master
+ linux:
+ system:
+ name: cfg01
+ domain: mcp-pike-ovs-noha.local
+++ /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
-##############################################################################
----
-classes:
- - cluster.virtual-mcp-pike-ovs-dpdk-noha.infra.config
-parameters:
- _param:
- linux_system_codename: xenial
- reclass_data_revision: master
- linux:
- system:
- name: cfg01
- domain: virtual-mcp-pike-ovs-dpdk-noha.local
+++ /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
-##############################################################################
----
-classes:
- - cluster.virtual-mcp-pike-ovs-noha.infra.config
-parameters:
- _param:
- linux_system_codename: xenial
- reclass_data_revision: master
- linux:
- system:
- name: cfg01
- domain: virtual-mcp-pike-ovs-noha.local
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:
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'] }}"
+ - 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) 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 set_storage_layout via _modules/maas.py
+set_storage_layout:
+ 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 set-storage-layout {{ pillar['system_id'] }} storage_layout={{ pillar['storage_layout'] | default('lvm') }} lv_size={{ pillar['lv_size'] | default('100%') }}"
+ - 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') }}/24
+ - save: True
+
+iptables_pxe_source:
+ iptables.append:
+ - table: filter
+ - chain: INPUT
+ - jump: ACCEPT
+ - destination: 0/0
+ - source: {{ salt['pillar.get']('_param:single_address') }}/24
+ - save: True
+
+iptables_pxe_destination:
+ iptables.append:
+ - table: filter
+ - chain: INPUT
+ - jump: ACCEPT
+ - destination: {{ salt['pillar.get']('_param:single_address') }}/24
+ - source: 0/0
+ - save: True
+++ /dev/null
-##############################################################################
-# Copyright (c) 2017 Mirantis Inc. 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 "opendaylight/map.jinja" import client with context %}
-{%- if client.get('enabled', True) %}
-
-opendaylight_client_packages:
- pkg.installed:
- - pkgs: {{ client.pkgs }}
-
-{%- if pillar.linux.network.bridge is defined and pillar.linux.network.bridge == 'openvswitch' %}
-ovs_set_manager:
- cmd.run:
- - name: "ovs-vsctl set-manager {{ client.ovsdb_server_iface }} {{ client.ovsdb_odl_iface }}"
- - unless: "ovs-vsctl get-manager | grep -Fx {{ client.ovsdb_odl_iface }}"
-
-ovs_set_tunnel_endpoint:
- cmd.run:
- - name: "ovs-vsctl set Open_vSwitch . other_config:local_ip={{ client.tunnel_ip }}"
- - unless: "ovs-vsctl get Open_vSwitch . other_config | fgrep local_ip"
- - require:
- - cmd: ovs_set_manager
-
-{%- if client.provider_mappings is defined %}
-ovs_set_provider_mapping:
- cmd.run:
- - name: "ovs-vsctl set Open_vSwitch . other_config:provider_mappings={{ client.provider_mappings }}"
- - unless: "ovs-vsctl get Open_vSwitch . other_config | fgrep provider_mappings"
- - require:
- - cmd: ovs_set_manager
-{%- endif %}
-
-{%- endif %}
-{%- endif %}
<Property name="jetty.host"/>
</Set>
<Set name="port">
- <Property name="jetty.port" default="8181"/>
+ <Property name="jetty.port" default="{{ server.odl_rest_port }}"/>
</Set>
<Set name="idleTimeout">
<Property name="http.timeout" default="300000"/>
</Arg>
</Call>
- <Call name="addConnector">
- <Arg>
- <New class="org.eclipse.jetty.server.ServerConnector">
- <Arg name="server">
- <Ref refid="Server" />
- </Arg>
- <Arg name="factories">
- <Array type="org.eclipse.jetty.server.ConnectionFactory">
- <Item>
- <New class="org.eclipse.jetty.server.HttpConnectionFactory">
- <Arg name="config">
- <Ref refid="http-legacy" />
- </Arg>
- </New>
- </Item>
- </Array>
- </Arg>
- <Set name="host">{{ server.odl_bind_ip }}
- <Property name="jetty.host"/>
- </Set>
- <Set name="port">
- <Property name="jetty.port" default="{{ server.odl_rest_port }}"/>
- </Set>
- <Set name="idleTimeout">
- <Property name="http.timeout" default="300000"/>
- </Set>q
- <Set name="name">jetty-legacy</Set>
- </New>
- </Arg>
- </Call>
-
<!-- =========================================================== -->
<!-- Configure Authentication Realms -->
<!-- Realms may be configured for the entire server here, or -->
# export KARAF_OPTS # Additional available Karaf options
# export KARAF_DEBUG # Enable debug mode
# export KARAF_REDIRECT # Enable/set the std/err redirection when using bin/start
-
'karaf_features': {'default': ['standard', 'wrap', 'ssh']},
'odl_rest_port': '8282',
'odl_bind_ip': '0.0.0.0',
- 'repo': 'odl-team/nitrogen',
+ 'repo': 'odl-team/oxygen',
'log_levels': {},
'enable_ha': false,
'ha_node_ips': [],
'repo': 'opendaylight-6-testing'
},
}, merge=salt['pillar.get']('opendaylight:server')) %}
-
-{%- set client = salt['grains.filter_by']({
- 'Debian': {
- 'pkgs': ['python-networking-odl'],
- },
-}, merge=salt['pillar.get']('opendaylight:client')) %}
- name: "apt-key adv --keyserver keyserver.ubuntu.com --recv 44C05248"
{%- if system.proxy is defined and system.proxy.keyserver is defined %}
- env:
-{%- if system.proxy.keyserver.http is defined %}
+{%- if system.proxy.keyserver.http is defined and grains['dns']['nameservers'][0] in system.proxy.keyserver.http %}
- http_proxy: {{ system.proxy.keyserver.http }}
{%- endif %}
-{%- if system.proxy.keyserver.https is defined %}
+{%- if system.proxy.keyserver.https is defined and grains['dns']['nameservers'][0] in system.proxy.keyserver.https %}
- https_proxy: {{ system.proxy.keyserver.https }}
{%- endif %}
{%- endif %}
# https://github.com/saltstack/salt/pull/45224
# - ppa: {{ server.repo }}
- human_name: opendaylight-ppa
- - name: deb http://ppa.launchpad.net/odl-team/nitrogen/ubuntu xenial main
- - file: /etc/apt/sources.list.d/odl-team-ubuntu-nitrogen-xenial.list
+ - name: deb http://ppa.launchpad.net/odl-team/{{ server.version }}/ubuntu xenial main
+ - file: /etc/apt/sources.list.d/odl-team-ubuntu-{{ server.version }}-xenial.list
opendaylight:
pkg.installed:
- ini: /opt/opendaylight/etc/org.apache.karaf.features.cfg
- ini: /opt/opendaylight/etc/org.ops4j.pax.web.cfg
+# TODO: use service.masked state once salt get updated to 2017.7.0+
+service.mask:
+ module.run:
+ - m_name: opendaylight
+ - require_in:
+ - pkg: opendaylight
+
/opt/opendaylight/etc/jetty.xml:
file.managed:
- source: salt://opendaylight/files/jetty.xml
ini.options_present:
- sections:
org.ops4j.pax.web.listening.addresses: {{ server.odl_bind_ip }}
+ org.osgi.service.http.port: {{ server.odl_rest_port }}
{%- if server.get('router_enabled', false) %}
/opt/opendaylight/etc/custom.properties:
--- /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/local/sbin/route:
+ file.managed:
+ - contents: |
+ #!/bin/sh
+
+ # Workaround salt-managed routes breaking ifup when route already exists
+ route_binary='/sbin/route'
+ route_output=$("${route_binary}" "$@" 2>&1)
+ route_return=$?
+
+ if [ -n "${route_output}" ]; then
+ if echo "${route_output}" | grep -q 'SIOCADDRT: File exists'; then
+ exit 0
+ fi
+ echo "${route_output}"
+ fi
+ exit "${route_return}"
+ - user: root
+ - group: root
+ - mode: 755
--- /dev/null
+mcp.rsa*
+user-data.*.sh
+xdf_data.sh
export SSH_KEY=${SSH_KEY:-"/var/lib/opnfv/mcp.rsa"}
export SALT_MASTER=${INSTALLER_IP:-10.20.0.2}
export SALT_MASTER_USER=${SALT_MASTER_USER:-ubuntu}
+
+# Derived from INSTALLER_IP
+export MCPCONTROL_NET=${MCPCONTROL_NET:-${SALT_MASTER%.*}.0}
+export MCPCONTROL_PREFIX=${MCPCONTROL_PREFIX:-24}
export MAAS_IP=${MAAS_IP:-${SALT_MASTER%.*}.3}
-# Derivated from above global vars
+# Derived from above global vars, not overideable
export SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ${SSH_KEY}"
export SSH_SALT="${SALT_MASTER_USER}@${SALT_MASTER}"
+
+##############################################################################
+# BEGIN of colored notification wrappers
+#
+
+# same as `notify_i` + trailing '\n';
+function notify() {
+ local msg=${1}; shift
+ notify_i "${msg}\n" "$@"
+}
+
+# Inline (no newline added) colored output notification wrapper
+function notify_i() {
+ tput setaf "${2:-1}" || true
+ echo -en "${1:-"[WARN] Unsupported opt arg: $3\\n"}"
+ tput sgr0
+}
+
+# same as `notify` + extra '\n' before and after;
+function notify_n() {
+ local msg=${1}; shift
+ notify_i "\n${msg}\n\n" "$@"
+}
+
+# same as `notify` + stderr output + exit;
+function notify_e() {
+ local msg=${1}; shift
+ notify_i "\n${msg}\n\n" "$@" 1>&2
+ exit 1
+}
+#
+# END of colored notification wrapper
+##############################################################################
#!/bin/bash -e
-# shellcheck disable=SC2155,SC1001
+# shellcheck disable=SC2155,SC1001,SC2015,SC2128
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
function __kernel_modules {
# Load mandatory kernel modules: loop, nbd
local image_dir=$1
- sudo modprobe loop
+ test -e /dev/loop-control || sudo modprobe loop
if sudo modprobe nbd max_part=8 || sudo modprobe -f nbd max_part=8; then
return 0
fi
+ if [ -e /dev/nbd0 ]; then return 0; fi # nbd might be inbuilt
# CentOS (or RHEL family in general) do not provide 'nbd' out of the box
echo "[WARN] 'nbd' kernel module cannot be loaded!"
if [ ! -e /etc/redhat-release ]; then
break
fi
done
- OPNFV_LOOP_DEV=$(losetup -f)
+ OPNFV_LOOP_DEV=$(sudo losetup -f)
OPNFV_MAP_DEV=/dev/mapper/$(basename "${OPNFV_NBD_DEV}")p1
export OPNFV_MNT_DIR OPNFV_LOOP_DEV
[ -n "${OPNFV_NBD_DEV}" ] && [ -n "${OPNFV_LOOP_DEV}" ] || exit 1
fi
fi
if [ -n "${OPNFV_LOOP_DEV}" ] && \
- losetup "${OPNFV_LOOP_DEV}" 1>&2 > /dev/null; then
+ sudo losetup "${OPNFV_LOOP_DEV}" 1>&2 > /dev/null; then
sudo losetup -d "${OPNFV_LOOP_DEV}"
fi
if [ -n "${OPNFV_NBD_DEV}" ]; then
function cleanup_uefi {
# Clean up Ubuntu boot entry if cfg01, kvm nodes online from previous deploy
local cmd_str="ssh ${SSH_OPTS} ${SSH_SALT}"
+ ping -c 1 -w 1 "${SALT_MASTER}" || return 0
[ ! "$(hostname)" = 'cfg01' ] || cmd_str='eval'
${cmd_str} "sudo salt -C 'kvm* or cmp*' cmd.run \
\"which efibootmgr > /dev/null 2>&1 && \
ln -sf "${image_dir}/${_tmp}" "${image_dir}/${image}"
fi
- envsubst < user-data.template > user-data.sh # CWD should be <mcp/scripts>
-
# Create config ISO and resize OS disk image for each foundation node VM
for node in "${vnodes[@]}"; do
- ./create-config-drive.sh -k "$(basename "${SSH_KEY}").pub" -u user-data.sh \
- -h "${node}" "${image_dir}/mcp_${node}.iso"
+ if [[ "${node}" =~ ^(cfg01|mas01) ]]; then
+ user_data='user-data.mcp.sh'
+ else
+ user_data='user-data.admin.sh'
+ fi
+ ./create-config-drive.sh -k "$(basename "${SSH_KEY}").pub" \
+ -u "${user_data}" -h "${node}" "${image_dir}/mcp_${node}.iso"
cp "${image_dir}/${image}" "${image_dir}/mcp_${node}.qcow2"
qemu-img resize "${image_dir}/mcp_${node}.qcow2" 100G
+ # Prepare dedicated drive for cinder on cmp nodes
+ if [[ "${node}" =~ ^(cmp) ]]; then
+ qemu-img create "${image_dir}/mcp_${node}_storage.qcow2" 100G
+ fi
done
# VCP VMs base image specific changes
fi
}
+function jumpserver_pkg_install {
+ if [ -n "$(command -v apt-get)" ]; then
+ pkg_type='deb'; pkg_cmd='sudo apt-get install -y'
+ else
+ pkg_type='rpm'; pkg_cmd='sudo yum install -y --skip-broken'
+ fi
+ eval "$(parse_yaml "./requirements_${pkg_type}.yaml")"
+ for section in 'common' "$(uname -i)"; do
+ section_var="requirements_pkg_${section}[*]"
+ pkg_list+=" ${!section_var}"
+ done
+ # shellcheck disable=SC2086
+ ${pkg_cmd} ${pkg_list}
+}
+
+function jumpserver_check_requirements {
+ # shellcheck disable=SC2178
+ local vnodes=$1; shift
+ local br=("$@")
+ local err_br_not_found='Linux bridge not found!'
+ local err_br_virsh_net='is a virtual network, Linux bridge expected!'
+ local warn_br_endpoint="Endpoints might be inaccessible from external hosts!"
+ # MaaS requires a Linux bridge for PXE/admin
+ if [[ "${vnodes}" =~ mas01 ]]; then
+ if ! brctl showmacs "${br[0]}" >/dev/null 2>&1; then
+ notify_e "[ERROR] PXE/admin (${br[0]}) ${err_br_not_found}"
+ fi
+ # Assume virsh network name matches bridge name (true if created by us)
+ if virsh net-info "${br[0]}" >/dev/null 2>&1; then
+ notify_e "[ERROR] ${br[0]} ${err_br_virsh_net}"
+ fi
+ fi
+ # If virtual nodes are present, public should be a Linux bridge
+ if [ "$(echo "${vnodes}" | wc -w)" -gt 2 ]; then
+ if ! brctl showmacs "${br[3]}" >/dev/null 2>&1; then
+ if [[ "${vnodes}" =~ mas01 ]]; then
+ # Baremetal nodes *require* a proper public network
+ notify_e "[ERROR] Public (${br[3]}) ${err_br_not_found}"
+ else
+ notify_n "[WARN] Public (${br[3]}) ${err_br_not_found}" 3
+ notify_n "[WARN] ${warn_br_endpoint}" 3
+ fi
+ fi
+ if virsh net-info "${br[3]}" >/dev/null 2>&1; then
+ if [[ "${vnodes}" =~ mas01 ]]; then
+ notify_e "[ERROR] ${br[3]} ${err_br_virsh_net}"
+ else
+ notify_n "[WARN] ${br[3]} ${err_br_virsh_net}" 3
+ notify_n "[WARN] ${warn_br_endpoint}" 3
+ fi
+ fi
+ fi
+}
+
function create_networks {
local vnode_networks=("$@")
# create required networks, including constant "mcpcontrol"
- # FIXME(alav): since we renamed "pxe" to "mcpcontrol", we need to make sure
- # we delete the old "pxe" virtual network, or it would cause IP conflicts.
- for net in "pxe" "mcpcontrol" "${vnode_networks[@]}"; do
+ for net in "mcpcontrol" "${vnode_networks[@]}"; do
if virsh net-info "${net}" >/dev/null 2>&1; then
virsh net-destroy "${net}" || true
virsh net-undefine "${net}"
fi
# in case of custom network, host should already have the bridge in place
- if [ -f "net_${net}.xml" ] && [ ! -d "/sys/class/net/${net}/bridge" ]; then
- virsh net-define "net_${net}.xml"
+ if [ -f "virsh_net/net_${net}.xml" ] && \
+ [ ! -d "/sys/class/net/${net}/bridge" ]; then
+ virsh net-define "virsh_net/net_${net}.xml"
virsh net-autostart "${net}"
virsh net-start "${net}"
fi
# vnode data should be serialized with the following format:
# '<name0>,<ram0>,<vcpu0>|<name1>,<ram1>,<vcpu1>[...]'
IFS='|' read -r -a vnodes <<< "$1"; shift
- local vnode_networks=("$@")
# AArch64: prepare arch specific arguments
local virt_extra_args=""
IFS=',' read -r -a vnode_data <<< "${serialized_vnode_data}"
# prepare network args
- net_args=" --network network=mcpcontrol,model=virtio"
- if [ "${DEPLOY_TYPE:-}" = 'baremetal' ]; then
+ local vnode_networks=("$@")
+ if [[ "${vnode_data[0]}" =~ ^(cfg01|mas01) ]]; then
+ net_args=" --network network=mcpcontrol,model=virtio"
# 3rd interface gets connected to PXE/Admin Bridge (cfg01, mas01)
vnode_networks[2]="${vnode_networks[0]}"
+ else
+ net_args=" --network bridge=${vnode_networks[0]},model=virtio"
fi
for net in "${vnode_networks[@]:1}"; do
net_args="${net_args} --network bridge=${net},model=virtio"
done
+ # dedicated storage drive for cinder on cmp nodes
+ virt_extra_storage=
+ if [[ "${vnode_data[0]}" =~ ^(cmp) ]]; then
+ virt_extra_storage="--disk path=${image_dir}/mcp_${vnode_data[0]}_storage.qcow2,format=qcow2,bus=virtio,cache=none,io=native"
+ fi
+
# shellcheck disable=SC2086
virt-install --name "${vnode_data[0]}" \
--ram "${vnode_data[1]}" --vcpus "${vnode_data[2]}" \
--cpu host-passthrough --accelerate ${net_args} \
--disk path="${image_dir}/mcp_${vnode_data[0]}.qcow2",format=qcow2,bus=virtio,cache=none,io=native \
+ ${virt_extra_storage} \
--os-type linux --os-variant none \
--boot hd --vnc --console pty --autostart --noreboot \
--disk path="${image_dir}/mcp_${vnode_data[0]}.iso",device=cdrom \
for attempt in $(seq "${total_attempts}"); do
echo "[wait_for] Attempt ${attempt}/${total_attempts%.*} for: ${cmdstr}"
if [ "${total_attempts%.*}" = "${total_attempts}" ]; then
- # shellcheck disable=SC2015
eval "${cmdstr}" && echo "[wait_for] OK: ${cmdstr}" && return 0 || true
else
- !(eval "${cmdstr}" || echo __fuel_wf_failure__) |& tee /dev/stderr | \
- grep -Eq '(Not connected|No response|__fuel_wf_failure__)' && \
- echo "[wait_for] OK: ${cmdstr}" && return 0 || true
+ ! (eval "${cmdstr}" || echo 'No response') |& tee /dev/stderr | \
+ grep -Eq '(Not connected|No response)' && \
+ echo "[wait_for] OK: ${cmdstr}" && return 0 || true
fi
sleep "${sleep_time}"
done
function do_sysctl_cfg {
local _conf='/etc/sysctl.d/99-opnfv-fuel-bridge.conf'
# https://wiki.libvirt.org/page/Net.bridge.bridge-nf-call_and_sysctl.conf
- echo 'net.bridge.bridge-nf-call-arptables = 0' |& sudo tee "${_conf}"
- echo 'net.bridge.bridge-nf-call-iptables = 0' |& sudo tee -a "${_conf}"
- echo 'net.bridge.bridge-nf-call-ip6tables = 0' |& sudo tee -a "${_conf}"
- sudo sysctl -q -p "${_conf}"
+ if modprobe br_netfilter bridge; then
+ echo 'net.bridge.bridge-nf-call-arptables = 0' |& sudo tee "${_conf}"
+ echo 'net.bridge.bridge-nf-call-iptables = 0' |& sudo tee -a "${_conf}"
+ echo 'net.bridge.bridge-nf-call-ip6tables = 0' |& sudo tee -a "${_conf}"
+ # Some distros / sysadmins explicitly blacklist br_netfilter
+ sudo sysctl -q -p "${_conf}" || true
+ fi
}
function get_nova_compute_pillar_data {
local value=$(salt -C 'I@nova:compute and *01*' pillar.get _param:"${1}" --out yaml | cut -d ' ' -f2)
if [ "${value}" != "''" ]; then
- echo ${value}
+ echo "${value}"
fi
}
--- /dev/null
+#!/bin/bash -e
+# shellcheck disable=SC2155,SC1001,SC2015,SC2128
+##############################################################################
+# 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
+##############################################################################
+#
+# Library of shell functions dedicated to j2 template handling
+#
+
+PHAROS_GEN_CFG='./pharos/config/utils/generate_config.py'
+PHAROS_IA='./pharos/config/installers/fuel/pod_config.yml.j2'
+PHAROS_VALIDATE_SCHEMA_SCRIPT='./pharos/config/utils/validate_schema.py'
+PHAROS_SCHEMA_PDF='./pharos/config/pdf/pod1.schema.yaml'
+PHAROS_SCHEMA_IDF='./pharos/config/pdf/idf-pod1.schema.yaml'
+
+# Handles pod_config and scenarios only
+function do_templates_scenario {
+ local image_dir=$1; shift
+ local target_lab=$1; shift
+ local target_pod=$1; shift
+ local lab_config_uri=$1; shift
+ local scenario_dir=$1
+
+ BASE_CONFIG_PDF="${lab_config_uri}/labs/${target_lab}/${target_pod}.yaml"
+ BASE_CONFIG_IDF="${lab_config_uri}/labs/${target_lab}/idf-${target_pod}.yaml"
+ LOCAL_PDF="${image_dir}/$(basename "${BASE_CONFIG_PDF}")"
+ LOCAL_IDF="${image_dir}/$(basename "${BASE_CONFIG_IDF}")"
+
+ # Make sample PDF/IDF available via default lab-config (pharos submodule)
+ ln -sf "$(readlink -f "../config/labs/local")" "./pharos/labs/"
+
+ # Expand scenario file and main reclass input (pod_config.yaml) based on PDF
+ if ! curl --create-dirs -o "${LOCAL_PDF}" "${BASE_CONFIG_PDF}"; then
+ notify_e "[ERROR] Could not retrieve PDF (Pod Descriptor File)!"
+ elif ! curl -o "${LOCAL_IDF}" "${BASE_CONFIG_IDF}"; then
+ notify_e "[ERROR] Could not retrieve IDF (Installer Descriptor File)!"
+ fi
+ # Check first if configuration files are valid
+ if [[ ! "$target_pod" =~ "virtual" ]]; then
+ if ! "${PHAROS_VALIDATE_SCHEMA_SCRIPT}" -y "${LOCAL_PDF}" \
+ -s "${PHAROS_SCHEMA_PDF}"; then
+ notify_e "[ERROR] PDF does not match yaml schema!"
+ elif ! "${PHAROS_VALIDATE_SCHEMA_SCRIPT}" -y "${LOCAL_IDF}" \
+ -s "${PHAROS_SCHEMA_IDF}"; then
+ notify_e "[ERROR] IDF does not match yaml schema!"
+ fi
+ fi
+ if ! "${PHAROS_GEN_CFG}" -y "${LOCAL_PDF}" \
+ -j "${PHAROS_IA}" -v > "${image_dir}/pod_config.yml"; then
+ notify_e "[ERROR] Could not convert PDF+IDF to reclass model input!"
+ fi
+ printenv | \
+ awk '/^(SALT|MCP|MAAS).*=/ { gsub(/=/,": "); print }' >> "${LOCAL_PDF}"
+ j2args=$(find "${scenario_dir}" -name '*.j2' -exec echo -j {} \;)
+ # shellcheck disable=SC2086
+ if ! "${PHAROS_GEN_CFG}" -y "${LOCAL_PDF}" ${j2args} -b -v \
+ -i "$(dirname "$(readlink -f "${PHAROS_IA}")")"; then
+ notify_e '[ERROR] Could not convert j2 scenario definitions!'
+ fi
+}
+
+# Expand reclass and virsh network templates based on PDF + IDF + others
+function do_templates_cluster {
+ local image_dir=$1; shift
+ local target_lab=$1; shift
+ local target_pod=$1; shift
+ local git_repo_root=$1; shift
+ local extra_yaml=("$@")
+
+ RECLASS_CLUSTER_DIR=$(cd "${git_repo_root}/mcp/reclass/classes/cluster"; pwd)
+ LOCAL_PDF="${image_dir}/${target_pod}.yaml"
+
+ for _yaml in "${extra_yaml[@]}"; do
+ awk '/^---$/{f=1;next;}f' "${_yaml}" >> "${LOCAL_PDF}"
+ done
+ # shellcheck disable=SC2046
+ j2args=$(find "${RECLASS_CLUSTER_DIR}" "$(readlink -f virsh_net)" $(readlink -f ./*j2) \
+ -name '*.j2' -exec echo -j {} \;)
+ # shellcheck disable=SC2086
+ if ! "${PHAROS_GEN_CFG}" -y "${LOCAL_PDF}" ${j2args} -b -v \
+ -i "$(dirname "$(readlink -f "${PHAROS_IA}")")"; then
+ notify_e '[ERROR] Could not convert PDF to network definitions!'
+ fi
+}
+++ /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
--->
-<network>
- <name>public</name>
- <bridge name="public"/>
- <forward mode="nat"/>
- <ip address="10.16.0.1" netmask="255.255.255.0" />
-</network>
-Subproject commit 77b600ef0d64210c1b5fd72581cfe7752fa00c8c
+Subproject commit 68dc60c1aa7199279995c1fee59ad151b5012af9
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
- rsync
- uuid-runtime
- virtinst
+ # python is indirectly required for PDF parsing
+ - python
+ - python-ipaddress
+ - python-jinja2
+ - python-yaml
+ - python-jsonschema
# Optional, arch-specific requirements, matched by key name = $(uname -m)
aarch64:
# AArch64 VMs use AAVMF (guest UEFI)
- ipxe-qemu
- qemu-efi
- # Optional, deploy-type-specific requirements
- baremetal:
- # For baremetal, python is indirectly required for PDF parsing
- - python
- - python-ipaddress
- - python-jinja2
- - python-yaml
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
- elfutils-libelf-devel
- e2fsprogs
- genisoimage
+ - gcc
+ - gdisk
- git
- kpartx
- libvirt
- util-linux
- virt-install
- wget
- # Optional, arch-specific requirements, matched by key name = $(uname -m)
- aarch64:
- # AArch64 VMs use AAVMF (guest UEFI)
- - AAVMF
- # Optional, deploy-type-specific requirements
- baremetal:
- # For baremetal, python is indirectly required for PDF parsing
+ # For python is indirectly required for PDF parsing
- python
- python-ipaddress
- python-jinja2
- python-yaml
+ - python-jsonschema
+ # Optional, arch-specific requirements, matched by key name = $(uname -m)
+ aarch64:
+ # AArch64 VMs use AAVMF (guest UEFI)
+ - AAVMF
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"
+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
-NODE_MASK='*'
-
-[[ "${CLUSTER_DOMAIN}" =~ virtual ]] || NODE_MASK='mas01*'
+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
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}")
cd /srv/salt/${OPNFV_RDIR} && rm -f arch && ln -sf "\$(uname -i)" arch
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 2016.11 " \
- MASTER_HOSTNAME=cfg01.${CLUSTER_DOMAIN} DISTRIB_REVISION=stable \
+ MASTER_HOSTNAME=cfg01.${CLUSTER_DOMAIN} DISTRIB_REVISION=nightly \
EXTRA_FORMULAS="nfs" \
./salt-master-init.sh
salt-key -Ay
fi
# Init specific to VMs on FN (all for virtual, cfg|mas for baremetal)
- salt -C "${NODE_MASK} or cfg01*" saltutil.sync_all
- wait_for 3.0 'salt -C "${NODE_MASK} or cfg01*" state.apply salt'
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'
- salt -C "${NODE_MASK} and not cfg01*" state.sls linux || true
- salt -C "${NODE_MASK} and not cfg01*" pkg.upgrade refresh=False
+ 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' || true
+ salt -C "E@^(${NODE_MASK}).*" state.sls opnfv.route_wrapper
+ 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'
- salt -C "${NODE_MASK} or cfg01*" state.sls ntp
+ 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
-
- # symlink manually until package with required commit is available
- cd /usr/share/salt-formulas/env/aodh/files
- ln -sf ocata pike
SALT_INSTALL_END
# Collect jump server system information for deploy debugging
#
+# HW info
+cat /proc/cpuinfo
+free -mh
+df -h
+
# Network info
brctl show
+ip a
+route -n
# Distro & pkg info
cat /etc/*-release
uname -a
+
+# Misc info
+sudo losetup -a
--- /dev/null
+#!/bin/bash
+##############################################################################
+# 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
+##############################################################################
+rm /etc/salt/minion_id
+rm -f /etc/salt/pki/minion/minion_master.pub
+echo "id: $(hostname).{{ conf.cluster.domain }}" > /etc/salt/minion
+{#- should be in sync with 'opnfv_infra_config_pxe_address' in 'pharos/config/installers/fuel/pod_config.yml.j2 #}
+echo "master: {{ conf.idf.net_config.admin.network | ipaddr_index(2) }}" >> /etc/salt/minion
+service salt-minion restart
#!/bin/bash
##############################################################################
-# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# 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
##############################################################################
rm /etc/salt/minion_id
rm -f /etc/salt/pki/minion/minion_master.pub
-echo "id: $(hostname).${CLUSTER_DOMAIN}" > /etc/salt/minion
-echo "master: ${SALT_MASTER}" >> /etc/salt/minion
+echo "id: $(hostname).{{ conf.cluster.domain }}" > /etc/salt/minion
+echo "master: {{ conf.SALT_MASTER }}" >> /etc/salt/minion
service salt-minion restart
which accompanies this distribution, and is available at
http://www.apache.org/licenses/LICENSE-2.0
-->
+{#- conf.MCPCONTROL_NET & co are mandatory, defaults are set via globals.sh #}
<network>
<name>mcpcontrol</name>
<bridge name="mcpcontrol"/>
<forward mode="nat"/>
- <ip address="${SALT_MASTER%.*}.1" netmask="255.255.255.0">
+ <ip address="{{ conf.MCPCONTROL_NET | ipaddr_index(1) }}" netmask="{{ conf.MCPCONTROL_PREFIX | netmask }}">
<dhcp>
- <range start="${SALT_MASTER%.*}.2" end="${SALT_MASTER%.*}.254"/>
+ <range start="{{ conf.MCPCONTROL_NET | ipaddr_index(2) }}" end="{{ conf.MCPCONTROL_NET | ipaddr_index(254) }}"/>
</dhcp>
</ip>
</network>
which accompanies this distribution, and is available at
http://www.apache.org/licenses/LICENSE-2.0
-->
+{%- if conf.idf.net_config.mgmt is defined %}
+ {%- set mgmt_network = conf.idf.net_config.mgmt.network %}
+ {%- set mgmt_prefix = conf.idf.net_config.mgmt.mask %}
+{%- else %}
+ {%- set mgmt_network = '172.16.10.0' %}
+ {%- set mgmt_prefix = '24' %}
+{%- endif %}
<network>
<name>mgmt</name>
<bridge name="mgmt"/>
- <ip address="172.16.10.1" netmask="255.255.255.0"/>
+ <ip address="{{ mgmt_network | ipaddr_index(1) }}" netmask="{{ mgmt_prefix | netmask }}"/>
</network>
--- /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
+-->
+{%- set cluster = {'has_virtual_nodes': False} %}
+{%- for node in conf.nodes %}
+ {%- if not cluster.has_virtual_nodes and node.node.type == 'virtual' %}
+ {%- do cluster.update({'has_virtual_nodes': True}) %}
+ {%- endif %}
+{%- endfor %}
+{%- if conf.idf.net_config.public is defined %}
+ {%- set public_network = conf.idf.net_config.public.network %}
+ {%- set public_prefix = conf.idf.net_config.public.mask %}
+{%- else %}
+ {%- set public_network = '10.16.0.0' %}
+ {%- set public_prefix = '24' %}
+{%- endif %}
+<network>
+ <name>public</name>
+ <bridge name="public"/>
+{%- if cluster.has_virtual_nodes %}
+{#- Ideally, jumpserver would have a real Linux bridge we will hook to.
+ In case it doesn't, we use this virsh network as a *mock* public.
+ The *mock* public should NOT overlap with the real public in any way. #}
+ <forward mode="nat"/>
+ <ip address="{{ public_network | ipaddr_index(1) }}" netmask="{{ public_prefix | netmask }}"/>
+{%- endif %}
+</network>
--- /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
+-->
+{%- if conf.idf.net_config.admin is defined %}
+ {%- set pxebr_network = conf.idf.net_config.admin.network %}
+ {%- set pxebr_prefix = conf.idf.net_config.admin.mask %}
+{%- else %}
+ {%- set pxebr_network = '192.168.11.0' %}
+ {%- set pxebr_prefix = '24' %}
+{%- endif %}
+<network>
+ <name>pxebr</name>
+ <forward mode="nat"/>
+ <bridge name="pxebr"/>
+ <ip address="{{ pxebr_network | ipaddr_index(1) }}" netmask="{{ pxebr_prefix | netmask }}">
+ <!-- NOTE: .254 is harcoded for now (for /24 prefix), should be computed instead. -->
+ <dhcp>
+ <range start="{{ pxebr_network | ipaddr_index(4) }}" end="{{ pxebr_network | ipaddr_index(254) }}"/>
+ </dhcp>
+ </ip>
+</network>
--- /dev/null
+#!/bin/bash -e
+# shellcheck disable=SC2034
+##############################################################################
+# 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
+##############################################################################
+#
+# Data derived from XDF (PDF/IDF/SDF/etc), used as input in deploy.sh
+#
+
+{%- set arch = conf[conf.MCP_JUMP_ARCH] -%}
+
+{%- macro bash_arr(_l) -%}
+ ({%- for n in _l -%}'{{ n }}' {% endfor -%})
+{%- endmacro -%}
+
+{#- Pack list as `sep`-separated string, replacing spaces with '|' -#}
+{%- macro pack(x = [], sep = ',') -%}
+ {{ x | join(sep) | replace(' ', '|') }}
+{%- endmacro -%}
+
+{#- Pack all vnode data as string -#}
+{%- macro serialize_vnodes() -%}
+ {%- set V = conf.virtual -%}
+ {%- set arr = [] -%}
+ {%- for n in V.nodes -%}
+ {%- if n not in V -%}{%- do V.update({n: {}}) -%}{%- endif -%}
+ {%- do arr.append(pack([n, V[n].ram or arch.default.ram,
+ V[n].vcpus or arch.default.vcpus])) -%}
+ {%- endfor -%}
+ '{{ pack(arr, '|') }}'
+{%- endmacro -%}
+
+{#- Pack apt_pkg data as string -#}
+{%- macro serialize_apt_pkg() -%}
+ {%- set arr = [] -%}
+ {%- set sections = [arch.common] -%}
+ {%- if conf.MCP_VCP -%}
+ {%- do sections.append(arch.control) -%}
+ {%- endif -%}
+ {%- for c in sections -%}
+ {%- do arr.append(pack([pack(c.apt['keys']), pack(c.apt.repos),
+ pack(c.pkg.install), pack(c.pkg.remove)], '^')) -%}
+ {%- endfor -%}
+ '{{ pack(arr, '^') }}'
+{%- endmacro -%}
+
+{%- set bridges = conf.idf.fuel.jumphost.bridges %}
+# Determine bridge names based on IDF, where all bridges are now mandatory
+OPNFV_BRIDGES=(
+ '{{ bridges.admin or "pxebr" }}'
+ '{{ bridges.mgmt or "mgmt" }}'
+ '{{ bridges.private or "internal" }}'
+ '{{ bridges.public or "public" }}'
+)
+
+export CLUSTER_DOMAIN={{ conf.cluster.domain }}
+cluster_states={{ bash_arr(conf.cluster.states) }}
+virtual_nodes={{ bash_arr(conf.virtual.nodes) }}
+base_image={{ arch.base_image }}
+
+# Serialize vnode data as '<name0>,<ram0>,<vcpu0>|<name1>,<ram1>,<vcpu1>[...]'
+virtual_nodes_data={{ serialize_vnodes() }}
+
+# Serialize repos, packages to (pre-)install/remove for:
+# - foundation node VM base image (virtual: all VMs, baremetal: cfg01|mas01)
+# - virtualized control plane VM base image (only when VCP is used)
+virtual_repos_pkgs={{ serialize_apt_pkg() }}