From 668e52b657e134d27dbd03b473dc927daa58dda6 Mon Sep 17 00:00:00 2001 From: Tim Rozet Date: Sat, 16 Jan 2016 22:50:36 -0500 Subject: Adds ODL L3 and external network support on compute nodes Adds support for ODL L3 which uses DVR (distributed virtual routing). Due to DVR compute nodes must have br-ex. In addition, neutron must force metadata via dhcp agent, since there is no neutron L3 agent running. ODL L3 runs as custom plugin to neutron. Also adds support for configuring IP on public NIC now by default. This is needed for ONOS deployment, and access via public interface. Change-Id: I5df0e49bd903efacf8c87486da27576b01ce5779 Signed-off-by: Tim Rozet --- build/Makefile | 5 + build/instack.sh | 4 + build/network-environment.yaml | 1 + build/nics/compute.yaml | 15 ++ build/nics/compute_br-ex.yaml | 108 +++++++++++ build/nics/compute_private.yaml | 15 ++ build/nics/compute_private_br-ex.yaml | 114 ++++++++++++ build/nics/compute_private_storage.yaml | 15 ++ build/nics/compute_private_storage_br-ex.yaml | 121 ++++++++++++ build/nics/compute_storage.yaml | 15 ++ build/nics/compute_storage_br-ex.yaml | 114 ++++++++++++ build/opnfv-apex-undercloud.spec | 10 +- build/opnfv-tripleo-heat-templates.patch | 255 +++++++++++++++++++------- build/puppet-neutron-force-metadata.patch | 50 +++++ 14 files changed, 776 insertions(+), 66 deletions(-) create mode 100644 build/nics/compute_br-ex.yaml create mode 100644 build/nics/compute_private_br-ex.yaml create mode 100644 build/nics/compute_private_storage_br-ex.yaml create mode 100644 build/nics/compute_storage_br-ex.yaml create mode 100644 build/puppet-neutron-force-metadata.patch (limited to 'build') 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. @@ -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} - type: interface name: nic4 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. @@ -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} - type: interface name: nic4 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 -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 +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 +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 + -- cgit 1.2.3-korg