Allow to set address-related parameters in interface arguments
There is a fixed list of allowed parameters that can be set
as interface parameters to override the values from cluster model.
List of allowed parameters can be found in the file:
{# roles #}/_linux_network_interface
Example for single_address, control_network_netmask and control_vlan:
kvm01.mcp11-ovs-dpdk.local:
reclass_storage_name: infra_kvm_node01
roles:
- infra_kvm
- linux_system_codename_xenial
interfaces:
ens3:
role: single_dhcp
ens4:
role: single_vlan_ctl
single_address: 1.2.3.4
control_network_netmask: 255.255.252.0
control_vlan: 1234
Change-Id: I52f1250a3af510275d7741a1717a04be348778b8
diff --git a/README.md b/README.md
index ea5ddc0..f17bf08 100644
--- a/README.md
+++ b/README.md
@@ -127,3 +127,27 @@
ens3:
role: single_ctl
```
+
+Override addresses example:
+```
+nodes:
+ gtw01.mcp11-ovs-dpdk.local:
+ reclass_storage_name: openstack_control_node01
+ roles:
+ - openstack_gateway
+ - linux_system_codename_xenial
+ interfaces:
+ enp3s0f0:
+ role: single_mgm
+ deploy_address: 1.1.1.10
+ deploy_network_netmask: 255.255.252.0
+ deploy_network_gateway: 1.1.1.1
+ enp3s0f1:
+ role: single_ctl
+ single_address: 2.2.2.2
+ control_network_netmask: 255.255.255.0
+ enp8s0f0:
+ role: bond1_ab_ovs_floating
+ enp8s0f1:
+ role: bond1_ab_ovs_floating
+```
diff --git "a/\173\043 interfaces \043\175/bond0_ab_contrail" "b/\173\043 interfaces \043\175/bond0_ab_contrail"
index 8de76d6..df44060 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_contrail"
+++ "b/\173\043 interfaces \043\175/bond0_ab_contrail"
@@ -4,9 +4,8 @@
{#- Requirements: #}
{#- _param:tenant_vlan #}
{#- _param:tenant_address #}
-{#- _param:tenant_netmask #}
+{#- _param:tenant_network_netmask #}
{#- _param:tenant_network_gateway #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -60,4 +59,4 @@
use_interfaces:
- bond0
require_interfaces:
- - bond0
+ - bond0
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_ctl_contrail" "b/\173\043 interfaces \043\175/bond0_ab_ctl_contrail"
index dfee7cd..d555010 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_ctl_contrail"
+++ "b/\173\043 interfaces \043\175/bond0_ab_ctl_contrail"
@@ -7,11 +7,10 @@
{#- _param:control_network_netmask #}
{#- _param:tenant_vlan #}
{#- _param:tenant_address #}
-{#- _param:tenant_netmask #}
+{#- _param:tenant_network_netmask #}
{#- _param:tenant_network_gateway #}
{#- _param:_param:dns_server01 #}
{#- _param:_param:dns_server02 #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -85,4 +84,4 @@
use_interfaces:
- bond0
require_interfaces:
- - bond0
+ - bond0
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_dvr_vlan_ctl_prv_floating" "b/\173\043 interfaces \043\175/bond0_ab_dvr_vlan_ctl_prv_floating"
index a4f891d..cbc1232 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_dvr_vlan_ctl_prv_floating"
+++ "b/\173\043 interfaces \043\175/bond0_ab_dvr_vlan_ctl_prv_floating"
@@ -7,7 +7,6 @@
{#- _param:single_address #}
{#- _param:control_network_netmask #}
{#- _param:control_vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -62,4 +61,4 @@
type: ovs_port
port_type: patch
bridge: br-prv
- peer: floating-to-prv
+ peer: floating-to-prv
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_dvr_vxlan_ctl_mesh_floating" "b/\173\043 interfaces \043\175/bond0_ab_dvr_vxlan_ctl_mesh_floating"
index 265aba8..c113f14 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_dvr_vxlan_ctl_mesh_floating"
+++ "b/\173\043 interfaces \043\175/bond0_ab_dvr_vxlan_ctl_mesh_floating"
@@ -10,7 +10,6 @@
{#- _param:tenant_address #}
{#- _param:tenant_netmask #}
{#- _param:tenant_vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -60,4 +59,4 @@
address: ${_param:_esc}{_param:tenant_address}
netmask: ${_param:_esc}{_param:tenant_network_netmask}
require_interfaces:
- - br-floating
+ - br-floating
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_nondvr_vlan_ctl_prv" "b/\173\043 interfaces \043\175/bond0_ab_nondvr_vlan_ctl_prv"
index 53cdb09..2287752 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_nondvr_vlan_ctl_prv"
+++ "b/\173\043 interfaces \043\175/bond0_ab_nondvr_vlan_ctl_prv"
@@ -6,7 +6,6 @@
{#- _param:single_address #}
{#- _param:control_network_netmask #}
{#- _param:control_vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -46,4 +45,4 @@
proto: static
type: ovs_port
require_interfaces:
- - br-prv
+ - br-prv
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_nondvr_vxlan_ctl_mesh" "b/\173\043 interfaces \043\175/bond0_ab_nondvr_vxlan_ctl_mesh"
index 42dbfca..bf3efd0 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_nondvr_vxlan_ctl_mesh"
+++ "b/\173\043 interfaces \043\175/bond0_ab_nondvr_vxlan_ctl_mesh"
@@ -9,7 +9,6 @@
{#- _param:tenant_address #}
{#- _param:tenant_netmask #}
{#- _param:tenant_vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -73,4 +72,4 @@
use_interfaces:
- bond0
require_interfaces:
- - bond0
+ - bond0
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl" "b/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl"
index d6bbd72..c136ab9 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl"
+++ "b/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl"
@@ -6,7 +6,6 @@
{#- _param:single_address #}
{#- _param:control_network_netmask #}
{#- _param:control_vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -50,4 +49,4 @@
use_interfaces:
- bond0
require_interfaces:
- - bond0
+ - bond0
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl_prv" "b/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl_prv"
index 3cba8de..eb3826e 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl_prv"
+++ "b/\173\043 interfaces \043\175/bond0_ab_ovs_vlan_ctl_prv"
@@ -6,7 +6,6 @@
{#- _param:single_address #}
{#- _param:control_network_netmask #}
{#- _param:control_vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -46,4 +45,4 @@
proto: static
type: ovs_port
require_interfaces:
- - br-prv
+ - br-prv
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond0_ab_ovs_vxlan_ctl_mesh" "b/\173\043 interfaces \043\175/bond0_ab_ovs_vxlan_ctl_mesh"
index 2aea73d..5ec9ddc 100644
--- "a/\173\043 interfaces \043\175/bond0_ab_ovs_vxlan_ctl_mesh"
+++ "b/\173\043 interfaces \043\175/bond0_ab_ovs_vxlan_ctl_mesh"
@@ -9,7 +9,6 @@
{#- _param:tenant_address #}
{#- _param:tenant_netmask #}
{#- _param:tenant_vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -59,4 +58,4 @@
address: ${_param:_esc}{_param:tenant_address}
netmask: ${_param:_esc}{_param:tenant_network_netmask}
require_interfaces:
- - br-ten
+ - br-ten
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond1_ab_ovs_floating" "b/\173\043 interfaces \043\175/bond1_ab_ovs_floating"
index 9df5f46..f85af26 100644
--- "a/\173\043 interfaces \043\175/bond1_ab_ovs_floating"
+++ "b/\173\043 interfaces \043\175/bond1_ab_ovs_floating"
@@ -5,7 +5,6 @@
{#- _param:?addr #}
{#- _param:?mask #}
{#- _param:?vlan #}
-
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -35,4 +34,4 @@
{%- endfor %}
br-floating:
enabled: true
- type: ovs_bridge
+ type: ovs_bridge
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/bond2_dpdk_prv" "b/\173\043 interfaces \043\175/bond2_dpdk_prv"
index 39bc013..57822bc 100644
--- "a/\173\043 interfaces \043\175/bond2_dpdk_prv"
+++ "b/\173\043 interfaces \043\175/bond2_dpdk_prv"
@@ -2,8 +2,7 @@
{#- br-prv (OVS bridge) #}
{#- Requirements: #}
{#- _param:tenant_address #}
-{#- _param:tenant_netmask #}
-
+{#- _param:tenant_network_netmask #}
# {{ interfaces_role }}
{%- for interface_name, interface in interfaces.items() %}
{{ interface_name }}:
@@ -23,5 +22,5 @@
br-prv:
address: ${_param:_esc}{_param:tenant_address}
enabled: true
- netmask: ${_param:_esc}{_param:tenant_netmask}
- type: dpdk_ovs_bridge
+ netmask: ${_param:_esc}{_param:tenant_network_netmask}
+ type: dpdk_ovs_bridge
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/single_ctl" "b/\173\043 interfaces \043\175/single_ctl"
index ce54ed7..8f16b93 100644
--- "a/\173\043 interfaces \043\175/single_ctl"
+++ "b/\173\043 interfaces \043\175/single_ctl"
@@ -7,7 +7,6 @@
{#- _param:control_network_netmask #}
{#- _param:dns_server01 #}
{#- _param:dns_server02 #}
-
# {{ interfaces_role }}
{%- set interface_name = interfaces.keys()[0] %}
{{ interface_name }}:
@@ -28,4 +27,4 @@
use_interfaces:
- {{ interface_name }}
require_interfaces:
- - {{ interface_name }}
+ - {{ interface_name }}
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/single_dhcp" "b/\173\043 interfaces \043\175/single_dhcp"
index 87315e0..a7160e1 100644
--- "a/\173\043 interfaces \043\175/single_dhcp"
+++ "b/\173\043 interfaces \043\175/single_dhcp"
@@ -1,7 +1,6 @@
{#- Management (admin) network with DHCP #}
{#- Provides: #}
{#- <interface_name> + DHCP address #}
-
# {{ interfaces_role }}
{%- set interface_name = interfaces.keys()[0] %}
{{ interface_name }}:
diff --git "a/\173\043 interfaces \043\175/single_mgm" "b/\173\043 interfaces \043\175/single_mgm"
index a0de958..78b0ca1 100644
--- "a/\173\043 interfaces \043\175/single_mgm"
+++ "b/\173\043 interfaces \043\175/single_mgm"
@@ -7,7 +7,6 @@
{#- _param:deploy_network_gateway #}
{#- _param:dns_server01 #}
{#- _param:dns_server02 #}
-
# {{ interfaces_role }}
{%- set interface_name = interfaces.keys()[0] %}
{{ interface_name }}:
@@ -27,4 +26,4 @@
proto: static
type: bridge
use_interfaces:
- - {{ interface_name }}
+ - {{ interface_name }}
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/single_mgm_dhcp" "b/\173\043 interfaces \043\175/single_mgm_dhcp"
index fd2bf66..df607f5 100644
--- "a/\173\043 interfaces \043\175/single_mgm_dhcp"
+++ "b/\173\043 interfaces \043\175/single_mgm_dhcp"
@@ -1,7 +1,6 @@
{#- Management (admin) network. For nodes where deploy address provided by DHCP server #}
{#- Provides: #}
{#- br_mgm (linux bridge) + DHCP address #}
-
# {{ interfaces_role }}
{%- set interface_name = interfaces.keys()[0] %}
{{ interface_name }}:
@@ -15,4 +14,4 @@
proto: dhcp
type: bridge
use_interfaces:
- - {{ interface_name }}
+ - {{ interface_name }}
\ No newline at end of file
diff --git "a/\173\043 interfaces \043\175/single_vlan_ctl" "b/\173\043 interfaces \043\175/single_vlan_ctl"
index 2b899a2..c0e5a60 100644
--- "a/\173\043 interfaces \043\175/single_vlan_ctl"
+++ "b/\173\043 interfaces \043\175/single_vlan_ctl"
@@ -8,7 +8,6 @@
{#- _param:control_vlan #}
{#- _param:dns_server01 #}
{#- _param:dns_server02 #}
-
# {{ interfaces_role }}
{%- set interface_name = interfaces.keys()[0] %}
{{ interface_name }}:
@@ -38,4 +37,4 @@
use_interfaces:
- {{ interface_name }}
require_interfaces:
- - {{ interface_name }}
+ - {{ interface_name }}
\ No newline at end of file
diff --git "a/\173\043 roles \043\175/_linux_network_interface" "b/\173\043 roles \043\175/_linux_network_interface"
index 9ab7824..c94af4d 100644
--- "a/\173\043 roles \043\175/_linux_network_interface"
+++ "b/\173\043 roles \043\175/_linux_network_interface"
@@ -5,6 +5,21 @@
# interface_param2: value
# ...
#}
+{%- set interface_allowed_params = [
+ 'deploy_address',
+ 'deploy_network_netmask',
+ 'deploy_network_gateway',
+ 'single_address',
+ 'control_vlan',
+ 'control_network_netmask',
+ 'tenant_vlan',
+ 'tenant_address',
+ 'tenant_network_netmask',
+ 'tenant_network_gateway',
+ 'dns_server01',
+ 'dns_server02',
+ ]
+%}
{%- set interface_roles = {} %}
{%- for interface_name, interface in node['interfaces'].items() %}
{%- if interface['role'] not in interface_roles %}
@@ -13,9 +28,12 @@
{%- set _ = interface_roles[interface['role']].update({interface_name: {}}) %}
{%- for param_name, param in interface.items() %}
{%- set _ = interface_roles[interface['role']][interface_name].update({param_name: param}) %}
+ {%- if param_name in interface_allowed_params %}
+ {%- set _ = params.update({param_name: param}) %}
+ {%- endif %}
{%- endfor %}
{%- endfor %}
-{%- set _ = params.update({'linux_network_interfaces': "\n"}) %}
+{%- set _ = params.update({'linux_network_interfaces':''}) %}
{%- for interfaces_role, interfaces in interface_roles.items() %}
{%- import ("{# interfaces #}/" + interfaces_role) as interface with context %}
{%- set _ = params.update({'linux_network_interfaces': params['linux_network_interfaces'] + interface|string }) %}
diff --git "a/\173\173 cookiecutter._env_name \175\175/init.yml" "b/\173\173 cookiecutter._env_name \175\175/init.yml"
index 89db66f..f803888 100644
--- "a/\173\173 cookiecutter._env_name \175\175/init.yml"
+++ "b/\173\173 cookiecutter._env_name \175\175/init.yml"
@@ -12,24 +12,25 @@
node:
{%- for inventory_node_name, node in nodes.items()|sort %}
{%- set node_name = inventory_node_name.split('.')[0] %}
- {{ node['reclass_storage_name'] }}:
+ {{ node['reclass_storage_name'] }}:
+ {#-#}
{#- 'local_metadata' is to collect the data from different roles in a single place inside the node #}
{%- set local_metadata = {} %}
{#- 'params' dict object is dynamically generated from 'roles' to add on the node #}
{%- set params = {} %}
-
+ {#-#}
{%- macro register_metaparam(param_name, role_name) %}
{#- Add the <role_name> into the list attached to <param_name> #}
{#- to control that the <param_name> is not spreaded across incompatible roles #}
{%- set _ = local_metadata.update({param_name: local_metadata.get(param_name, []) + [role_name]}) %}
{%- endmacro %}
-
+ {#-#}
{%- macro set_param(param_name, param_value) %}
{#- Set a parameter for '_param' dict for the node #}
{%- set _ = params.update({param_name: param_value}) %}
{%- endmacro %}
-
+ {#-#}
classes:
{#- Default roles are added to each node #}
{#- 'overrides' must be the very last role for each node #}