summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/Makefile5
-rwxr-xr-xbuild/instack.sh4
-rw-r--r--build/network-environment.yaml1
-rw-r--r--build/nics/compute.yaml15
-rw-r--r--build/nics/compute_br-ex.yaml108
-rw-r--r--build/nics/compute_private.yaml15
-rw-r--r--build/nics/compute_private_br-ex.yaml114
-rw-r--r--build/nics/compute_private_storage.yaml15
-rw-r--r--build/nics/compute_private_storage_br-ex.yaml121
-rw-r--r--build/nics/compute_storage.yaml15
-rw-r--r--build/nics/compute_storage_br-ex.yaml114
-rw-r--r--build/opnfv-apex-undercloud.spec10
-rw-r--r--build/opnfv-tripleo-heat-templates.patch255
-rw-r--r--build/puppet-neutron-force-metadata.patch50
-rwxr-xr-xci/deploy.sh14
15 files changed, 788 insertions, 68 deletions
diff --git a/build/Makefile b/build/Makefile
index f55d3e7a..b0b895a1 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -128,12 +128,17 @@ rpm:
--xform="s:nics/compute_storage.yaml:opnfv-apex-undercloud-$(RPMVERS)/build/nics/compute_storage.yaml:" \
--xform="s:nics/controller_private_storage.yaml:opnfv-apex-undercloud-$(RPMVERS)/build/nics/controller_private_storage.yaml:" \
--xform="s:nics/compute_private_storage.yaml:opnfv-apex-undercloud-$(RPMVERS)/build/nics/compute_private_storage.yaml:" \
+ --xform="s:nics/compute_br-ex.yaml:opnfv-apex-undercloud-$(RPMVERS)/build/nics/compute_br-ex.yaml:" \
+ --xform="s:nics/compute_private_br-ex.yaml:opnfv-apex-undercloud-$(RPMVERS)/build/nics/compute_private_br-ex.yaml:" \
+ --xform="s:nics/compute_storage_br-ex.yaml:opnfv-apex-undercloud-$(RPMVERS)/build/nics/compute_storage_br-ex.yaml:" \
+ --xform="s:nics/compute_private_storage_br-ex.yaml:opnfv-apex-undercloud-$(RPMVERS)/build/nics/compute_private_storage_br-ex.yaml:" \
--xform="s:instackenv-virt.json:opnfv-apex-undercloud-$(RPMVERS)/build/instackenv-virt.json:" \
--xform="s:instackenv.json.example:opnfv-apex-undercloud-$(RPMVERS)/build/instackenv.json.example:" \
stack/instack.qcow2 instack.xml baremetalbrbm_brbm1_brbm2_brbm3_0.xml baremetalbrbm_brbm1_brbm2_brbm3_1.xml \
baremetalbrbm_brbm1_brbm2_brbm3_2.xml baremetalbrbm_brbm1_brbm2_brbm3_3.xml baremetalbrbm_brbm1_brbm2_brbm3_4.xml \
brbm-net.xml brbm1-net.xml brbm2-net.xml brbm3-net.xml default-pool.xml instackenv-virt.json network-environment.yaml \
nics/controller.yaml nics/compute.yaml nics/controller_private.yaml nics/compute_private.yaml \
+ nics/compute_br-ex.yaml nics/compute_private_br-ex.yaml nics/compute_storage_br-ex.yaml nics/compute_private_storage_br-ex.yaml \
nics/controller_storage.yaml nics/compute_storage.yaml nics/controller_private_storage.yaml \
nics/compute_private_storage.yaml instackenv-virt.json instackenv.json.example
rpmbuild -ba opnfv-apex-undercloud.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)' -D "release $(shell echo $(REVSTATE) | tr -d '_-')"
diff --git a/build/instack.sh b/build/instack.sh
index 52339b14..eb017c25 100755
--- a/build/instack.sh
+++ b/build/instack.sh
@@ -268,6 +268,10 @@ LIBGUESTFS_BACKEND=direct virt-customize --upload ../opnfv-tripleo-heat-template
LIBGUESTFS_BACKEND=direct virt-customize --upload ../opendaylight-puppet-neutron.patch:/tmp \
--run-command "cd /etc/puppet/modules/neutron && patch -Np1 < /tmp/opendaylight-puppet-neutron.patch" \
-a overcloud-full-odl.qcow2
+# REMOVE ME AFTER Brahmaputra
+LIBGUESTFS_BACKEND=direct virt-customize --upload ../puppet-neutron-force-metadata.patch:/tmp \
+ --run-command "cd /etc/puppet/modules/neutron && patch -Np1 < /tmp/puppet-neutron-force-metadata.patch" \
+ -a overcloud-full-odl.qcow2
## END WORK AROUND
popd
diff --git a/build/network-environment.yaml b/build/network-environment.yaml
index 01eb50ee..ffe39c97 100644
--- a/build/network-environment.yaml
+++ b/build/network-environment.yaml
@@ -19,6 +19,7 @@ resource_registry:
OS::TripleO::Compute::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
OS::TripleO::Compute::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
OS::TripleO::Compute::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
+ OS::TripleO::Compute::Ports::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external.yaml
# Port assignments for service virtual IPs for the controller role
OS::TripleO::Controller::Ports::RedisVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
diff --git a/build/nics/compute.yaml b/build/nics/compute.yaml
index 674b250a..6978e9e3 100644
--- a/build/nics/compute.yaml
+++ b/build/nics/compute.yaml
@@ -48,6 +48,10 @@ parameters:
ControlPlaneDefaultRoute: # Override this via parameter_defaults
description: The subnet CIDR of the control plane network.
type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
DnsServers: # Override this via parameter_defaults
default: []
description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
@@ -80,6 +84,17 @@ resources:
-
ip_netmask: 169.254.169.254/32
next_hop: {get_param: EC2MetadataIp}
+ -
+ type: interface
+ name: nic3
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
outputs:
OS::stack_id:
diff --git a/build/nics/compute_br-ex.yaml b/build/nics/compute_br-ex.yaml
new file mode 100644
index 00000000..d187a96c
--- /dev/null
+++ b/build/nics/compute_br-ex.yaml
@@ -0,0 +1,108 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Software Config to drive os-net-config to configure multiple interfaces
+ for the compute role.
+
+parameters:
+ ControlPlaneIp:
+ default: ''
+ description: IP address/subnet on the ctlplane network
+ type: string
+ ExternalIpSubnet:
+ default: ''
+ description: IP address/subnet on the external network
+ type: string
+ InternalApiIpSubnet:
+ default: ''
+ description: IP address/subnet on the internal API network
+ type: string
+ StorageIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage network
+ type: string
+ StorageMgmtIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage mgmt network
+ type: string
+ TenantIpSubnet:
+ default: ''
+ description: IP address/subnet on the tenant network
+ type: string
+ InternalApiNetworkVlanID:
+ default: 20
+ description: Vlan ID for the internal_api network traffic.
+ type: number
+ StorageNetworkVlanID:
+ default: 30
+ description: Vlan ID for the storage network traffic.
+ type: number
+ TenantNetworkVlanID:
+ default: 50
+ description: Vlan ID for the tenant network traffic.
+ type: number
+ ControlPlaneSubnetCidr: # Override this via parameter_defaults
+ default: '24'
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ControlPlaneDefaultRoute: # Override this via parameter_defaults
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
+ DnsServers: # Override this via parameter_defaults
+ default: []
+ description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+ type: json
+ EC2MetadataIp: # Override this via parameter_defaults
+ description: The IP address of the EC2 metadata server.
+ type: string
+
+resources:
+ OsNetConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ os_net_config:
+ network_config:
+ -
+ type: interface
+ name: nic1
+ use_dhcp: false
+ dns_servers: {get_param: DnsServers}
+ addresses:
+ -
+ ip_netmask:
+ list_join:
+ - '/'
+ - - {get_param: ControlPlaneIp}
+ - {get_param: ControlPlaneSubnetCidr}
+ routes:
+ -
+ ip_netmask: 169.254.169.254/32
+ next_hop: {get_param: EC2MetadataIp}
+ -
+ type: ovs_bridge
+ name: {get_input: bridge_name}
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ members:
+ -
+ type: interface
+ name: nic3
+ # force the MAC address of the bridge to this interface
+ primary: true
+
+outputs:
+ OS::stack_id:
+ description: The OsNetConfigImpl resource.
+ value: {get_resource: OsNetConfigImpl}
diff --git a/build/nics/compute_private.yaml b/build/nics/compute_private.yaml
index 746831f9..9bc1b69d 100644
--- a/build/nics/compute_private.yaml
+++ b/build/nics/compute_private.yaml
@@ -48,6 +48,10 @@ parameters:
ControlPlaneDefaultRoute: # Override this via parameter_defaults
description: The subnet CIDR of the control plane network.
type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
DnsServers: # Override this via parameter_defaults
default: []
description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
@@ -87,6 +91,17 @@ resources:
addresses:
-
ip_netmask: {get_param: TenantIpSubnet}
+ -
+ type: interface
+ name: nic3
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
outputs:
OS::stack_id:
description: The OsNetConfigImpl resource.
diff --git a/build/nics/compute_private_br-ex.yaml b/build/nics/compute_private_br-ex.yaml
new file mode 100644
index 00000000..94a39bf5
--- /dev/null
+++ b/build/nics/compute_private_br-ex.yaml
@@ -0,0 +1,114 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Software Config to drive os-net-config to configure multiple interfaces
+ for the compute role.
+
+parameters:
+ ControlPlaneIp:
+ default: ''
+ description: IP address/subnet on the ctlplane network
+ type: string
+ ExternalIpSubnet:
+ default: ''
+ description: IP address/subnet on the external network
+ type: string
+ InternalApiIpSubnet:
+ default: ''
+ description: IP address/subnet on the internal API network
+ type: string
+ StorageIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage network
+ type: string
+ StorageMgmtIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage mgmt network
+ type: string
+ TenantIpSubnet:
+ default: ''
+ description: IP address/subnet on the tenant network
+ type: string
+ InternalApiNetworkVlanID:
+ default: 20
+ description: Vlan ID for the internal_api network traffic.
+ type: number
+ StorageNetworkVlanID:
+ default: 30
+ description: Vlan ID for the storage network traffic.
+ type: number
+ TenantNetworkVlanID:
+ default: 50
+ description: Vlan ID for the tenant network traffic.
+ type: number
+ ControlPlaneSubnetCidr: # Override this via parameter_defaults
+ default: '24'
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ControlPlaneDefaultRoute: # Override this via parameter_defaults
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
+ DnsServers: # Override this via parameter_defaults
+ default: []
+ description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+ type: json
+ EC2MetadataIp: # Override this via parameter_defaults
+ description: The IP address of the EC2 metadata server.
+ type: string
+
+resources:
+ OsNetConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ os_net_config:
+ network_config:
+ -
+ type: interface
+ name: nic1
+ use_dhcp: false
+ dns_servers: {get_param: DnsServers}
+ addresses:
+ -
+ ip_netmask:
+ list_join:
+ - '/'
+ - - {get_param: ControlPlaneIp}
+ - {get_param: ControlPlaneSubnetCidr}
+ routes:
+ -
+ ip_netmask: 169.254.169.254/32
+ next_hop: {get_param: EC2MetadataIp}
+ -
+ type: interface
+ name: nic2
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: TenantIpSubnet}
+ -
+ type: ovs_bridge
+ name: {get_input: bridge_name}
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ members:
+ -
+ type: interface
+ name: nic3
+ # force the MAC address of the bridge to this interface
+ primary: true
+outputs:
+ OS::stack_id:
+ description: The OsNetConfigImpl resource.
+ value: {get_resource: OsNetConfigImpl}
diff --git a/build/nics/compute_private_storage.yaml b/build/nics/compute_private_storage.yaml
index d140871f..fc51cfdd 100644
--- a/build/nics/compute_private_storage.yaml
+++ b/build/nics/compute_private_storage.yaml
@@ -48,6 +48,10 @@ parameters:
ControlPlaneDefaultRoute: # Override this via parameter_defaults
description: The subnet CIDR of the control plane network.
type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
DnsServers: # Override this via parameter_defaults
default: []
description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
@@ -89,6 +93,17 @@ resources:
ip_netmask: {get_param: TenantIpSubnet}
-
type: interface
+ name: nic3
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ -
+ type: interface
name: nic4
use_dhcp: false
addresses:
diff --git a/build/nics/compute_private_storage_br-ex.yaml b/build/nics/compute_private_storage_br-ex.yaml
new file mode 100644
index 00000000..1094bb25
--- /dev/null
+++ b/build/nics/compute_private_storage_br-ex.yaml
@@ -0,0 +1,121 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Software Config to drive os-net-config to configure multiple interfaces
+ for the compute role.
+
+parameters:
+ ControlPlaneIp:
+ default: ''
+ description: IP address/subnet on the ctlplane network
+ type: string
+ ExternalIpSubnet:
+ default: ''
+ description: IP address/subnet on the external network
+ type: string
+ InternalApiIpSubnet:
+ default: ''
+ description: IP address/subnet on the internal API network
+ type: string
+ StorageIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage network
+ type: string
+ StorageMgmtIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage mgmt network
+ type: string
+ TenantIpSubnet:
+ default: ''
+ description: IP address/subnet on the tenant network
+ type: string
+ InternalApiNetworkVlanID:
+ default: 20
+ description: Vlan ID for the internal_api network traffic.
+ type: number
+ StorageNetworkVlanID:
+ default: 30
+ description: Vlan ID for the storage network traffic.
+ type: number
+ TenantNetworkVlanID:
+ default: 50
+ description: Vlan ID for the tenant network traffic.
+ type: number
+ ControlPlaneSubnetCidr: # Override this via parameter_defaults
+ default: '24'
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ControlPlaneDefaultRoute: # Override this via parameter_defaults
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
+ DnsServers: # Override this via parameter_defaults
+ default: []
+ description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+ type: json
+ EC2MetadataIp: # Override this via parameter_defaults
+ description: The IP address of the EC2 metadata server.
+ type: string
+
+resources:
+ OsNetConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ os_net_config:
+ network_config:
+ -
+ type: interface
+ name: nic1
+ use_dhcp: false
+ dns_servers: {get_param: DnsServers}
+ addresses:
+ -
+ ip_netmask:
+ list_join:
+ - '/'
+ - - {get_param: ControlPlaneIp}
+ - {get_param: ControlPlaneSubnetCidr}
+ routes:
+ -
+ ip_netmask: 169.254.169.254/32
+ next_hop: {get_param: EC2MetadataIp}
+ -
+ type: interface
+ name: nic2
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: TenantIpSubnet}
+ -
+ type: ovs_bridge
+ name: {get_input: bridge_name}
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ members:
+ -
+ type: interface
+ name: nic3
+ # force the MAC address of the bridge to this interface
+ primary: true
+ -
+ type: interface
+ name: nic4
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: StorageIpSubnet}
+outputs:
+ OS::stack_id:
+ description: The OsNetConfigImpl resource.
+ value: {get_resource: OsNetConfigImpl}
diff --git a/build/nics/compute_storage.yaml b/build/nics/compute_storage.yaml
index 6d048608..a1f22a35 100644
--- a/build/nics/compute_storage.yaml
+++ b/build/nics/compute_storage.yaml
@@ -48,6 +48,10 @@ parameters:
ControlPlaneDefaultRoute: # Override this via parameter_defaults
description: The subnet CIDR of the control plane network.
type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
DnsServers: # Override this via parameter_defaults
default: []
description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
@@ -82,6 +86,17 @@ resources:
next_hop: {get_param: EC2MetadataIp}
-
type: interface
+ name: nic3
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ -
+ type: interface
name: nic4
use_dhcp: false
addresses:
diff --git a/build/nics/compute_storage_br-ex.yaml b/build/nics/compute_storage_br-ex.yaml
new file mode 100644
index 00000000..47412a51
--- /dev/null
+++ b/build/nics/compute_storage_br-ex.yaml
@@ -0,0 +1,114 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Software Config to drive os-net-config to configure multiple interfaces
+ for the compute role.
+
+parameters:
+ ControlPlaneIp:
+ default: ''
+ description: IP address/subnet on the ctlplane network
+ type: string
+ ExternalIpSubnet:
+ default: ''
+ description: IP address/subnet on the external network
+ type: string
+ InternalApiIpSubnet:
+ default: ''
+ description: IP address/subnet on the internal API network
+ type: string
+ StorageIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage network
+ type: string
+ StorageMgmtIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage mgmt network
+ type: string
+ TenantIpSubnet:
+ default: ''
+ description: IP address/subnet on the tenant network
+ type: string
+ InternalApiNetworkVlanID:
+ default: 20
+ description: Vlan ID for the internal_api network traffic.
+ type: number
+ StorageNetworkVlanID:
+ default: 30
+ description: Vlan ID for the storage network traffic.
+ type: number
+ TenantNetworkVlanID:
+ default: 50
+ description: Vlan ID for the tenant network traffic.
+ type: number
+ ControlPlaneSubnetCidr: # Override this via parameter_defaults
+ default: '24'
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ControlPlaneDefaultRoute: # Override this via parameter_defaults
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
+ DnsServers: # Override this via parameter_defaults
+ default: []
+ description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+ type: json
+ EC2MetadataIp: # Override this via parameter_defaults
+ description: The IP address of the EC2 metadata server.
+ type: string
+
+resources:
+ OsNetConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ os_net_config:
+ network_config:
+ -
+ type: interface
+ name: nic1
+ use_dhcp: false
+ dns_servers: {get_param: DnsServers}
+ addresses:
+ -
+ ip_netmask:
+ list_join:
+ - '/'
+ - - {get_param: ControlPlaneIp}
+ - {get_param: ControlPlaneSubnetCidr}
+ routes:
+ -
+ ip_netmask: 169.254.169.254/32
+ next_hop: {get_param: EC2MetadataIp}
+ -
+ type: ovs_bridge
+ name: {get_input: bridge_name}
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ ip_netmask: 0.0.0.0/0
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ members:
+ -
+ type: interface
+ name: nic3
+ # force the MAC address of the bridge to this interface
+ primary: true
+ -
+ type: interface
+ name: nic4
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: StorageIpSubnet}
+outputs:
+ OS::stack_id:
+ description: The OsNetConfigImpl resource.
+ value: {get_resource: OsNetConfigImpl}
diff --git a/build/opnfv-apex-undercloud.spec b/build/opnfv-apex-undercloud.spec
index e18ea8f1..298ad28e 100644
--- a/build/opnfv-apex-undercloud.spec
+++ b/build/opnfv-apex-undercloud.spec
@@ -39,7 +39,11 @@ install build/nics/compute_private.yaml %{buildroot}%{_var}/opt/opnfv/nics/
install build/nics/controller_storage.yaml %{buildroot}%{_var}/opt/opnfv/nics/
install build/nics/compute_storage.yaml %{buildroot}%{_var}/opt/opnfv/nics/
install build/nics/controller_private_storage.yaml %{buildroot}%{_var}/opt/opnfv/nics/
-install build/nics/compute_private_storage.yaml %{buildroot}%{_var}/opt/opnfv/nics
+install build/nics/compute_private_storage.yaml %{buildroot}%{_var}/opt/opnfv/nics/
+install build/nics/compute_br-ex.yaml %{buildroot}%{_var}/opt/opnfv/nics/
+install build/nics/compute_private_br-ex.yaml %{buildroot}%{_var}/opt/opnfv/nics/
+install build/nics/compute_storage_br-ex.yaml %{buildroot}%{_var}/opt/opnfv/nics/
+install build/nics/compute_private_storage_br-ex.yaml %{buildroot}%{_var}/opt/opnfv/nics/
install build/instackenv-virt.json %{buildroot}%{_var}/opt/opnfv/
install build/instackenv.json.example %{buildroot}%{_var}/opt/opnfv/
@@ -62,6 +66,10 @@ install build/instackenv.json.example %{buildroot}%{_var}/opt/opnfv/
%{_var}/opt/opnfv/nics/compute_storage.yaml
%{_var}/opt/opnfv/nics/controller_private_storage.yaml
%{_var}/opt/opnfv/nics/compute_private_storage.yaml
+%{_var}/opt/opnfv/nics/compute_br-ex.yaml
+%{_var}/opt/opnfv/nics/compute_private_br-ex.yaml
+%{_var}/opt/opnfv/nics/compute_storage_br-ex.yaml
+%{_var}/opt/opnfv/nics/compute_private_storage_br-ex.yaml
%{_var}/opt/opnfv/instackenv-virt.json
%{_var}/opt/opnfv/instackenv.json.example
diff --git a/build/opnfv-tripleo-heat-templates.patch b/build/opnfv-tripleo-heat-templates.patch
index be40742e..fd1cd0ef 100644
--- a/build/opnfv-tripleo-heat-templates.patch
+++ b/build/opnfv-tripleo-heat-templates.patch
@@ -1,31 +1,28 @@
-From 63f8b6412f526ba245d86f40eb6b1ae1ee06485d Mon Sep 17 00:00:00 2001
-From: Dan Radez <dradez@redhat.com>
-Date: Sun, 13 Dec 2015 21:20:40 -0500
-Subject: [PATCH] Adds OpenDaylight support
+From f9cd66d8c353411b8c3b32a45ab765eaaee02fec Mon Sep 17 00:00:00 2001
+From: Tim Rozet <tdrozet@gmail.com>
+Date: Tue, 12 Jan 2016 16:49:57 -0500
+Subject: [PATCH] Adds current opnfv patch with ODL L2/L3 and ONOS support
-To enable OpenDaylight on controllers use environments/opendaylight.yaml
-To enable OpenDaylight on external node use
-environments/opendaylight-external.yaml
-
-Adds onos support
---
environments/onos.yaml | 8 +
environments/opendaylight-external.yaml | 25 ++
environments/opendaylight.yaml | 25 ++
+ environments/opendaylight_l3.yaml | 8 +
overcloud-resource-registry-puppet.yaml | 3 +
- overcloud-without-mergepy.yaml | 62 +++++
+ overcloud-without-mergepy.yaml | 73 +++++
puppet/all-nodes-config.yaml | 6 +
- puppet/compute.yaml | 25 ++
- puppet/controller.yaml | 35 +++
+ puppet/compute.yaml | 35 +++
+ puppet/controller.yaml | 47 ++++
puppet/manifests/overcloud_compute.pp | 33 ++-
- puppet/manifests/overcloud_controller.pp | 80 +++++-
- puppet/manifests/overcloud_controller_pacemaker.pp | 299 +++++++++++++--------
- puppet/manifests/overcloud_opendaylight.pp | 26 ++
- puppet/opendaylight-puppet.yaml | 209 ++++++++++++++
- 13 files changed, 712 insertions(+), 124 deletions(-)
+ puppet/manifests/overcloud_controller.pp | 86 +++++-
+ puppet/manifests/overcloud_controller_pacemaker.pp | 302 +++++++++++++--------
+ puppet/manifests/overcloud_opendaylight.pp | 27 ++
+ puppet/opendaylight-puppet.yaml | 217 +++++++++++++++
+ 14 files changed, 771 insertions(+), 124 deletions(-)
create mode 100644 environments/onos.yaml
create mode 100644 environments/opendaylight-external.yaml
create mode 100644 environments/opendaylight.yaml
+ create mode 100644 environments/opendaylight_l3.yaml
create mode 100644 puppet/manifests/overcloud_opendaylight.pp
create mode 100644 puppet/opendaylight-puppet.yaml
@@ -105,8 +102,22 @@ index 0000000..c8abf75
+ # reduce OpenDaylightCount to 0 if you don't want any
+ # OpenDaylight only nodes
+ opendaylight_install: true
+diff --git a/environments/opendaylight_l3.yaml b/environments/opendaylight_l3.yaml
+new file mode 100644
+index 0000000..be7c2a8
+--- /dev/null
++++ b/environments/opendaylight_l3.yaml
+@@ -0,0 +1,8 @@
++parameters:
++ #NeutronEnableL3Agent: false
++ NeutronEnableForceMetadata: true
++ OpenDaylightEnableL3: true
++ NeutronServicePlugins: "networking_odl.l3.l3_odl.OpenDaylightL3RouterPlugin"
++ ExtraConfig:
++ neutron_mechanism_drivers: ['opendaylight']
++ neutron_tenant_network_type: vxlan
diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml
-index c072c29..2413450 100644
+index 4cfed6b..adecc79 100644
--- a/overcloud-resource-registry-puppet.yaml
+++ b/overcloud-resource-registry-puppet.yaml
@@ -27,6 +27,9 @@ resource_registry:
@@ -120,10 +131,21 @@ index c072c29..2413450 100644
# NodeUserData == Cloud-init additional user-data, e.g cloud-config
# ControllerExtraConfigPre == Controller configuration pre service deployment
diff --git a/overcloud-without-mergepy.yaml b/overcloud-without-mergepy.yaml
-index 01c0079..210ec11 100644
+index a532c2f..1aa87ae 100644
--- a/overcloud-without-mergepy.yaml
+++ b/overcloud-without-mergepy.yaml
-@@ -227,6 +227,23 @@ parameters:
+@@ -113,6 +113,10 @@ parameters:
+ default: ''
+ type: string
+ description: Neutron ID for ctlplane network.
++ NeutronEnableForceMetadata:
++ default: 'False'
++ description: If True, DHCP always provides metadata route to VM.
++ type: string
+ NeutronEnableTunnelling:
+ type: string
+ default: "True"
+@@ -227,6 +231,27 @@ parameters:
default: false
description: Should MongoDb journaling be disabled
type: boolean
@@ -131,6 +153,10 @@ index 01c0079..210ec11 100644
+ default: 8081
+ description: Set opendaylight service port
+ type: number
++ OpenDaylightEnableL3:
++ description: Knob to enable/disable ODL L3
++ type: string
++ default: 'no'
+ OpenDaylightInstall:
+ default: false
+ description: Whether to install OpenDaylight on the control nodes.
@@ -147,7 +173,7 @@ index 01c0079..210ec11 100644
PublicVirtualFixedIPs:
default: []
description: >
-@@ -650,6 +667,18 @@ parameters:
+@@ -664,6 +689,18 @@ parameters:
structure as ExtraConfig.
type: json
@@ -166,7 +192,7 @@ index 01c0079..210ec11 100644
# Hostname format for each role
# Note %index% is translated into the index of the node, e.g 0/1/2 etc
# and %stackname% is replaced with OS::stack_name in the template below.
-@@ -674,6 +703,10 @@ parameters:
+@@ -688,6 +725,10 @@ parameters:
type: string
description: Format for CephStorage node hostnames
default: '%stackname%-cephstorage-%index%'
@@ -177,7 +203,7 @@ index 01c0079..210ec11 100644
# Identifiers to trigger tasks on nodes
UpdateIdentifier:
-@@ -756,6 +789,27 @@ resources:
+@@ -770,6 +811,28 @@ resources:
SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
@@ -196,6 +222,7 @@ index 01c0079..210ec11 100644
+ OpenDaylightPort: {get_param: OpenDaylightPort}
+ OpenDaylightUsername: {get_param: OpenDaylightUsername}
+ OpenDaylightPassword: {get_param: OpenDaylightPassword}
++ OpenDaylightEnableL3: {get_param: OpenDaylightEnableL3}
+ OpenDaylightHostname:
+ str_replace:
+ template: {get_param: OpenDaylightHostnameFormat}
@@ -205,7 +232,15 @@ index 01c0079..210ec11 100644
Controller:
type: OS::Heat::ResourceGroup
depends_on: Networks
-@@ -839,6 +893,10 @@ resources:
+@@ -832,6 +895,7 @@ resources:
+ NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
+ NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
+ NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
++ NeutronEnableForceMetadata: {get_param: NeutronEnableForceMetadata}
+ NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
+ NeutronPublicInterface: {get_param: NeutronPublicInterface}
+ NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
+@@ -853,6 +917,11 @@ resources:
NovaPassword: {get_param: NovaPassword}
NtpServer: {get_param: NtpServer}
MongoDbNoJournal: {get_param: MongoDbNoJournal}
@@ -213,11 +248,12 @@ index 01c0079..210ec11 100644
+ OpenDaylightInstall: {get_param: OpenDaylightInstall}
+ OpenDaylightUsername: {get_param: OpenDaylightUsername}
+ OpenDaylightPassword: {get_param: OpenDaylightPassword}
++ OpenDaylightEnableL3: {get_param: OpenDaylightEnableL3}
PcsdPassword: {get_resource: PcsdPassword}
PublicVirtualInterface: {get_param: PublicVirtualInterface}
RabbitPassword: {get_param: RabbitPassword}
-@@ -933,6 +991,9 @@ resources:
- NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
+@@ -948,6 +1017,9 @@ resources:
+ NovaPublicIP: {get_attr: [PublicVirtualIP, ip_address]}
NovaPassword: {get_param: NovaPassword}
NtpServer: {get_param: NtpServer}
+ OpenDaylightPort: {get_param: OpenDaylightPort}
@@ -226,7 +262,7 @@ index 01c0079..210ec11 100644
RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
RabbitPassword: {get_param: RabbitPassword}
RabbitUserName: {get_param: RabbitUserName}
-@@ -1053,6 +1114,7 @@ resources:
+@@ -1068,6 +1140,7 @@ resources:
compute_hosts: {get_attr: [Compute, hosts_entry]}
controller_hosts: {get_attr: [Controller, hosts_entry]}
controller_ips: {get_attr: [Controller, ip_address]}
@@ -259,7 +295,7 @@ index 2bc519b..98283c2 100644
list_join:
- ','
diff --git a/puppet/compute.yaml b/puppet/compute.yaml
-index e259cff..5527669 100644
+index 70c7403..13fd4f6 100644
--- a/puppet/compute.yaml
+++ b/puppet/compute.yaml
@@ -213,6 +213,23 @@ parameters:
@@ -286,8 +322,36 @@ index e259cff..5527669 100644
RabbitHost:
type: string
default: '' # Has to be here because of the ignored empty value bug
-@@ -415,6 +432,10 @@ resources:
- neutron::rabbit_user: {get_input: rabbit_username}
+@@ -320,6 +337,11 @@ resources:
+ properties:
+ ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
+
++ ExternalPort:
++ type: OS::TripleO::Controller::Ports::ExternalPort
++ properties:
++ ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
++
+ NetIpMap:
+ type: OS::TripleO::Network::Ports::NetIpMap
+ properties:
+@@ -327,6 +349,7 @@ resources:
+ InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
+ StorageIp: {get_attr: [StoragePort, ip_address]}
+ TenantIp: {get_attr: [TenantPort, ip_address]}
++ ExternalIp: {get_attr: [ExternalPort, ip_address]}
+
+ NetworkConfig:
+ type: OS::TripleO::Compute::Net::SoftwareConfig
+@@ -335,6 +358,7 @@ resources:
+ InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
+ StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
+ TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
++ ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
+
+ NetworkDeployment:
+ type: OS::TripleO::SoftwareDeployment
+@@ -406,6 +430,10 @@ resources:
+ neutron::rabbit_user: {get_input: rabbit_user}
neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
neutron::rabbit_port: {get_input: rabbit_client_port}
+ opendaylight_port: {get_input: opendaylight_port}
@@ -297,7 +361,7 @@ index e259cff..5527669 100644
neutron_flat_networks: {get_input: neutron_flat_networks}
neutron_host: {get_input: neutron_host}
neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
-@@ -468,6 +489,10 @@ resources:
+@@ -459,6 +487,10 @@ resources:
snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
@@ -308,11 +372,32 @@ index e259cff..5527669 100644
neutron_flat_networks: {get_param: NeutronFlatNetworks}
neutron_host: {get_param: NeutronHost}
neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
+@@ -570,6 +602,9 @@ outputs:
+ tenant_ip_address:
+ description: IP address of the server in the tenant network
+ value: {get_attr: [TenantPort, ip_address]}
++ external_ip_address:
++ description: IP address of the server in the external network
++ value: {get_attr: [ExternalPort, ip_address]}
+ hostname:
+ description: Hostname of the server
+ value: {get_attr: [NovaCompute, name]}
diff --git a/puppet/controller.yaml b/puppet/controller.yaml
-index fdc1821..865a838 100644
+index ea0b3af..1d52922 100644
--- a/puppet/controller.yaml
+++ b/puppet/controller.yaml
-@@ -443,6 +443,27 @@ parameters:
+@@ -357,6 +357,10 @@ parameters:
+ default: 'True'
+ description: Allow automatic l3-agent failover
+ type: string
++ NeutronEnableForceMetadata:
++ default: 'False'
++ description: If True, DHCP always provides metadata route to VM.
++ type: string
+ NeutronEnableTunnelling:
+ type: string
+ default: "True"
+@@ -443,6 +447,31 @@ parameters:
NtpServer:
type: string
default: ''
@@ -333,6 +418,10 @@ index fdc1821..865a838 100644
+ type: string
+ description: The password for the opendaylight server.
+ hidden: true
++ OpenDaylightEnableL3:
++ description: Knob to enable/disable ODL L3
++ type: string
++ default: 'no'
+ ONOSPort:
+ default: 8181
+ description: Set onos service port
@@ -340,7 +429,15 @@ index fdc1821..865a838 100644
PcsdPassword:
type: string
description: The password for the 'pcsd' user.
-@@ -819,6 +840,11 @@ resources:
+@@ -696,6 +725,7 @@ resources:
+ input_values:
+ bootstack_nodeid: {get_attr: [Controller, name]}
+ neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
++ neutron_enable_force_metadata: {get_param: NeutronEnableForceMetadata}
+ haproxy_log_address: {get_param: HAProxySyslogAddress}
+ heat.watch_server_url:
+ list_join:
+@@ -805,6 +835,12 @@ resources:
template: tripleo-CLUSTER
params:
CLUSTER: {get_param: MysqlClusterUniquePart}
@@ -348,11 +445,12 @@ index fdc1821..865a838 100644
+ opendaylight_install: {get_param: OpenDaylightInstall}
+ opendaylight_username: {get_param: OpenDaylightUsername}
+ opendaylight_password: {get_param: OpenDaylightPassword}
++ opendaylight_enable_l3: {get_param: OpenDaylightEnableL3}
+ onos_port: {get_param: ONOSPort}
neutron_flat_networks: {get_param: NeutronFlatNetworks}
neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
neutron_agent_mode: {get_param: NeutronAgentMode}
-@@ -1151,6 +1177,15 @@ resources:
+@@ -1136,6 +1172,16 @@ resources:
mysql_bind_host: {get_input: mysql_network}
mysql_virtual_ip: {get_input: mysql_virtual_ip}
@@ -361,6 +459,7 @@ index fdc1821..865a838 100644
+ opendaylight_install: {get_input: opendaylight_install}
+ opendaylight_username: {get_input: opendaylight_username}
+ opendaylight_password: {get_input: opendaylight_password}
++ opendaylight_enable_l3: {get_input: opendaylight_enable_l3}
+
+ # ONOS
+ onos_port: {get_input: onos_port}
@@ -368,6 +467,14 @@ index fdc1821..865a838 100644
# Neutron
neutron::bind_host: {get_input: neutron_api_network}
neutron::rabbit_password: {get_input: rabbit_password}
+@@ -1152,6 +1198,7 @@ resources:
+ neutron_flat_networks: {get_input: neutron_flat_networks}
+ neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
+ neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
++ neutron::agents::dhcp::enable_force_metadata: {get_input: neutron_enable_force_metadata}
+ neutron_agent_mode: {get_input: neutron_agent_mode}
+ neutron_router_distributed: {get_input: neutron_router_distributed}
+ neutron::core_plugin: {get_input: neutron_core_plugin}
diff --git a/puppet/manifests/overcloud_compute.pp b/puppet/manifests/overcloud_compute.pp
index cd41cc7..b8336ee 100644
--- a/puppet/manifests/overcloud_compute.pp
@@ -413,10 +520,10 @@ index cd41cc7..b8336ee 100644
if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
diff --git a/puppet/manifests/overcloud_controller.pp b/puppet/manifests/overcloud_controller.pp
-index 1b0429b..d3f3d2d 100644
+index 1f6c2be..7851b45 100644
--- a/puppet/manifests/overcloud_controller.pp
+++ b/puppet/manifests/overcloud_controller.pp
-@@ -30,6 +30,20 @@ if hiera('step') >= 1 {
+@@ -30,6 +30,21 @@ if hiera('step') >= 1 {
if hiera('step') >= 2 {
@@ -424,6 +531,7 @@ index 1b0429b..d3f3d2d 100644
+ class {"opendaylight":
+ extra_features => ['odl-ovsdb-openstack'],
+ odl_rest_port => hiera('opendaylight_port'),
++ enable_l3 => hiera('opendaylight_enable_l3', 'no'),
+ }
+ }
+
@@ -437,7 +545,7 @@ index 1b0429b..d3f3d2d 100644
if count(hiera('ntp::servers')) > 0 {
include ::ntp
}
-@@ -223,9 +237,7 @@
+@@ -223,9 +238,7 @@ if hiera('step') >= 3 {
include ::nova::scheduler
include ::nova::scheduler::filter
@@ -447,7 +555,7 @@ index 1b0429b..d3f3d2d 100644
include ::neutron::agents::dhcp
include ::neutron::agents::metadata
-@@ -238,15 +250,71 @@ if hiera('step') >= 3 {
+@@ -237,15 +250,76 @@ if hiera('step') >= 3 {
require => Package['neutron'],
}
@@ -458,7 +566,11 @@ index 1b0429b..d3f3d2d 100644
+ }
+ } else {
+ include ::neutron
-+ include ::neutron::agents::l3
++ if 'opendaylight' in hiera('neutron_mechanism_drivers') {
++ if ! str2bool(hiera('opendaylight_enable_l3', 'no')) {
++ include ::neutron::agents::l3
++ }
++ }
+ }
+
class { '::neutron::plugins::ml2':
@@ -471,7 +583,9 @@ index 1b0429b..d3f3d2d 100644
- tunnel_types => split(hiera('neutron_tunnel_types'), ','),
+
+ if 'opendaylight' in hiera('neutron_mechanism_drivers') {
-+
++ if ! str2bool(hiera('opendaylight_enable_l3', 'no')) {
++ Service['neutron-server'] -> Service['neutron-l3']
++ }
+ if str2bool(hiera('opendaylight_install', 'false')) {
+ $controller_ips = split(hiera('controller_node_ips'), ',')
+ $opendaylight_controller_ip = $controller_ips[0]
@@ -495,7 +609,6 @@ index 1b0429b..d3f3d2d 100644
+ odl_password => hiera('opendaylight_password'),
+ }
+ }
-+ Service['neutron-server'] -> Service['neutron-l3']
+
+ } elsif 'onos_ml2' in hiera('neutron_mechanism_drivers') {
+ #config ml2_conf.ini with onos url address
@@ -522,7 +635,7 @@ index 1b0429b..d3f3d2d 100644
if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
include ::neutron::plugins::ml2::cisco::nexus1000v
-@@ -281,8 +349,6 @@ if hiera('step') >= 3 {
+@@ -280,8 +354,6 @@ if hiera('step') >= 3 {
}
Service['neutron-server'] -> Service['neutron-dhcp-service']
@@ -532,10 +645,10 @@ index 1b0429b..d3f3d2d 100644
include ::cinder
diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp
-index 863cc5f..5b1c37a 100644
+index 3fb92f3..9568390 100644
--- a/puppet/manifests/overcloud_controller_pacemaker.pp
+++ b/puppet/manifests/overcloud_controller_pacemaker.pp
-@@ -380,6 +380,20 @@ if hiera('step') >= 2 {
+@@ -380,6 +380,21 @@ if hiera('step') >= 2 {
}
@@ -543,6 +656,7 @@ index 863cc5f..5b1c37a 100644
+ class {"opendaylight":
+ extra_features => ['odl-ovsdb-openstack'],
+ odl_rest_port => hiera('opendaylight_port'),
++ enable_l3 => hiera('opendaylight_enable_l3', 'no'),
+ }
+ }
+
@@ -556,7 +670,7 @@ index 863cc5f..5b1c37a 100644
exec { 'galera-ready' :
command => '/usr/bin/clustercheck >/dev/null',
timeout => 30,
-@@ -584,7 +598,14 @@ if hiera('step') >= 3 {
+@@ -584,7 +599,14 @@ if hiera('step') >= 3 {
include ::nova::network::neutron
# Neutron class definitions
@@ -572,7 +686,7 @@ index 863cc5f..5b1c37a 100644
class { '::neutron::server' :
sync_db => $sync_db,
manage_service => false,
-@@ -595,10 +616,6 @@ if hiera('step') >= 3 {
+@@ -594,10 +616,6 @@ if hiera('step') >= 3 {
manage_service => false,
enabled => false,
}
@@ -583,7 +697,7 @@ index 863cc5f..5b1c37a 100644
class { '::neutron::agents::metadata':
manage_service => false,
enabled => false,
-@@ -610,18 +627,66 @@ if hiera('step') >= 3 {
+@@ -609,18 +627,68 @@ if hiera('step') >= 3 {
notify => Service['neutron-dhcp-service'],
require => Package['neutron'],
}
@@ -616,7 +730,7 @@ index 863cc5f..5b1c37a 100644
+ odl_password => hiera('opendaylight_password'),
+ odl_port => hiera('opendaylight_port'),
+ }
-+
+
+ if str2bool(hiera('opendaylight_install', 'false')) {
+ class { 'neutron::plugins::ovs::opendaylight':
+ odl_controller_ip => $opendaylight_controller_ip,
@@ -626,9 +740,11 @@ index 863cc5f..5b1c37a 100644
+ odl_password => hiera('opendaylight_password'),
+ }
+ }
-+ class { '::neutron::agents::l3' :
-+ manage_service => false,
-+ enabled => false,
++ if ! str2bool(hiera('opendaylight_enable_l3', 'no')) {
++ class { '::neutron::agents::l3' :
++ manage_service => false,
++ enabled => false,
++ }
+ }
+ } elsif 'onos_ml2' in hiera('neutron_mechanism_drivers') {
+ #config ml2_conf.ini with onos url address
@@ -640,7 +756,7 @@ index 863cc5f..5b1c37a 100644
+ 'onos/password': value => 'admin';
+ 'onos/url_path': value => "http://${controller_node_ips[0]}:${onos_port}/onos/vtn";
+ }
-
++
+ } else {
+ class { '::neutron::agents::l3' :
+ manage_service => false,
@@ -656,22 +772,22 @@ index 863cc5f..5b1c37a 100644
if 'cisco_ucsm' in hiera('neutron_mechanism_drivers') {
include ::neutron::plugins::ml2::cisco::ucsm
}
-@@ -646,8 +711,10 @@ if hiera('step') >= 3 {
+@@ -645,8 +713,10 @@ if hiera('step') >= 3 {
if hiera('neutron_enable_bigswitch_ml2', false) {
include ::neutron::plugins::ml2::bigswitch::restproxy
}
- neutron_l3_agent_config {
- 'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
-+ if !('onos_ml2' in hiera('neutron_mechanism_drivers')) {
++ if !('onos_ml2' in hiera('neutron_mechanism_drivers') or str2bool(hiera('opendaylight_enable_l3', 'no'))) {
+ neutron_l3_agent_config {
+ 'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
+ }
}
neutron_dhcp_agent_config {
'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
-@@ -1073,62 +1140,21 @@ if hiera('step') >= 4 {
- require => Pacemaker::Resource::Service[$::keystone::params::service_name]
- }
+@@ -1055,62 +1125,21 @@ if hiera('step') >= 4 {
+ clone_params => 'interleave=true',
+ require => Pacemaker::Resource::Service[$::keystone::params::service_name],
}
- pacemaker::resource::service { $::neutron::params::l3_agent_service:
- clone_params => 'interleave=true',
@@ -736,7 +852,7 @@ index 863cc5f..5b1c37a 100644
pacemaker::constraint::base { 'keystone-to-neutron-server-constraint':
constraint_type => 'order',
first_resource => "${::keystone::params::service_name}-clone",
-@@ -1138,65 +1164,110 @@ if hiera('step') >= 4 {
+@@ -1120,65 +1149,110 @@ if hiera('step') >= 4 {
require => [Pacemaker::Resource::Service[$::keystone::params::service_name],
Pacemaker::Resource::Service[$::neutron::params::server_service]],
}
@@ -865,7 +981,7 @@ index 863cc5f..5b1c37a 100644
- score => 'INFINITY',
- require => [Pacemaker::Resource::Service[$::neutron::params::l3_agent_service],
- Pacemaker::Resource::Service[$::neutron::params::metadata_agent_service]],
-+ if !('onos_ml2' in hiera('neutron_mechanism_drivers')) {
++ if !('onos_ml2' in hiera('neutron_mechanism_drivers') or str2bool(hiera('opendaylight_enable_l3', 'no'))) {
+ pacemaker::constraint::base { 'neutron-dhcp-agent-to-l3-agent-constraint':
+ constraint_type => 'order',
+ first_resource => "${::neutron::params::dhcp_agent_service}-clone",
@@ -897,7 +1013,7 @@ index 863cc5f..5b1c37a 100644
+ score => 'INFINITY',
+ require => [Pacemaker::Resource::Service[$::neutron::params::l3_agent_service],
+ Pacemaker::Resource::Service[$::neutron::params::metadata_agent_service]],
-+ }
++ }
}
-
# Nova
@@ -905,10 +1021,10 @@ index 863cc5f..5b1c37a 100644
clone_params => 'interleave=true',
diff --git a/puppet/manifests/overcloud_opendaylight.pp b/puppet/manifests/overcloud_opendaylight.pp
new file mode 100644
-index 0000000..aea6568
+index 0000000..33f609a
--- /dev/null
+++ b/puppet/manifests/overcloud_opendaylight.pp
-@@ -0,0 +1,26 @@
+@@ -0,0 +1,27 @@
+# Copyright 2015 Red Hat, Inc.
+# All Rights Reserved.
+#
@@ -933,14 +1049,15 @@ index 0000000..aea6568
+class {"opendaylight":
+ extra_features => ['odl-ovsdb-openstack'],
+ odl_rest_port => hiera('opendaylight_port'),
++ enable_l3 => hiera('opendaylight_enable_l3', 'no'),
+}
+
diff --git a/puppet/opendaylight-puppet.yaml b/puppet/opendaylight-puppet.yaml
new file mode 100644
-index 0000000..70f2543
+index 0000000..b876dc7
--- /dev/null
+++ b/puppet/opendaylight-puppet.yaml
-@@ -0,0 +1,209 @@
+@@ -0,0 +1,217 @@
+heat_template_version: 2015-04-30
+
+description: >
@@ -968,6 +1085,10 @@ index 0000000..70f2543
+ description: The admin password for the OpenDaylight node
+ type: string
+ hidden: true
++ OpenDaylightEnableL3:
++ description: Knob to enable/disable ODL L3
++ type: string
++ default: 'no'
+ OpenDaylightPort:
+ default: 8081
+ description: Set OpenDaylight service port
@@ -1066,6 +1187,9 @@ index 0000000..70f2543
+ params:
+ server: {get_param: NtpServer}
+ opendaylight_port: {get_param: OpenDaylightPort}
++ opendaylight_enable_l3: {get_param: OpenDaylightEnableL3}
++ opendaylight_username: {get_param: OpenDaylightUsername}
++ opendaylight_password: {get_param: OpenDaylightPassword}
+
+ OpenDaylightConfig:
+ type: OS::Heat::StructuredConfig
@@ -1090,6 +1214,7 @@ index 0000000..70f2543
+ opendaylight::admin_username: {get_param: OpenDaylightUsername}
+ opendaylight::admin_password: {get_param: OpenDaylightPassword}
+ opendaylight_port: {get_input: opendaylight_port}
++ opendaylight_enable_l3: {get_input: opendaylight_enable_l3}
+ ceph:
+ raw_data: {get_file: hieradata/ceph.yaml}
+
diff --git a/build/puppet-neutron-force-metadata.patch b/build/puppet-neutron-force-metadata.patch
new file mode 100644
index 00000000..df6061ba
--- /dev/null
+++ b/build/puppet-neutron-force-metadata.patch
@@ -0,0 +1,50 @@
+From ca931831dbfe876095357acbf39dca17c3d3df71 Mon Sep 17 00:00:00 2001
+From: root <root@overcloud-controller-0.localdomain>
+Date: Sun, 17 Jan 2016 03:07:49 +0000
+Subject: [PATCH] Adds force metadata option
+
+---
+ manifests/agents/dhcp.pp | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/manifests/agents/dhcp.pp b/manifests/agents/dhcp.pp
+index 0c10492..cf772b5 100644
+--- a/manifests/agents/dhcp.pp
++++ b/manifests/agents/dhcp.pp
+@@ -53,6 +53,10 @@
+ # (optional) enable metadata support on isolated networks.
+ # Defaults to false.
+ #
++# [*enable_force_metadata*]
++# (optional) enable metadata support on all networks.
++# Defaults to false.
++#
+ # [*enable_metadata_network*]
+ # (optional) 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
+@@ -86,6 +90,7 @@ class neutron::agents::dhcp (
+ $dnsmasq_config_file = undef,
+ $dhcp_delete_namespaces = true,
+ $enable_isolated_metadata = false,
++ $enable_force_metadata = false,
+ $enable_metadata_network = false,
+ $dhcp_broadcast_reply = false,
+ # DEPRECATED PARAMETERS
+@@ -110,11 +115,12 @@ class neutron::agents::dhcp (
+ }
+ }
+
+- if (! $enable_isolated_metadata) and $enable_metadata_network {
+- fail('enable_metadata_network to true requires enable_isolated_metadata also enabled.')
++ if (! ($enable_isolated_metadata or $enable_force_metadata)) and $enable_metadata_network {
++ fail('enable_metadata_network to true requires enable_isolated_metadata or enable_force_metadata also enabled.')
+ } else {
+ neutron_dhcp_agent_config {
+ 'DEFAULT/enable_isolated_metadata': value => $enable_isolated_metadata;
++ 'DEFAULT/force_metadata': value => $enable_force_metadata;
+ 'DEFAULT/enable_metadata_network': value => $enable_metadata_network;
+ }
+ }
+--
+1.8.3.1
+
diff --git a/ci/deploy.sh b/ci/deploy.sh
index 6ac6aff9..e99f4b27 100755
--- a/ci/deploy.sh
+++ b/ci/deploy.sh
@@ -651,6 +651,11 @@ function configure_network_environment {
sed -i 's#^.*Compute::Ports::StoragePort:.*$# OS::TripleO::Compute::Ports::StoragePort: '${tht_dir}'/ports/noop.yaml#' $1
fi
+ # check for ODL L3
+ if [ ${deploy_options_array['sdn_l3']} == 'true' ]; then
+ nic_ext+=_br-ex
+ fi
+
# set nics appropriately
sed -i 's#^.*Compute::Net::SoftwareConfig:.*$# OS::TripleO::Compute::Net::SoftwareConfig: nics/compute'${nic_ext}'.yaml#' $1
sed -i 's#^.*Controller::Net::SoftwareConfig:.*$# OS::TripleO::Controller::Net::SoftwareConfig: nics/controller'${nic_ext}'.yaml#' $1
@@ -764,9 +769,12 @@ sleep 15
##preping it for deployment and launch the deploy
##params: none
function undercloud_prep_overcloud_deploy {
- # TODO ADD ODL L3 logic here
if [[ ${#deploy_options_array[@]} -eq 0 || ${deploy_options_array['sdn_controller']} == 'opendaylight' ]]; then
- DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight.yaml"
+ if [ ${deploy_options_array['sdn_l3']} == 'true' ]; then
+ DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_l3.yaml"
+ else
+ DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight.yaml"
+ fi
elif [ ${deploy_options_array['sdn_controller']} == 'opendaylight-external' ]; then
DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight-external.yaml"
elif [ ${deploy_options_array['sdn_controller']} == 'onos' ]; then
@@ -798,6 +806,8 @@ function undercloud_prep_overcloud_deploy {
DEPLOY_OPTIONS+=" --control-flavor control --compute-flavor compute"
fi
+ echo -e "${blue}INFO: Deploy options set:\n${DEPLOY_OPTIONS}${reset}"
+
ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI
source stackrc
set -o errexit