+-----------------------+------------------------------------------------------------------------+
| ctl01 | Controller VM |
+-----------------------+------------------------------------------------------------------------+
- | cmp01/cmp02 | Compute VMs |
+ | cmp001/cmp002 | Compute VMs |
+-----------------------+------------------------------------------------------------------------+
| gtw01 | Gateway VM with neutron services (dhcp agent, L3 agent, metadata, etc) |
+-----------------------+------------------------------------------------------------------------+
private: ~
public: ~
network:
+ ntp_strata_host1: 1.se.pool.ntp.org
+ ntp_strata_host2: 0.se.pool.ntp.org
node:
# Ordered-list, index should be in sync with node index in PDF
- interfaces: &interfaces
vlan: native
##############################################################################
nodes:
- - name: node-1
+ - name: node-1 # noha ctl01 or ha (novcp) kvm01
node: &nodeparams
# Fuel overrides certain params (e.g. cpus, mem) based on node role later
type: virtual
mac_address: "00:00:00:00:00:00"
vlan: native
############################################################################
- - name: node-2
+ - name: node-2 # noha gtw01 or ha (novcp) kvm02
node: *nodeparams
disks: *disks
remote_management: *remotemgmt
interfaces: *interfaces
############################################################################
- - name: node-3
+ - name: node-3 # noha odl01 / unused or ha (novcp) kvm02
node: *nodeparams
disks: *disks
remote_management: *remotemgmt
interfaces: *interfaces
############################################################################
- - name: node-4
+ - name: node-4 # cmp001
node: *nodeparams
disks: *disks
remote_management: *remotemgmt
interfaces: *interfaces
############################################################################
- - name: node-5
+ - name: node-5 # cmp002
node: *nodeparams
disks: *disks
remote_management: *remotemgmt
# 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-ovs-ha.local
states:
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
{%- endif %}
virtual:
nodes:
- cfg01
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
{#- Most likely, controllers will always have the same type and number (3) #}
nodes:
- cfg01
- ctl01
- - cmp01
- - cmp02
+ - cmp001
+ - cmp002
- gtw01
ctl01:
vcpus: 4
# 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-ovs-dpdk-ha.local
states:
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
{%- endif %}
virtual:
nodes:
- cfg01
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
{#- Most likely, controllers will always have the same type and number (3) #}
nodes:
- cfg01
- ctl01
- - cmp01
- - cmp02
+ - cmp001
+ - cmp002
- gtw01
ctl01:
vcpus: 4
ram: 14336
gtw01:
ram: 2048
- cmp01:
+ cmp001:
vcpus: 4
ram: 8192
- cmp02:
+ cmp002:
vcpus: 4
ram: 8192
# 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-odl-ha.local
states:
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
{%- endif %}
virtual:
nodes:
- cfg01
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
{#- Most likely, controllers will always have the same type and number (3) #}
nodes:
- cfg01
- ctl01
- - cmp01
- - cmp02
+ - cmp001
+ - cmp002
- gtw01
- odl01
ctl01:
# 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-ovn-ha.local
states:
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- maas
- baremetal_init
{%- endif %}
virtual:
nodes:
- cfg01
-{%- if cluster.has_baremetal_nodes %}
+{%- if nm.cluster.has_baremetal_nodes %}
- mas01
{%- endif %}
{#- Most likely, controllers will always have the same type and number (3) #}
nodes:
- cfg01
- ctl01
- - cmp01
- - cmp02
+ - cmp001
+ - cmp002
ctl01:
vcpus: 4
ram: 14336
- cmp01:
+ cmp001:
vcpus: 5
ram: 8192
- cmp02:
+ cmp002:
vcpus: 5
ram: 8192
wait_for 5.0 "salt -C 'cmp*' state.apply linux.network"
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 \
- args='unset new_routers'
-
salt -C 'kvm* or cmp*' system.reboot
wait_for 90.0 "salt -C 'kvm* or cmp*' test.ping"
wait_for 10.0 "salt -C 'E@^(?!cfg01|mas01|kvm|cmp00).*' ssh.set_auth_key ${SUDO_USER} \
$(awk 'NR==1{print $2}' "$(eval echo "~${SUDO_USER}/.ssh/authorized_keys")")"
-# 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"
index 0000000..c609e45
--- /dev/null
+++ b/linux/files/ovs_bridge
-@@ -0,0 +1,13 @@
+@@ -0,0 +1,19 @@
+auto {{ bridge_name }}
+allow-ovs {{ bridge_name }}
+iface {{ bridge_name }} inet static
+ {%- if bridge.datapath_type is defined %}
+ ovs_extra set Bridge ${IFACE} datapath_type={{ bridge.datapath_type }}
+ {%- endif %}
++ {%- if bridge.gateway is defined %}
++ gateway {{ bridge.gateway }}
++ {%- endif %}
++ {%- if bridge.name_servers is defined %}
++ dns-nameservers {{ bridge.name_servers | join(' ') }}
++ {%- endif %}
diff --git a/linux/files/ovs_port b/linux/files/ovs_port
index 222ca8e..efb0307 100644
--- a/linux/files/ovs_port
--- /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, 18 Jun 2018 15:53:31 +0200
+Subject: [PATCH] system.repo: Pin glusterfs with higher prio
+
+When both glusterfs PPA repo and MCP repos are used on the same node,
+the MCP repos used to take priority and install a predefined version
+no matter the configuration for GlusterFS PPA.
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ linux/system/repo/glusterfs.yml | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/linux/system/repo/glusterfs.yml b/linux/system/repo/glusterfs.yml
+index fb331f0f..71d063ac 100644
+--- a/linux/system/repo/glusterfs.yml
++++ b/linux/system/repo/glusterfs.yml
+@@ -9,3 +9,7 @@ parameters:
+ architectures: amd64
+ key_id: 3FE869A9
+ key_server: keyserver.ubuntu.com
++ pin:
++ - package: '*'
++ pin: release o=LP-PPA-gluster-glusterfs-${_param:glusterfs_version}
++ priority: 1100
**/*_pdf.yml
+all-mcp-arch-common/init.yml
+all-mcp-arch-common/opnfv/init.yml
+mcp*common-*/infra/config.yml
mcp-common-ha/infra/init.yml
+mcp-common-ha/infra/maas.yml
+mcp-common-ha/infra/kvm_novcp.yml
+mcp-common-ha/include/maas_proxy.yml
mcp-common-ha/openstack_control.yml
-mcp-common-ha/openstack_init.yml
+mcp-common-ha/openstack_telemetry.yml
+mcp*common-*/openstack_init.yml
mcp-common-ha/openstack_interface_vcp_biport.yml
mcp-common-ha/openstack_interface_vcp_triport.yml
mcp-common-ha/openstack_proxy.yml
mcp-ovs-dpdk-ha/infra/kvm.yml
mcp-odl-ha/infra/init_vcp.yml
mcp-odl-ha/infra/kvm.yml
+mcp-odl-ha/infra/maas.yml
mcp-ovn-ha/infra/init_vcp.yml
mcp-ovn-ha/infra/kvm.yml
mcp-odl-ha/opendaylight/control.yml
mcp-odl-ha/openstack/init.yml
mcp-odl-noha/infra/config.yml
-mcp-odl-noha/openstack/compute.yml
+mcp-*-noha/openstack/compute.yml
+++ /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
##############################################################################
{%- import 'net_map.j2' as nm with context %}
---
+classes:
+ - service.git.client
+ - system.linux.system.single
+ - system.linux.system.repo.mcp.salt
+ - system.reclass.storage.salt
+ - system.salt.master.api
+ - system.salt.master.pkg
+ - system.salt.minion.ca.salt_master
parameters:
+ _param:
+ salt_master_environment_repository: "https://github.com/tcpcloud"
+ salt_master_environment_revision: master
+ reclass_data_repository: local
+ salt_master_base_environment: prd
+ # yamllint disable-line rule:line-length
+ salt_api_password_hash: "$6$sGnRlxGf$al5jMCetLP.vfI/fTl3Z0N7Za1aeiexL487jAtyRABVfT3NlwZxQGVhO7S1N8OwS/34VHYwZQA8lkXwKMN/GS1"
+ salt:
+ master:
+ accept_policy: open_mode
+ file_recv: true
reclass:
storage:
+ data_source:
+ engine: local
node:
- # NOTE: Until SDF is in place, assume all computes are identical
- openstack_compute_node01: &openstack_compute_node01
+ # We support per-node (not only per-role) compute configuration via IDF
+{%- for cmp in range(1, nm.cmp_nodes + 1) %}
+ {%- set n = '%02d' | format(cmp) %}
+ {%- set i = nm.cmp001.idx + cmp - 1 %}
+
+ {%- set admin = nm.net_admin_hosts | length + nm.start_ip[nm.net_admin] + loop.index %}
+ {%- set mgmt = nm.net_mgmt_hosts | length + nm.start_ip[nm.net_mgmt] + loop.index %}
+ {%- set pub = nm.net_public_hosts | length + nm.start_ip[nm.net_public] + loop.index %}
+ {%- set pri = nm.net_private_hosts | length + nm.start_ip[nm.net_private] + loop.index %}
+ openstack_compute_node{{ n }}:
+ name: cmp{{ '%03d' | format(cmp) }}
+ domain: ${_param:cluster_domain}
+ classes:
+ - cluster.${_param:cluster_name}.openstack.compute
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 %}
+ pxe_admin_address: {{ nm.net_admin | ipnet_hostaddr(admin) }}
+ control_address: {{ nm.net_mgmt | ipnet_hostaddr(mgmt) }}
+ tenant_address: {{ nm.net_private | ipnet_hostaddr(pri) }}
+ external_address: {{ nm.net_public | ipnet_hostaddr(pub) }}
+ salt_master_host: ${_param:reclass_config_master}
+ linux_system_codename: xenial
+
+ {#- No partial defaults, all or nothing. Defaults tuned for lf-pod2. #}
+ {%- if 'dpdk' in conf.cluster.domain %}
+ {%- if conf.idf.fuel.reclass is defined %}
+ {%- if conf.idf.fuel.reclass.node[i].compute_params.dpdk is defined %}
+ {#- Can't dump json here due to dpdk0_* below, explicitly create yaml #}
+ {%- set _dpdk = conf.idf.fuel.reclass.node[i].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: {{ conf.idf.fuel.network.node[i].interfaces[nm.idx_private] }}
+ dpdk0_pci: '"{{ conf.idf.fuel.network.node[i].busaddr[nm.idx_private] }}"'
+ {%- else %}
+ {%- if conf.idf.fuel.reclass is defined %}
+ {%- if conf.idf.fuel.reclass.node[i].compute_params.common is defined %}
+ {%- set _common = conf.idf.fuel.reclass.node[i].compute_params.common %}
+ {%- for _i in _common %}
{{ _i }}: '"{{ _common[_i] }}"'
-{%- endfor %}
-{%- else %}
+ {%- endfor %}
+ {%- else %}
dummy_value: ~
-{%- endif %}
-{%- else %}
+ {%- endif %}
+ {%- else %}
compute_hugepages_size: 1G
compute_hugepages_count: 16
compute_hugepages_mount: /mnt/hugepages_1G
-{%- endif %}
- openstack_compute_node02:
- <<: *openstack_compute_node01
+ {%- endif %}
+ {%- endif %}
+{%- 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
-##############################################################################
----
-classes:
- - cluster.all-mcp-arch-common.arch
- - cluster.all-mcp-arch-common.opnfv
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
---
+classes:
+ - cluster.all-mcp-arch-common.opnfv
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)
+ # VCP VMs spawned on KVM Hosts net ifaces (max 3)
+ # NOTE(armband): Only x86 VCP VMs spawned via salt.control names differ
+
+{%- if conf.MCP_JUMP_ARCH == 'aarch64' %}
opnfv_fn_vm_primary_interface: enp1s0
opnfv_fn_vm_secondary_interface: enp2s0
opnfv_fn_vm_tertiary_interface: enp3s0
opnfv_fn_vm_quaternary_interface: enp4s0
- # VCP VMs spawned on KVM Hosts net ifaces (max 3)
- # NOTE(armband): Only x86 VCP VMs spawned via salt.control names differ
opnfv_vcp_vm_primary_interface: ${_param:opnfv_fn_vm_primary_interface}
opnfv_vcp_vm_secondary_interface: ${_param:opnfv_fn_vm_secondary_interface}
opnfv_vcp_vm_tertiary_interface: ${_param:opnfv_fn_vm_tertiary_interface}
+{%- else %}
+ opnfv_fn_vm_primary_interface: ens3
+ opnfv_fn_vm_secondary_interface: ens4
+ opnfv_fn_vm_tertiary_interface: ens5
+ opnfv_fn_vm_quaternary_interface: ens6
+
+ opnfv_vcp_vm_primary_interface: ens2
+ opnfv_vcp_vm_secondary_interface: ens3
+ opnfv_vcp_vm_tertiary_interface: ens4
+{%- endif %}
+
+ ntp_strata_host1: {{ conf.idf.fuel.network.ntp_strata_host1 or '1.pool.ntp.org' }}
+ ntp_strata_host2: {{ conf.idf.fuel.network.ntp_strata_host2 or '0.pool.ntp.org' }}
+++ /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.opnfv.runtime
- - cluster.all-mcp-arch-common.opnfv.pod_config
--- /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:
+ _param:
+ opnfv_net_admin_mask: {{ nm.net_admin | ipnet_netmask }}
+ opnfv_net_mgmt_mask: {{ nm.net_admin | ipnet_netmask }}
+ opnfv_net_private_mask: {{ nm.net_admin | ipnet_netmask }}
+ opnfv_net_public_mask: {{ nm.net_public | ipnet_netmask }}
+
+ opnfv_net_public: {{ nm.net_public }}
+ opnfv_net_public_gw: {{ nm.net_public_gw }}
+ opnfv_net_public_pool_start: {{ nm.net_public_pool_start }}
+ opnfv_net_public_pool_end: {{ nm.net_public_pool_end }}
+
+ opnfv_net_tenant_vlan: "{{ nm.vlan_private | string | replace('-', ':') }}"
+
+{%- for network in nm.networks %}
+{%- for key in nm.hosts[network] %}
+{%- set i = loop.index + nm.start_ip[network] %}
+ {{key}}: {{ network | ipnet_hostaddr(i) }}
+{%- endfor %}
+{%- 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
-##############################################################################
----
-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)
- opnfv_fn_vm_primary_interface: ens3
- opnfv_fn_vm_secondary_interface: ens4
- opnfv_fn_vm_tertiary_interface: ens5
- opnfv_fn_vm_quaternary_interface: ens6
-
- # VCP VMs spawned on KVM Hosts net ifaces (max 3)
- # NOTE(armband): Only x86 VCP VMs spawned via salt.control names differ
- opnfv_vcp_vm_primary_interface: ens2
- opnfv_vcp_vm_secondary_interface: ens3
- opnfv_vcp_vm_tertiary_interface: ens4
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
---
+{%- if 'maas' in conf.cluster.states %}
parameters:
# NOTE: Apt proxy is set by curtin, Salt minion proxy is configured below,
# only enable proxy via /etc/environment if you need it for smth else
enabled: true
http: http://${_param:infra_maas_node01_deploy_address}:8000
https: http://${_param:infra_maas_node01_deploy_address}:8000
+{%- endif %}
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
---
classes:
- - service.git.client
- - system.linux.system.single
- - system.linux.system.repo.mcp.salt
- system.linux.system.repo.saltstack.xenial
- - system.salt.master.api
- - system.salt.master.pkg
- - system.salt.minion.ca.salt_master
- - system.reclass.storage.salt
- system.reclass.storage.system.physical_control_cluster
- system.reclass.storage.system.openstack_control_cluster
- system.reclass.storage.system.openstack_proxy_cluster
# - system.reclass.storage.system.stacklight_telemetry_cluster
- system.reclass.storage.system.infra_maas_single
- cluster.mcp-common-ha.include.lab_proxy_pdf
+ - cluster.all-mcp-arch-common.infra.config_pdf
parameters:
_param:
- salt_master_base_environment: prd
- reclass_data_repository: local
- salt_master_environment_repository: "https://github.com/tcpcloud"
- salt_master_environment_revision: master
+ salt_master_host: ${_param:infra_config_deploy_address}
single_address: ${_param:infra_config_address}
deploy_address: ${_param:infra_config_deploy_address}
- pxe_address: ${_param:opnfv_infra_config_pxe_address}
- salt_master_host: ${_param:infra_config_deploy_address}
- # yamllint disable rule:line-length
- salt_api_password_hash: "$6$sGnRlxGf$al5jMCetLP.vfI/fTl3Z0N7Za1aeiexL487jAtyRABVfT3NlwZxQGVhO7S1N8OwS/34VHYwZQA8lkXwKMN/GS1"
- dhcp_nic: ${_param:opnfv_fn_vm_primary_interface}
+ pxe_admin_address: ${_param:opnfv_infra_config_pxe_admin_address}
+ mcpcontrol_nic: ${_param:opnfv_fn_vm_primary_interface}
single_nic: ${_param:opnfv_fn_vm_secondary_interface}
- pxe_nic: ${_param:opnfv_fn_vm_tertiary_interface}
+ pxe_admin_nic: ${_param:opnfv_fn_vm_tertiary_interface}
linux:
network:
interface:
- dhcp:
+ mcpcontrol_int:
enabled: true
type: eth
proto: dhcp
- name: ${_param:dhcp_nic}
+ name: ${_param:mcpcontrol_nic}
single:
enabled: true
type: eth
proto: static
name: ${_param:single_nic}
address: ${_param:single_address}
- netmask: 255.255.255.0
- pxe:
+ netmask: ${_param:opnfv_net_mgmt_mask}
+ pxe_admin_int:
enabled: true
type: eth
proto: static
- name: ${_param:pxe_nic}
- address: ${_param:pxe_address}
- netmask: 255.255.255.0
+ name: ${_param:pxe_admin_nic}
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
salt:
master:
accept_policy: open_mode
command_timeout: 20
reclass:
storage:
- data_source:
- engine: local
node:
+ # NOTE: compute nodes definitions are defined in <all-mcp-arch-common/infra>
infra_kvm_node01:
params:
keepalived_vip_priority: 100
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_infra_kvm_node01_pxe_admin_address}
infra_kvm_node02:
+{%- if not conf.MCP_VCP %}
+ classes:
+ - cluster.mcp-common-ha.infra.kvm_novcp
+{%- endif %}
params:
keepalived_vip_priority: 101
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_infra_kvm_node02_pxe_admin_address}
infra_kvm_node03:
params:
keepalived_vip_priority: 102
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_infra_kvm_node03_pxe_admin_address}
openstack_telemetry_node01:
params:
linux_system_codename: xenial
# to prevent race conditions
ceilometer_create_gnocchi_resources: true
redis_cluster_role: 'master'
+ pxe_admin_address: ${_param:opnfv_openstack_telemetry_node01_pxe_admin_address}
openstack_telemetry_node02:
params:
linux_system_codename: xenial
redis_cluster_role: 'slave'
+ pxe_admin_address: ${_param:opnfv_openstack_telemetry_node02_pxe_admin_address}
openstack_telemetry_node03:
params:
linux_system_codename: xenial
redis_cluster_role: 'slave'
+ pxe_admin_address: ${_param:opnfv_openstack_telemetry_node03_pxe_admin_address}
openstack_message_queue_node01:
params:
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_openstack_message_queue_node01_pxe_admin_address}
openstack_message_queue_node02:
params:
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_openstack_message_queue_node02_pxe_admin_address}
openstack_message_queue_node03:
params:
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_openstack_message_queue_node03_pxe_admin_address}
openstack_proxy_node01:
params:
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_openstack_proxy_node01_pxe_admin_address}
openstack_proxy_node02:
params:
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_openstack_proxy_node02_pxe_admin_address}
# stacklight_log_node01:
# classes:
# - system.elasticsearch.client.single
linux_system_codename: xenial
# NOTE: When VCP is present, external_address is not used
external_address: ${_param:openstack_proxy_node01_address}
+ pxe_admin_address: ${_param:opnfv_openstack_control_node01_pxe_admin_address}
openstack_control_node02:
params:
linux_system_codename: xenial
external_address: 0.0.0.0
+ pxe_admin_address: ${_param:opnfv_openstack_control_node02_pxe_admin_address}
openstack_control_node03:
params:
linux_system_codename: xenial
external_address: ${_param:openstack_proxy_node02_address}
+ pxe_admin_address: ${_param:opnfv_openstack_control_node03_pxe_admin_address}
openstack_database_node01:
classes:
- cluster.mcp-common-ha.openstack_database_init
params:
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_openstack_database_node01_pxe_admin_address}
openstack_database_node02:
params:
linux_system_codename: xenial
+ pxe_admin_address: ${_param:opnfv_openstack_database_node02_pxe_admin_address}
openstack_database_node03:
params:
linux_system_codename: xenial
- openstack_compute_node01:
- name: ${_param:openstack_compute_node01_hostname}
- domain: ${_param:cluster_domain}
- classes:
- - cluster.${_param:cluster_name}.openstack.compute
- params:
- salt_master_host: ${_param:reclass_config_master}
- linux_system_codename: xenial
- control_address: ${_param:openstack_compute_node01_control_address}
- single_address: ${_param:openstack_compute_node01_single_address}
- tenant_address: ${_param:openstack_compute_node01_tenant_address}
- external_address: ${_param:openstack_compute_node01_external_address}
- openstack_compute_node02:
- name: ${_param:openstack_compute_node02_hostname}
- domain: ${_param:cluster_domain}
- classes:
- - cluster.${_param:cluster_name}.openstack.compute
- params:
- salt_master_host: ${_param:reclass_config_master}
- linux_system_codename: xenial
- control_address: ${_param:openstack_compute_node02_control_address}
- single_address: ${_param:openstack_compute_node02_single_address}
- tenant_address: ${_param:openstack_compute_node02_tenant_address}
- external_address: ${_param:openstack_compute_node02_external_address}
+ pxe_admin_address: ${_param:opnfv_openstack_database_node03_pxe_admin_address}
cluster_domain: ${_param:cluster_name}.local
# stacklight_environment: ${_param:cluster_domain}
reclass_data_revision: master
- reclass_config_master: ${_param:opnfv_infra_config_pxe_address}
+ reclass_config_master: ${_param:opnfv_infra_config_pxe_admin_address}
cluster_public_host: ${_param:openstack_proxy_address}
infra_config_hostname: cfg01
infra_maas_database_password: opnfv_secret
# infra service addresses
infra_config_address: ${_param:opnfv_infra_config_address}
- infra_config_deploy_address: ${_param:opnfv_salt_master_ip}
+ infra_config_deploy_address: {{ conf.SALT_MASTER }}
infra_maas_node01_address: ${_param:opnfv_infra_maas_node01_address}
infra_maas_node01_deploy_address: ${_param:opnfv_infra_maas_node01_deploy_address}
infra_kvm_node02_hostname: kvm02
infra_kvm_node03_hostname: kvm03
- ntp_strata_host1: 1.pool.ntp.org
- ntp_strata_host2: 0.pool.ntp.org
-
# Interface definitions
reclass:
storage:
openstack_proxy_node01:
params:
control_address: ${_param:openstack_proxy_node01_control_address}
+ pxe_admin_address: ${_param:opnfv_openstack_proxy_node01_pxe_admin_address}
openstack_proxy_node02:
params:
control_address: ${_param:openstack_proxy_node02_control_address}
+ pxe_admin_address: ${_param:opnfv_openstack_proxy_node02_pxe_admin_address}
linux:
system:
apt:
# 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 #}
+{#- This class should only be inherited in NOVCP scenarios for kvm02 #}
+{%- import 'net_map.j2' as nm with context %}
---
-{#- conf.MCPCONTROL_NET & co are mandatory, defaults are set via globals.sh #}
parameters:
- _param:
- 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 }}
+ linux:
+ network:
+ interface:
+ br-mgmt:
+ gateway: {{ nm.net_admin_gw }}
+ name_servers:
+ - {{ nm.net_admin_gw }}
##############################################################################
{#- NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
{%- set nics = { nm.ctl01.nic_admin: True, nm.ctl01.nic_mgmt: True, nm.ctl01.nic_public: True } %}
{%- set vlans = { nm.vlan_admin: nm.ctl01.nic_admin, nm.vlan_mgmt: nm.ctl01.nic_mgmt, nm.vlan_public: nm.ctl01.nic_public } %}
---
parameters:
+ _param:
+ interface_mtu: 1500
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 %}
+{{ ma.linux_network_interfaces_nic(nics) }}
+
+{{ ma.linux_network_interfaces_vlan(vlans) }}
br-mgmt:
enabled: true
- proto: dhcp
+ proto: static
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
+{%- if conf.MCP_VCP %}
+{#- For NOVCP scenarios, kvm02 gateway will be added via kvm_novcp class #}
+ gateway: {{ nm.net_admin_gw }}
+ name_servers:
+ - {{ nm.net_admin_gw }}
+{%- endif %}
type: bridge
use_interfaces:
- - {{ nm.ctl01.nic_admin }}{% if nm.vlan_admin | int > 0 %}.{{ nm.vlan_admin }}{% endif %}
+ - {{ ma.interface_str(nm.ctl01.nic_admin, nm.vlan_admin) }}
noifupdown: true
br-ctl:
enabled: true
type: bridge
proto: static
address: ${_param:single_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_mgmt_mask}
use_interfaces:
- - {{ nm.ctl01.nic_mgmt }}{% if nm.vlan_mgmt | int > 0 %}.{{ nm.vlan_mgmt }}{% endif %}
+ - {{ ma.interface_str(nm.ctl01.nic_mgmt, nm.vlan_mgmt) }}
noifupdown: true
+{#- For NOVCP scenarios, kvm{01,03} external gateway will be added via triport class #}
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 %}
+ - {{ ma.interface_str(nm.ctl01.nic_public, nm.vlan_public) }}
noifupdown: true
+++ /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.maas.region.single
- - service.maas.cluster.single
- - cluster.mcp-common-ha.include.lab_proxy_pdf
- - cluster.mcp-common-ha.infra.maas_pdf
-parameters:
- _param:
- dhcp_interface: ${_param:opnfv_fn_vm_primary_interface}
- primary_interface: ${_param:opnfv_fn_vm_secondary_interface}
- pxe_interface: ${_param:opnfv_fn_vm_tertiary_interface}
- interface_mtu: 1500
- # MaaS has issues using MTU > 1500 for PXE interface
- pxe_interface_mtu: 1500
- linux_system_codename: xenial
- maas_admin_username: opnfv
- maas_admin_password: opnfv_secret
- maas_db_password: opnfv_secret
- dns_server01: ${_param:opnfv_dns_server01}
- single_address: ${_param:infra_maas_node01_deploy_address}
- hwe_kernel: 'hwe-16.04'
- maas:
- region:
- salt_master_ip: ${_param:reclass_config_master}
- domain: ${_param:cluster_domain}
- maas_config:
- commissioning_distro_series: 'xenial'
- default_distro_series: 'xenial'
- default_osystem: 'ubuntu'
- default_storage_layout: 'lvm'
- enable_http_proxy: true
- disk_erase_with_secure_erase: false
- dnssec_validation: 'no'
- enable_third_party_drivers: true
- network_discovery: 'enabled'
- default_min_hwe_kernel: ${_param:hwe_kernel}
- cluster:
- saltstack_repo_xenial: "http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.11/ xenial main"
- linux:
- network:
- interface:
- dhcp_interface:
- enabled: true
- name: ${_param:dhcp_interface}
- type: eth
- proto: dhcp
- primary_interface:
- enabled: true
- name: ${_param:primary_interface}
- mtu: ${_param:interface_mtu}
- proto: static
- address: ${_param:infra_maas_node01_address}
- netmask: 255.255.255.0
- type: eth
- pxe_interface:
- enabled: true
- name: ${_param:pxe_interface}
- mtu: ${_param:pxe_interface_mtu}
- proto: static
- address: ${_param:single_address}
- netmask: 255.255.255.0
- type: eth
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-{%- set cluster_arch = [] %}
-{%- for node in conf.nodes %}
- {%- if node.node.arch not in cluster_arch %}
- {%- do cluster_arch.append(node.node.arch) %}
- {%- endif %}
-{%- endfor %}
-{%- set net_admin = [conf.idf.net_config.admin.network,
- conf.idf.net_config.admin.mask] | join("/") %}
+{%- import 'net_map.j2' as nm with context %}
---
+# NOTE: pod_config is generated and transferred into its final location on
+# cfg01 only during deployment to prevent leaking sensitive data
+classes:
+ - system.maas.region.single
+ - service.maas.cluster.single
+ - cluster.mcp-common-ha.include.lab_proxy_pdf
+ - cluster.all-mcp-arch-common.opnfv.pod_config
parameters:
+ _param:
+ mcpcontrol_interface: ${_param:opnfv_fn_vm_primary_interface}
+ primary_interface: ${_param:opnfv_fn_vm_secondary_interface}
+ pxe_admin_interface: ${_param:opnfv_fn_vm_tertiary_interface}
+ interface_mtu: 1500
+ # MaaS has issues using MTU > 1500 for PXE interface
+ pxe_admin_interface_mtu: 1500
+ linux_system_codename: xenial
+ maas_admin_username: opnfv
+ maas_admin_password: opnfv_secret
+ maas_db_password: opnfv_secret
+ dns_server01: '{{ nm.dns_public[0] }}'
+ single_address: ${_param:infra_maas_node01_deploy_address}
+ hwe_kernel: 'hwe-16.04'
+ opnfv_maas_timeout_comissioning: {{ nm.maas_timeout_comissioning }}
+ opnfv_maas_timeout_deploying: {{ nm.maas_timeout_deploying }}
maas:
region:
subnets:
- {{ net_admin }}:
- name: {{ net_admin }}
- cidr: {{ net_admin }}
+ {{ nm.net_admin }}:
+ name: {{ nm.net_admin }}
+ cidr: {{ nm.net_admin }}
gateway_ip: ${_param:single_address}
iprange:
- start: ${_param:opnfv_infra_maas_pxe_start_address}
- end: ${_param:opnfv_infra_maas_pxe_end_address}
+ start: {{ nm.net_admin_pool_start }}
+ end: {{ nm.net_admin_pool_end }}
type: dynamic
vlans:
untagged:
dhcp_on: true
primary_rack: ${_param:infra_maas_node01_hostname}
# Space-separated list of dpkg architectures to be supported by MaaS
- opnfv_arches:{%- for arch in cluster_arch %} {{ arch | dpkg_arch }}{%- endfor %}
+ opnfv_arches:{%- for arch in nm.cluster.arch %} {{ arch | dpkg_arch }}{%- endfor %}
sshprefs:
- '{{ conf.MAAS_SSH_KEY }}'
-{%- if 'aarch64' in cluster_arch %}
+{%- if 'aarch64' in nm.cluster.arch %}
package_repositories:
armband:
name: armband
{%- endif %}
{%- endif %}
{%- endfor %}
+ salt_master_ip: ${_param:reclass_config_master}
+ domain: ${_param:cluster_domain}
+ maas_config:
+ commissioning_distro_series: 'xenial'
+ default_distro_series: 'xenial'
+ default_osystem: 'ubuntu'
+ default_storage_layout: 'lvm'
+ enable_http_proxy: true
+ disk_erase_with_secure_erase: false
+ dnssec_validation: 'no'
+ enable_third_party_drivers: true
+ network_discovery: 'enabled'
+ default_min_hwe_kernel: ${_param:hwe_kernel}
+ cluster:
+ saltstack_repo_xenial: "http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2017.7/ xenial main"
+ linux:
+ network:
+ interface:
+ mcpcontrol_interface:
+ enabled: true
+ name: ${_param:mcpcontrol_interface}
+ type: eth
+ proto: dhcp
+ primary_interface:
+ enabled: true
+ name: ${_param:primary_interface}
+ mtu: ${_param:interface_mtu}
+ proto: static
+ address: ${_param:infra_maas_node01_address}
+ netmask: ${_param:opnfv_net_mgmt_mask}
+ type: eth
+ pxe_admin_interface:
+ enabled: true
+ name: ${_param:pxe_admin_interface}
+ mtu: ${_param:pxe_admin_interface_mtu}
+ proto: static
+ address: ${_param:single_address}
+ netmask: ${_param:opnfv_net_admin_mask}
+ type: eth
keepalived_vip_interface: br-ctl
keepalived_vip_virtual_router_id: 69
linux_system_codename: xenial
+ single_address: ${_param:control_address}
glusterfs_version: '3.13'
glusterfs:
client:
##############################################################################
{#- NOTE: br-{mgmt,ctl} are cross-referenced, careful when changing names #}
{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
-{%- set nics = { nm.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 } %}
+{%- set nics = { nm.cmp001.nic_mgmt: True } %}
+{%- set vlans = { nm.vlan_mgmt: nm.cmp001.nic_mgmt } %}
---
parameters:
_param:
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 }}:
+ # PXE/admin is always untagged on computes
+ pxe_admin_int:
enabled: true
+ name: {{ nm.cmp001.nic_admin }}
+ proto: static
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 %}
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
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 %}
+{{ ma.linux_network_interfaces_nic(nics) }}
+
+{{ ma.linux_network_interfaces_vlan(vlans) }}
br-ctl:
enabled: true
type: bridge
proto: static
address: ${_param:single_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_mgmt_mask}
use_interfaces:
- - {{ nm.cmp001.nic_mgmt }}{% if nm.vlan_mgmt | int > 0 %}.{{ nm.vlan_mgmt }}{% endif %}
+ - {{ ma.interface_str(nm.cmp001.nic_mgmt, nm.vlan_mgmt) }}
br-floating:
enabled: true
type: ovs_bridge
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}
+ - {{ ma.interface_str(nm.cmp001.nic_public, nm.vlan_public) }}
+ gateway: ${_param:opnfv_net_public_gw}
+ name_servers: {{ nm.dns_public }}
ovs_port_{{ nm.cmp001.nic_public }}:
enabled: true
- name: {{ nm.cmp001.nic_public }}{% if nm.vlan_public | int > 0 %}.{{ nm.vlan_public }}{% endif %}
+ name: {{ ma.interface_str(nm.cmp001.nic_public, nm.vlan_public) }}
proto: manual
ovs_port_type: OVSPort
type: ovs_port
server:
bind:
~ports: ~
- ~modules:
- - rewrite
- - wsgi
# sync from common-ha kvm role
glusterfs:
server:
# 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:
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_single_address: ${_param:opnfv_openstack_compute_node02_single_address}
- openstack_compute_node03_single_address: ${_param:opnfv_openstack_compute_node03_single_address}
- openstack_compute_node01_control_address: ${_param:opnfv_openstack_compute_node01_control_address}
- openstack_compute_node02_control_address: ${_param:opnfv_openstack_compute_node02_control_address}
- openstack_compute_node03_control_address: ${_param:opnfv_openstack_compute_node03_control_address}
- openstack_compute_node01_tenant_address: ${_param:opnfv_openstack_compute_node01_tenant_address}
- openstack_compute_node02_tenant_address: ${_param:opnfv_openstack_compute_node02_tenant_address}
- openstack_compute_node03_tenant_address: ${_param:opnfv_openstack_compute_node03_tenant_address}
- openstack_compute_node01_external_address: ${_param:opnfv_openstack_compute_node01_external_address}
- openstack_compute_node02_external_address: ${_param:opnfv_openstack_compute_node02_external_address}
-
# openstack service hostnames
{%- if conf.MCP_VCP %}
openstack_proxy_hostname: prx
- ${_param:openstack_control_node03_hostname}
- ${_param:openstack_control_node03_hostname}.${_param:cluster_domain}
{%- endif %}
- cmp001:
- address: ${_param:openstack_compute_node01_control_address}
- names:
- - ${_param:openstack_compute_node01_hostname}
- - ${_param:openstack_compute_node01_hostname}.${_param:cluster_domain}
- cmp002:
- address: ${_param:openstack_compute_node02_control_address}
+{#- For compute nodes, expand values in-place, bypassing reclass param expansion #}
+{%- for cmp in range(1, nm.cmp_nodes + 1) %}
+ {%- set h = 'cmp%03d' | format(cmp) %}
+ {%- set mgmt = nm.net_mgmt_hosts | length + nm.start_ip[nm.net_mgmt] + loop.index %}
+ {{ h }}:
+ address: {{ nm.net_mgmt | ipnet_hostaddr(mgmt) }}
names:
- - ${_param:openstack_compute_node02_hostname}
- - ${_param:openstack_compute_node02_hostname}.${_param:cluster_domain}
+ - {{ h }}
+ - {{ h }}.${_param:cluster_domain}
+{%- endfor %}
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
---
{%- if conf.MCP_VCP %}
classes:
- cluster.mcp-common-ha.include.lab_proxy_pdf
parameters:
_param:
- dhcp_nic: ${_param:opnfv_vcp_vm_primary_interface}
+ pxe_admin_interface: ${_param:opnfv_vcp_vm_primary_interface}
single_nic: ${_param:opnfv_vcp_vm_secondary_interface}
linux:
network:
interface:
- dhcp:
+ pxe_admin:
enabled: true
type: eth
- proto: dhcp
- name: ${_param:dhcp_nic}
+ proto: static
+ name: ${_param:pxe_admin_interface}
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
+ gateway: {{ nm.net_admin_gw }}
+ name_servers:
+ - {{ nm.net_admin_gw }}
single:
enabled: true
type: eth
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
---
{%- if conf.MCP_VCP %}
classes:
- cluster.mcp-common-ha.include.lab_proxy_pdf
parameters:
_param:
- dhcp_nic: ${_param:opnfv_vcp_vm_primary_interface}
+ pxe_admin_interface: ${_param:opnfv_vcp_vm_primary_interface}
single_nic: ${_param:opnfv_vcp_vm_secondary_interface}
control_nic: ${_param:opnfv_vcp_vm_tertiary_interface}
linux:
network:
interface:
- dhcp_int:
+ pxe_admin:
enabled: true
type: eth
- proto: dhcp
- name: ${_param:dhcp_nic}
+ proto: static
+ name: ${_param:pxe_admin_interface}
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
single_int:
enabled: true
type: eth
name: ${_param:single_nic}
address: ${_param:single_address}
netmask: ${_param:opnfv_net_public_mask}
- route:
- public:
- address: 0.0.0.0
- netmask: 0.0.0.0
- gateway: ${_param:opnfv_net_public_gw}
+ gateway: ${_param:opnfv_net_public_gw}
+ name_servers: {{ nm.dns_public }}
control_int:
enabled: true
type: eth
proto: static
name: ${_param:control_nic}
address: ${_param:control_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_mgmt_mask}
+{%- else %}
+{#- For NOVCP scenarios, base config is in kvm_pdf, only add/override gw #}
+parameters:
+ linux:
+ network:
+ interface:
+ br-ex:
+ proto: static
+ gateway: ${_param:opnfv_net_public_gw}
+ name_servers: {{ nm.dns_public }}
{%- endif %}
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
<<: *nginx_openstack_proxy_address
nginx_proxy_openstack_api_heat_cfn:
<<: *nginx_openstack_proxy_address
+ nginx_proxy_openstack_api_heat_cloudwatch:
+ <<: *nginx_openstack_proxy_address
+ enabled: false
nginx_proxy_openstack_api_keystone:
<<: *nginx_openstack_proxy_address
nginx_proxy_openstack_api_keystone_private:
<<: *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:
apache:
server:
~modules:
- - wsgi
- rewrite
+{%- if conf.MCP_VCP %} {#- wsgi module will be enabled by a different class inherited later #}
+ - wsgi
+{%- endif %}
site:
gnocchi:
wsgi:
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
---
classes:
- - service.git.client
- - system.linux.system.single
- - system.linux.system.repo.mcp.salt
- - system.salt.master.api
- - system.salt.master.pkg
- - system.reclass.storage.salt
- - system.salt.minion.ca.salt_master
- system.mysql.client.single
- - system.reclass.storage.system.openstack_compute_multi
+ - cluster.all-mcp-arch-common.infra.config_pdf
parameters:
_param:
openstack_control_node01_hostname: ctl01
- reclass_data_repository: local
- reclass_config_master: ${_param:opnfv_infra_config_pxe_address}
- salt_master_environment_repository: "https://github.com/tcpcloud"
- salt_master_environment_revision: master
+ reclass_config_master: ${_param:opnfv_infra_config_pxe_admin_address}
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}
- # yamllint disable-line rule:line-length
- salt_api_password_hash: "$6$sGnRlxGf$al5jMCetLP.vfI/fTl3Z0N7Za1aeiexL487jAtyRABVfT3NlwZxQGVhO7S1N8OwS/34VHYwZQA8lkXwKMN/GS1"
linux:
network:
interface:
- dhcp:
+ mcpcontrol_int:
enabled: true
type: eth
proto: dhcp
type: eth
proto: static
address: ${_param:single_address}
- netmask: 255.255.255.0
- pxe:
+ netmask: ${_param:opnfv_net_mgmt_mask}
+ pxe_admin_int:
enabled: true
type: eth
proto: static
name: ${_param:opnfv_fn_vm_tertiary_interface}
- address: ${_param:opnfv_infra_config_pxe_address}
- netmask: 255.255.255.0
+ address: ${_param:opnfv_infra_config_pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
salt:
master:
file_recv: true
command_timeout: 20
reclass:
storage:
- data_source:
- engine: local
node:
openstack_control_node01:
name: ${_param:openstack_control_node01_hostname}
linux_system_codename: xenial
salt_master_host: ${_param:reclass_config_master}
single_address: ${_param:openstack_control_node01_address}
- openstack_compute_node01:
- params:
- 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: ${_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}
+ pxe_admin_address: ${_param:opnfv_openstack_control_node01_pxe_admin_address}
openstack_message_queue_node03_address: ${_param:openstack_control_node03_address}
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
_param:
interface_mtu: 9000
linux_system_codename: xenial
- ~cinder_lvm_devices: ['/dev/vdb']
+ single_address: ${_param:control_address}
nova:
compute:
libvirt_service: libvirtd
---
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 %}
primary_interface: {{ nm.cmp001.nic_mgmt }}
tenant_interface: {{ nm.cmp001.nic_private }}
external_interface: {{ nm.cmp001.nic_public }}
network:
bridge: openvswitch
interface:
- dhcp_int:
+ pxe_admin_int:
enabled: true
name: {{ nm.cmp001.nic_admin }}
- proto: dhcp
+ proto: static
type: eth
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
mtu: ${_param:interface_mtu}
primary_interface:
enabled: true
type: bridge
proto: static
address: ${_param:single_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_mgmt_mask}
use_interfaces:
- ${_param:primary_interface}
path: /srv/nova/instances
host:
nova:
- host: ${_param:single_address}/24
+ host: ${_param:single_address}/${_param:opnfv_net_mgmt_mask}
params:
- rw
- no_root_squash
linux:
network:
interface:
- dhcp_int:
+ pxe_admin_int:
enabled: true
name: {{ nm.ctl01.nic_admin }}
- proto: dhcp
+ proto: static
type: eth
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
single_int:
enabled: true
name: {{ nm.ctl01.nic_mgmt }}
type: eth
proto: static
address: ${_param:single_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_mgmt_mask}
public_int:
enabled: true
name: {{ nm.ctl01.nic_public }}
type: eth
proto: static
address: ${_param:cluster_public_host}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_public_mask}
+ gateway: ${_param:opnfv_net_public_gw}
+ name_servers: {{ nm.dns_public }}
network:
bridge: openvswitch
interface:
- dhcp_int:
+ pxe_admin_int:
enabled: true
name: {{ nm.ctl01.nic_admin }}
- proto: dhcp
+ proto: static
type: eth
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
mtu: ${_param:interface_mtu}
primary_interface:
enabled: true
mtu: ${_param:interface_mtu}
proto: manual
type: eth
+ gateway: ${_param:opnfv_net_public_gw}
+ name_servers: {{ nm.dns_public }}
br-floating:
enabled: true
type: ovs_bridge
type: bridge
proto: static
address: ${_param:single_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_mgmt_mask}
mtu: ${_param:interface_mtu}
use_interfaces:
- ${_param:primary_interface}
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:
# 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:
names:
- gtw01
- gtw01.${_param:cluster_domain}
- cmp01:
- address: ${_param:opnfv_openstack_compute_node01_control_address}
+{#- For compute nodes, expand values in-place, bypassing reclass param expansion #}
+{%- for cmp in range(1, nm.cmp_nodes + 1) %}
+ {%- set h = 'cmp%03d' | format(cmp) %}
+ {%- set mgmt = nm.net_mgmt_hosts | length + nm.start_ip[nm.net_mgmt] + loop.index %}
+ {{ h }}:
+ address: {{ nm.net_mgmt | ipnet_hostaddr(mgmt) }}
names:
- - cmp01
- - cmp01.${_param:cluster_domain}
- cmp02:
- address: ${_param:opnfv_openstack_compute_node02_control_address}
- names:
- - cmp02
- - cmp02.${_param:cluster_domain}
+ - {{ h }}
+ - {{ h }}.${_param:cluster_domain}
+{%- endfor %}
- system.reclass.storage.system.opendaylight_control_single
- cluster.mcp-common-ha.infra.config
- cluster.mcp-odl-ha.infra
- - cluster.all-mcp-arch-common.infra.config_pdf
parameters:
reclass:
storage:
params:
linux_system_codename: xenial
single_address: ${_param:opendaylight_server_node01_single_address}
+ pxe_admin_address: ${_param:opnfv_opendaylight_server_node01_pxe_admin_address}
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-{%- set cluster_arch = [] %}
-{%- for node in conf.nodes %}
- {%- if node.node.arch not in cluster_arch %}
- {%- do cluster_arch.append(node.node.arch) %}
- {%- endif %}
-{%- endfor %}
+{%- import 'net_map.j2' as nm with context %}
---
classes:
- cluster.mcp-common-ha.infra.maas
- cluster.mcp-odl-ha.infra
-{%- if 'aarch64' not in cluster_arch %}
+{%- if 'aarch64' not in nm.cluster.arch %}
parameters:
_param:
hwe_kernel: 'ga-16.04'
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
{%- set nics = { nm.cmp001.nic_private: True } %}
{%- set vlan_private_start = (nm.vlan_private | string).rsplit('-')[0] %}
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 %}
+{{ ma.linux_network_interfaces_nic(nics) }}
+
+{{ ma.linux_network_interfaces_vlan(vlans) }}
br-mesh:
enabled: true
type: bridge
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
mtu: 1500
use_interfaces:
- - {{ nm.cmp001.nic_private }}{% if vlan_private_start | int > 0 %}.{{ vlan_private_start }}{% endif %}
+ - {{ ma.interface_str(nm.cmp001.nic_private, vlan_private_start) }}
params:
linux_system_codename: xenial
single_address: ${_param:opendaylight_service_host}
+ pxe_admin_address: ${_param:opnfv_opendaylight_server_node01_pxe_admin_address}
openstack_gateway_node01:
params:
tenant_address: ${_param:opnfv_openstack_gateway_node01_tenant_address}
external_address: ${_param:opnfv_openstack_gateway_node01_external_address}
+ pxe_admin_address: ${_param:opnfv_openstack_gateway_node01_pxe_admin_address}
linux:
network:
interface:
- dhcp_int:
+ pxe_admin_int:
enabled: true
name: {{ nm.ctl01.nic_admin }}
- proto: dhcp
+ proto: static
type: eth
+ address: ${_param:pxe_admin_address}
+ netmask: ${_param:opnfv_net_admin_mask}
+ gateway: {{ nm.net_admin_gw }}
+ name_servers:
+ - {{ nm.net_admin_gw }}
single_int:
enabled: true
name: {{ nm.ctl01.nic_mgmt }}
type: eth
proto: static
address: ${_param:single_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_mgmt_mask}
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
---
classes:
- service.neutron.compute.single
type: dpdk_ovs_bridge
proto: static
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
tenant_interface:
type: dpdk # Not a meaningful type, just match 'dpdk' for filtering
{%- endif %}
type: bridge
proto: static
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
use_interfaces:
- ${_param:tenant_interface}
br-floating:
- ${_param:external_interface}
use_ovs_ports:
- float-to-ex
+ gateway: ${_param:opnfv_net_public_gw}
+ name_servers: {{ nm.dns_public }}
mtu: ${_param:interface_mtu}
proto: static
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
use_interfaces:
- ${_param:tenant_interface}
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
{%- set nics = { nm.cmp001.nic_private: True } %}
{%- set vlan_private_start = (nm.vlan_private | string).rsplit('-')[0] %}
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 %}
+{{ ma.linux_network_interfaces_nic(nics) }}
+
+{{ ma.linux_network_interfaces_vlan(vlans) }}
br-mesh:
enabled: true
type: bridge
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
mtu: 1500
use_interfaces:
- - {{ nm.cmp001.nic_private }}{% if vlan_private_start | int > 0 %}.{{ vlan_private_start }}{% endif %}
+ - {{ ma.interface_str(nm.cmp001.nic_private, vlan_private_start) }}
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
---
classes:
- service.neutron.compute.ovn.single
type: bridge
proto: static
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
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:
- float-to-ex
+ gateway: ${_param:opnfv_net_public_gw}
+ name_servers: {{ nm.dns_public }}
classes:
- cluster.mcp-common-ha.infra.config
- cluster.mcp-ovs-dpdk-ha.infra
- - cluster.all-mcp-arch-common.infra.config_dpdk_pdf
+ - cluster.all-mcp-arch-common.infra.config_pdf
- system.reclass.storage.system.openstack_gateway_single
- cluster.mcp-common-noha.infra.config
- cluster.mcp-ovs-dpdk-noha
- - cluster.all-mcp-arch-common.infra.config_dpdk_pdf
+ - cluster.all-mcp-arch-common.infra.config_pdf
parameters:
reclass:
storage:
params:
tenant_address: ${_param:opnfv_openstack_gateway_node01_tenant_address}
external_address: ${_param:opnfv_openstack_gateway_node01_external_address}
+ pxe_admin_address: ${_param:opnfv_openstack_gateway_node01_pxe_admin_address}
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
---
classes:
- system.nova.compute.nfv.hugepages
linux:
network:
interface:
+ pxe_admin_int:
+ # For scenarios without public network on cmp, set admin gw
+ gateway: {{ nm.net_admin_gw }}
+ name_servers:
+ - {{ nm.net_admin_gw }}
dpdk0:
name: ${_param:dpdk0_name}
pci: ${_param:dpdk0_pci}
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
{%- import 'net_map.j2' as nm with context %}
+{%- import 'net_macros.j2' as ma with context %}
{#- Filter-out NIC duplicates by constructing a dict (used NICs only) #}
{%- set nics = { nm.cmp001.nic_private: True } %}
{%- set vlan_private_start = (nm.vlan_private | string).rsplit('-')[0] %}
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 %}
+{{ ma.linux_network_interfaces_nic(nics) }}
+
+{{ ma.linux_network_interfaces_vlan(vlans) }}
br-mesh:
enabled: true
type: bridge
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
mtu: 1500
use_interfaces:
- - {{ nm.cmp001.nic_private }}{% if vlan_private_start | int > 0 %}.{{ vlan_private_start }}{% endif %}
+ - {{ ma.interface_str(nm.cmp001.nic_private, vlan_private_start) }}
params:
tenant_address: ${_param:opnfv_openstack_gateway_node01_tenant_address}
external_address: ${_param:opnfv_openstack_gateway_node01_external_address}
+ pxe_admin_address: ${_param:opnfv_openstack_gateway_node01_pxe_admin_address}
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
---
classes:
- service.neutron.compute.single
linux:
network:
interface:
+ pxe_admin_int:
+ # For scenarios without public network on cmp, set admin gw
+ gateway: {{ nm.net_admin_gw }}
+ name_servers:
+ - {{ nm.net_admin_gw }}
br-mesh:
enabled: true
type: bridge
proto: static
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
use_interfaces:
- ${_param:tenant_interface}
mtu: ${_param:interface_mtu}
proto: static
address: ${_param:tenant_address}
- netmask: 255.255.255.0
+ netmask: ${_param:opnfv_net_private_mask}
use_interfaces:
- ${_param:tenant_interface}
- chain: POSTROUTING
- jump: MASQUERADE
- destination: 0/0
- - source: {{ salt['pillar.get']('_param:single_address') }}/24
+ - source: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
- save: True
iptables_pxe_source:
- chain: INPUT
- jump: ACCEPT
- destination: 0/0
- - source: {{ salt['pillar.get']('_param:single_address') }}/24
+ - source: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
- save: True
iptables_pxe_destination:
- table: filter
- chain: INPUT
- jump: ACCEPT
- - destination: {{ salt['pillar.get']('_param:single_address') }}/24
+ - destination: {{ salt['pillar.get']('_param:single_address') }}/{{ salt['pillar.get']('_param:opnfv_net_admin_mask') }}
- source: 0/0
- save: True
fi
fi
if ! "${PHAROS_GEN_CFG}" -y "${LOCAL_PDF}" \
+ -i "$(dirname "$(readlink -f "${PHAROS_IA}")")" \
-j "${PHAROS_IA}" -v > "${image_dir}/pod_config.yml"; then
notify_e "[ERROR] Could not convert PDF+IDF to reclass model input!"
fi
-Subproject commit 70f8d63761a0d52790f634642785c9e8bc0d7419
+Subproject commit 9184b745eee64dda19be05d6d01cc2519dcb6031
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 && \
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+{%- import 'net_map.j2' as nm with context %}
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
+echo "master: {{ nm.net_admin | ipnet_hostaddr(nm.start_ip[nm.net_admin] + nm.net_admin_hosts.index('opnfv_infra_config_pxe_admin_address') +1) }}" >> /etc/salt/minion
service salt-minion restart
http://www.apache.org/licenses/LICENSE-2.0
-->
{#- conf.MCPCONTROL_NET & co are mandatory, defaults are set via globals.sh #}
+{%- set net_mcpcontrol = [conf.MCPCONTROL_NET, conf.MCPCONTROL_PREFIX] | join("/") %}
<network>
<name>mcpcontrol</name>
<bridge name="mcpcontrol"/>
<forward mode="nat"/>
- <ip address="{{ conf.MCPCONTROL_NET | ipaddr_index(1) }}" netmask="{{ conf.MCPCONTROL_PREFIX | netmask }}">
+ <ip address="{{ net_mcpcontrol | ipnet_hostaddr(1) }}" netmask="{{ net_mcpcontrol | ipnet_netmask }}">
<dhcp>
- <range start="{{ conf.MCPCONTROL_NET | ipaddr_index(2) }}" end="{{ conf.MCPCONTROL_NET | ipaddr_index(254) }}"/>
+ <range start="{{ net_mcpcontrol | ipnet_hostaddr(2) }}" end="{{ net_mcpcontrol | ipnet_hostmax }}"/>
</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 %}
+{%- import 'net_map.j2' as nm with context %}
<network>
<name>mgmt</name>
<bridge name="mgmt"/>
- <ip address="{{ mgmt_network | ipaddr_index(1) }}" netmask="{{ mgmt_prefix | netmask }}"/>
+ <ip address="{{ nm.net_mgmt | ipnet_hostmin }}" netmask="{{ nm.net_mgmt | ipnet_netmask }}"/>
</network>
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 %}
+{%- import 'net_map.j2' as nm with context %}
<network>
<name>public</name>
<bridge name="public"/>
-{%- if cluster.has_virtual_nodes %}
+{%- if nm.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 }}"/>
+ <ip address="{{ nm.net_public | ipnet_hostmin }}" netmask="{{ nm.net_public | ipnet_netmask }}"/>
{%- endif %}
</network>
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 %}
+{%- import 'net_map.j2' as nm with context %}
<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. -->
+ <ip address="{{ nm.net_admin_gw }}" netmask="{{ nm.net_admin | ipnet_netmask }}">
<dhcp>
- <range start="{{ pxebr_network | ipaddr_index(4) }}" end="{{ pxebr_network | ipaddr_index(254) }}"/>
+ <range start="{{ nm.net_admin_pool_start }}" end="{{ nm.net_admin_pool_end }}"/>
</dhcp>
</ip>
</network>