Changes to make SFC deployments functional 93/8393/5
authorTim Rozet <trozet@redhat.com>
Fri, 29 Jan 2016 06:17:24 +0000 (01:17 -0500)
committerTim Rozet <trozet@redhat.com>
Sat, 30 Jan 2016 06:40:15 +0000 (01:40 -0500)
Fixes include:
 - sfc deployments now are non-HA, and disable swift and ringbuilder as
it causes issues with the 3.13 kernel
 - ODL Features boot is now parameterized in heat templates
 - SFC features boot is now set to "odl-ovsdb-sfc-rest"
 - Coexistence table offsets included if SFC deployment
 - VXLAN workaround applied for 123.123.123.x subnet if SFC

Change-Id: Ide5e0b451adcb98c417e57628a51302f3123647f
Signed-off-by: Tim Rozet <trozet@redhat.com>
build/opnfv-apex-common.spec
build/opnfv-tripleo-heat-templates.patch
ci/deploy.sh
config/deploy/os-odl_l2-sfc-noha.yaml [moved from config/deploy/os-odl_l2-sfc-ha.yaml with 86% similarity]

index 752ce2e..e0fd475 100644 (file)
@@ -31,7 +31,7 @@ install ci/clean.sh %{buildroot}%{_bindir}/opnfv-clean
 mkdir -p %{buildroot}%{_sysconfdir}/opnfv-apex/
 install config/deploy/os-nosdn-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-ha.yaml
 install config/deploy/os-odl_l2-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l2-nofeature-ha.yaml
-install config/deploy/os-odl_l2-sfc-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-ha.yaml
+install config/deploy/os-odl_l2-sfc-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-noha.yaml
 install config/deploy/os-odl_l3-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-ha.yaml
 install config/deploy/os-onos-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-onos-nofeature-ha.yaml
 install config/deploy/os-opencontrail-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-opencontrail-nofeature-ha.yaml
@@ -59,7 +59,7 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/
 %{_var}/opt/opnfv/lib/installer/onos/onos_gw_mac_update.sh
 %{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-ha.yaml
 %{_sysconfdir}/opnfv-apex/os-odl_l2-nofeature-ha.yaml
-%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-ha.yaml
+%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-noha.yaml
 %{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-ha.yaml
 %{_sysconfdir}/opnfv-apex/os-onos-nofeature-ha.yaml
 %{_sysconfdir}/opnfv-apex/os-opencontrail-nofeature-ha.yaml
index c456a36..47e39bc 100644 (file)
@@ -1,4 +1,4 @@
-From b4edc1dff23217add43d92cac3c2906dcd1c74d1 Mon Sep 17 00:00:00 2001
+From c74ab53470e79a22e3f411c81ab1dce072d44908 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 and ONOS support
@@ -8,24 +8,26 @@ Subject: [PATCH] Adds current opnfv patch with ODL and ONOS support
  environments/opendaylight-external.yaml            |  25 ++
  environments/opendaylight.yaml                     |  25 ++
  environments/opendaylight_l3.yaml                  |   9 +
+ environments/opendaylight_sfc.yaml                 |  28 ++
  network/endpoints/endpoint_map.yaml                |  31 ++
  overcloud-resource-registry-puppet.yaml            |   3 +
- overcloud-without-mergepy.yaml                     |  87 +++++
+ overcloud-without-mergepy.yaml                     |  93 +++++
  puppet/all-nodes-config.yaml                       |  17 +
  puppet/compute.yaml                                |  35 ++
- puppet/controller.yaml                             |  87 ++++-
+ puppet/controller.yaml                             |  93 ++++-
  puppet/hieradata/common.yaml                       |   1 +
  puppet/hieradata/controller.yaml                   |   3 +
- puppet/manifests/overcloud_compute.pp              |  33 +-
- puppet/manifests/overcloud_controller.pp           | 104 ++++-
+ puppet/manifests/overcloud_compute.pp              |  31 +-
+ puppet/manifests/overcloud_controller.pp           | 128 +++++-
  puppet/manifests/overcloud_controller_pacemaker.pp | 434 ++++++++++++++-------
  puppet/manifests/overcloud_opendaylight.pp         |  27 ++
- puppet/opendaylight-puppet.yaml                    | 217 +++++++++++
- 17 files changed, 986 insertions(+), 160 deletions(-)
+ puppet/opendaylight-puppet.yaml                    | 223 +++++++++++
+ 18 files changed, 1054 insertions(+), 160 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 environments/opendaylight_sfc.yaml
  create mode 100644 puppet/manifests/overcloud_opendaylight.pp
  create mode 100644 puppet/opendaylight-puppet.yaml
 
@@ -120,6 +122,40 @@ index 0000000..05c0aff
 +      neutron_mechanism_drivers: ['opendaylight']
 +      neutron_tenant_network_type: vxlan
 +      opendaylight_install: true
+diff --git a/environments/opendaylight_sfc.yaml b/environments/opendaylight_sfc.yaml
+new file mode 100644
+index 0000000..3dd1e13
+--- /dev/null
++++ b/environments/opendaylight_sfc.yaml
+@@ -0,0 +1,28 @@
++# Environment file used to enable OpenDaylight
++# Currently uses overcloud image that is assumed
++# to be virt-customized with ODL RPM already on it
++
++# These parameters customize the OpenDaylight Node
++# The user name and password are for the ODL service
++# Defaults are included here for reference
++#parameter_defaults:
++#  OpenDaylightFlavor: baremetal
++#  OpenDaylightHostname: opendaylight-server
++#  OpenDaylightImage: overcloud-full
++#  OpenDaylightUsername: admin
++#  OpenDaylightPassword: admin
++
++parameters:
++    # increase this if you need more ODL nodes
++    # OpenDaylightCount: 1
++    ControllerEnableSwiftStorage: false
++    OpenDaylightFeatures: "odl-ovsdb-sfc-rest"
++    NeutronL3HA: false
++    ExtraConfig:
++      tripleo::ringbuilder::build_ring: False
++      neutron_mechanism_drivers: ['opendaylight']
++      neutron_tenant_network_type: vxlan
++      # Enable this if you want OpenDaylight on the contollers
++      # reduce OpenDaylightCount to 0 if you don't want any
++      # OpenDaylight only nodes
++      opendaylight_install: true
 diff --git a/network/endpoints/endpoint_map.yaml b/network/endpoints/endpoint_map.yaml
 index 0521401..7caa91b 100644
 --- a/network/endpoints/endpoint_map.yaml
@@ -198,7 +234,7 @@ index 4cfed6b..adecc79 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 a532c2f..5206004 100644
+index a532c2f..965ca4c 100644
 --- a/overcloud-without-mergepy.yaml
 +++ b/overcloud-without-mergepy.yaml
 @@ -15,6 +15,11 @@ parameters:
@@ -224,7 +260,7 @@ index a532c2f..5206004 100644
    NeutronEnableTunnelling:
      type: string
      default: "True"
-@@ -227,6 +236,27 @@ parameters:
+@@ -227,6 +236,31 @@ parameters:
      default: false
      description: Should MongoDb journaling be disabled
      type: boolean
@@ -236,6 +272,10 @@ index a532c2f..5206004 100644
 +    description: Knob to enable/disable ODL L3
 +    type: string
 +    default: 'no'
++  OpenDaylightFeatures:
++    description: List of features to install with ODL
++    type: comma_delimited_list
++    default: "odl-ovsdb-openstack"
 +  OpenDaylightInstall:
 +    default: false
 +    description: Whether to install OpenDaylight on the control nodes.
@@ -252,7 +292,7 @@ index a532c2f..5206004 100644
    PublicVirtualFixedIPs:
      default: []
      description: >
-@@ -575,6 +605,7 @@ parameters:
+@@ -575,6 +609,7 @@ parameters:
      default:
        NeutronTenantNetwork: tenant
        CeilometerApiNetwork: internal_api
@@ -260,7 +300,7 @@ index a532c2f..5206004 100644
        MongoDbNetwork: internal_api
        CinderApiNetwork: internal_api
        CinderIscsiNetwork: storage
-@@ -664,6 +695,18 @@ parameters:
+@@ -664,6 +699,18 @@ parameters:
        structure as ExtraConfig.
      type: json
  
@@ -279,7 +319,7 @@ index a532c2f..5206004 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.
-@@ -688,6 +731,10 @@ parameters:
+@@ -688,6 +735,10 @@ parameters:
      type: string
      description: Format for CephStorage node hostnames
      default: '%stackname%-cephstorage-%index%'
@@ -290,7 +330,7 @@ index a532c2f..5206004 100644
  
    # Identifiers to trigger tasks on nodes
    UpdateIdentifier:
-@@ -758,6 +805,7 @@ resources:
+@@ -758,6 +809,7 @@ resources:
      properties:
        CloudName: {get_param: CloudName}
        CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
@@ -298,7 +338,7 @@ index a532c2f..5206004 100644
        CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
        GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
        GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
-@@ -770,6 +818,28 @@ resources:
+@@ -770,6 +822,29 @@ resources:
        SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
        PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
  
@@ -316,6 +356,7 @@ index a532c2f..5206004 100644
 +          OpenDaylightImage: {get_param: OpenDaylightImage}
 +          OpenDaylightPort: {get_param: OpenDaylightPort}
 +          OpenDaylightUsername: {get_param: OpenDaylightUsername}
++          OpenDaylightFeatures: {get_param: OpenDaylightFeatures}
 +          OpenDaylightPassword: {get_param: OpenDaylightPassword}
 +          OpenDaylightEnableL3: {get_param: OpenDaylightEnableL3}
 +          OpenDaylightHostname:
@@ -327,7 +368,7 @@ index a532c2f..5206004 100644
    Controller:
      type: OS::Heat::ResourceGroup
      depends_on: Networks
-@@ -781,6 +851,7 @@ resources:
+@@ -781,6 +856,7 @@ resources:
          properties:
            AdminPassword: {get_param: AdminPassword}
            AdminToken: {get_param: AdminToken}
@@ -335,7 +376,7 @@ index a532c2f..5206004 100644
            CeilometerBackend: {get_param: CeilometerBackend}
            CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
            CeilometerPassword: {get_param: CeilometerPassword}
-@@ -832,6 +903,7 @@ resources:
+@@ -832,6 +908,7 @@ resources:
            NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
            NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
            NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
@@ -343,19 +384,20 @@ index a532c2f..5206004 100644
            NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
            NeutronPublicInterface: {get_param: NeutronPublicInterface}
            NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
-@@ -853,6 +925,11 @@ resources:
+@@ -853,6 +930,12 @@ resources:
            NovaPassword: {get_param: NovaPassword}
            NtpServer: {get_param: NtpServer}
            MongoDbNoJournal: {get_param: MongoDbNoJournal}
 +          OpenDaylightPort: {get_param: OpenDaylightPort}
 +          OpenDaylightInstall: {get_param: OpenDaylightInstall}
 +          OpenDaylightUsername: {get_param: OpenDaylightUsername}
++          OpenDaylightFeatures: {get_param: OpenDaylightFeatures}
 +          OpenDaylightPassword: {get_param: OpenDaylightPassword}
 +          OpenDaylightEnableL3: {get_param: OpenDaylightEnableL3}
            PcsdPassword: {get_resource: PcsdPassword}
            PublicVirtualInterface: {get_param: PublicVirtualInterface}
            RabbitPassword: {get_param: RabbitPassword}
-@@ -878,6 +955,7 @@ resources:
+@@ -878,6 +961,7 @@ resources:
            ServiceNetMap: {get_param: ServiceNetMap}
            EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
            CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
@@ -363,7 +405,7 @@ index a532c2f..5206004 100644
            CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
            HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
            GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
-@@ -948,6 +1026,9 @@ resources:
+@@ -948,6 +1032,9 @@ resources:
            NovaPublicIP: {get_attr: [PublicVirtualIP, ip_address]}
            NovaPassword: {get_param: NovaPassword}
            NtpServer: {get_param: NtpServer}
@@ -373,7 +415,7 @@ index a532c2f..5206004 100644
            RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
            RabbitPassword: {get_param: RabbitPassword}
            RabbitUserName: {get_param: RabbitUserName}
-@@ -1068,6 +1149,7 @@ resources:
+@@ -1068,6 +1155,7 @@ resources:
        compute_hosts: {get_attr: [Compute, hosts_entry]}
        controller_hosts: {get_attr: [Controller, hosts_entry]}
        controller_ips: {get_attr: [Controller, ip_address]}
@@ -381,7 +423,7 @@ index a532c2f..5206004 100644
        block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
        object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
        ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
-@@ -1081,6 +1163,7 @@ resources:
+@@ -1081,6 +1169,7 @@ resources:
        heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
        swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
        ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
@@ -389,7 +431,7 @@ index a532c2f..5206004 100644
        nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
        nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
        glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
-@@ -1189,6 +1272,7 @@ resources:
+@@ -1189,6 +1278,7 @@ resources:
          nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
          nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
          ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
@@ -397,7 +439,7 @@ index a532c2f..5206004 100644
          heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
          horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
          redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
-@@ -1434,6 +1518,9 @@ outputs:
+@@ -1434,6 +1524,9 @@ outputs:
    PublicVip:
      description: Controller VIP for public API endpoints
      value: {get_attr: [PublicVirtualIP, ip_address]}
@@ -552,7 +594,7 @@ index 70c7403..13fd4f6 100644
      description: Hostname of the server
      value: {get_attr: [NovaCompute, name]}
 diff --git a/puppet/controller.yaml b/puppet/controller.yaml
-index ea0b3af..1e6539b 100644
+index ea0b3af..bd82e93 100644
 --- a/puppet/controller.yaml
 +++ b/puppet/controller.yaml
 @@ -14,6 +14,14 @@ parameters:
@@ -581,7 +623,7 @@ index ea0b3af..1e6539b 100644
    NeutronEnableTunnelling:
      type: string
      default: "True"
-@@ -443,6 +455,31 @@ parameters:
+@@ -443,6 +455,35 @@ parameters:
    NtpServer:
      type: string
      default: ''
@@ -606,6 +648,10 @@ index ea0b3af..1e6539b 100644
 +    description: Knob to enable/disable ODL L3
 +    type: string
 +    default: 'no'
++  OpenDaylightFeatures:
++    description: List of features to install with ODL
++    type: comma_delimited_list
++    default: "odl-ovsdb-openstack"
 +  ONOSPort:
 +    default: 8181
 +    description: Set onos service port
@@ -613,7 +659,7 @@ index ea0b3af..1e6539b 100644
    PcsdPassword:
      type: string
      description: The password for the 'pcsd' user.
-@@ -696,6 +733,7 @@ resources:
+@@ -696,6 +737,7 @@ resources:
        input_values:
          bootstack_nodeid: {get_attr: [Controller, name]}
          neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
@@ -621,7 +667,7 @@ index ea0b3af..1e6539b 100644
          haproxy_log_address: {get_param: HAProxySyslogAddress}
          heat.watch_server_url:
            list_join:
-@@ -774,6 +812,7 @@ resources:
+@@ -774,6 +816,7 @@ resources:
                - {get_param: MysqlVirtualIP}
                - '/heat'
          keystone_ca_certificate: {get_param: KeystoneCACertificate}
@@ -629,7 +675,7 @@ index ea0b3af..1e6539b 100644
          keystone_signing_key: {get_param: KeystoneSigningKey}
          keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
          keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
-@@ -805,6 +844,12 @@ resources:
+@@ -805,6 +848,13 @@ resources:
              template: tripleo-CLUSTER
              params:
                CLUSTER: {get_param: MysqlClusterUniquePart}
@@ -638,11 +684,12 @@ index ea0b3af..1e6539b 100644
 +        opendaylight_username: {get_param: OpenDaylightUsername}
 +        opendaylight_password: {get_param: OpenDaylightPassword}
 +        opendaylight_enable_l3: {get_param: OpenDaylightEnableL3}
++        opendaylight_features: {get_param: OpenDaylightFeatures}
 +        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}
-@@ -879,6 +924,7 @@ resources:
+@@ -879,6 +929,7 @@ resources:
          ceilometer_backend: {get_param: CeilometerBackend}
          ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
          ceilometer_password: {get_param: CeilometerPassword}
@@ -650,7 +697,7 @@ index ea0b3af..1e6539b 100644
          ceilometer_coordination_url:
            list_join:
              - ''
-@@ -891,6 +937,12 @@ resources:
+@@ -891,6 +942,12 @@ resources:
              - - 'mysql://ceilometer:unset@'
                - {get_param: MysqlVirtualIP}
                - '/ceilometer'
@@ -663,7 +710,7 @@ index ea0b3af..1e6539b 100644
          snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
          snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
          nova_password: {get_param: NovaPassword}
-@@ -948,6 +1000,7 @@ resources:
+@@ -948,6 +1005,7 @@ resources:
          neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
          neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
          ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
@@ -671,7 +718,7 @@ index ea0b3af..1e6539b 100644
          nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
          nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
          horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
-@@ -1041,7 +1094,7 @@ resources:
+@@ -1041,7 +1099,7 @@ resources:
                  cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
                  cinder::database_connection: {get_input: cinder_dsn}
                  cinder::api::keystone_password: {get_input: cinder_password}
@@ -680,7 +727,7 @@ index ea0b3af..1e6539b 100644
                  cinder::api::identity_uri: {get_input: keystone_identity_uri}
                  cinder::api::bind_host: {get_input: cinder_api_network}
                  cinder::rabbit_userid: {get_input: rabbit_username}
-@@ -1136,6 +1189,16 @@ resources:
+@@ -1136,6 +1194,17 @@ resources:
                  mysql_bind_host: {get_input: mysql_network}
                  mysql_virtual_ip: {get_input: mysql_virtual_ip}
  
@@ -690,6 +737,7 @@ index ea0b3af..1e6539b 100644
 +                opendaylight_username: {get_input: opendaylight_username}
 +                opendaylight_password: {get_input: opendaylight_password}
 +                opendaylight_enable_l3: {get_input: opendaylight_enable_l3}
++                opendaylight_features: {get_input: opendaylight_features}
 +
 +                # ONOS
 +                onos_port: {get_input: onos_port}
@@ -697,7 +745,7 @@ index ea0b3af..1e6539b 100644
                  # Neutron
                  neutron::bind_host: {get_input: neutron_api_network}
                  neutron::rabbit_password: {get_input: rabbit_password}
-@@ -1152,6 +1215,7 @@ resources:
+@@ -1152,6 +1221,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}
@@ -705,7 +753,7 @@ index ea0b3af..1e6539b 100644
                  neutron_agent_mode: {get_input: neutron_agent_mode}
                  neutron_router_distributed: {get_input: neutron_router_distributed}
                  neutron::core_plugin: {get_input: neutron_core_plugin}
-@@ -1198,6 +1262,27 @@ resources:
+@@ -1198,6 +1268,27 @@ resources:
                  snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
                  snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
  
@@ -774,10 +822,10 @@ index 4b7fd81..4f1fef6 100644
  tripleo::loadbalancer::heat_cloudwatch: true
  tripleo::loadbalancer::heat_cfn: true
 diff --git a/puppet/manifests/overcloud_compute.pp b/puppet/manifests/overcloud_compute.pp
-index cd41cc7..b8336ee 100644
+index cd41cc7..110ca1d 100644
 --- a/puppet/manifests/overcloud_compute.pp
 +++ b/puppet/manifests/overcloud_compute.pp
-@@ -75,9 +75,36 @@ class { '::neutron::plugins::ml2':
+@@ -75,9 +75,34 @@ class { '::neutron::plugins::ml2':
    tenant_network_types => [hiera('neutron_tenant_network_type')],
  }
  
@@ -793,14 +841,12 @@ index cd41cc7..b8336ee 100644
 +    $opendaylight_controller_ip = hiera('opendaylight_controller_ip')
 +  }
 +
-+  if str2bool(hiera('opendaylight_install', 'false')) {
-+    class { 'neutron::plugins::ovs::opendaylight':
++  class { 'neutron::plugins::ovs::opendaylight':
 +      odl_controller_ip => $opendaylight_controller_ip,
 +      tunnel_ip         => hiera('neutron::agents::ml2::ovs::local_ip'),
 +      odl_port          => hiera('opendaylight_port'),
 +      odl_username      => hiera('opendaylight_username'),
 +      odl_password      => hiera('opendaylight_password'),
-+    }
 +  }
 +
 +} elsif 'onos_ml2' in hiera('neutron_mechanism_drivers') {
@@ -818,7 +864,7 @@ 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 1f6c2be..474bb1d 100644
+index 1f6c2be..1095758 100644
 --- a/puppet/manifests/overcloud_controller.pp
 +++ b/puppet/manifests/overcloud_controller.pp
 @@ -30,6 +30,21 @@ if hiera('step') >= 1 {
@@ -827,7 +873,7 @@ index 1f6c2be..474bb1d 100644
  
 +  if str2bool(hiera('opendaylight_install', 'false')) {
 +    class {"opendaylight":
-+      extra_features => ['odl-ovsdb-openstack'],
++      extra_features => any2array(hiera('opendaylight_features', 'odl-ovsdb-openstack')),
 +      odl_rest_port  => hiera('opendaylight_port'),
 +      enable_l3      => hiera('opendaylight_enable_l3', 'no'),
 +    }
@@ -863,7 +909,7 @@ index 1f6c2be..474bb1d 100644
    include ::neutron::agents::dhcp
    include ::neutron::agents::metadata
  
-@@ -237,15 +253,77 @@ if hiera('step') >= 3 {
+@@ -237,15 +253,101 @@ if hiera('step') >= 3 {
      require => Package['neutron'],
    }
  
@@ -902,6 +948,30 @@ index 1f6c2be..474bb1d 100644
 +      $opendaylight_controller_ip = hiera('opendaylight_controller_ip')
 +    }
 +
++    # co-existence hacks for SFC
++    if hiera('opendaylight_features', 'odl-ovsdb-openstack') =~ /odl-ovsdb-sfc-rest/ {
++      $opendaylight_port = hiera('opendaylight_port')
++      $netvirt_coexist_url = "http://${opendaylight_controller_ip}:${opendaylight_port}/restconf/config/netvirt-providers-config:netvirt-providers-config"
++      $netvirt_post_body = "{'netvirt-providers-config': {'table-offset': 1}}"
++      $sfc_coexist_url = "http://${opendaylight_controller_ip}:${opendaylight_port}/restconf/config/sfc-of-renderer:sfc-of-renderer-config"
++      $sfc_post_body = "{ 'sfc-of-renderer-config' : { 'sfc-of-table-offset' : 150, 'sfc-of-app-egress-table-offset' : 11 }}"
++      $odl_username = hiera('opendaylight_username')
++      $odl_password = hiera('opendaylight_password')
++      exec { 'Coexistence table offsets for netvirt':
++        command   => "curl -o /dev/null --fail --silent -u ${odl_username}:${odl_password} ${netvirt_coexist_url} -i -H 'Content-Type: application/json' --data \'${netvirt_post_body}\' -X PUT",
++        tries     => 5,
++        try_sleep => 30,
++        path      => '/usr/sbin:/usr/bin:/sbin:/bin',
++      } ->
++      # Coexist for SFC
++      exec { 'Coexistence table offsets for sfc':
++        command   => "curl -o /dev/null --fail --silent -u ${odl_username}:${odl_password} ${sfc_coexist_url} -i -H 'Content-Type: application/json' --data \'${sfc_post_body}\' -X PUT",
++        tries     => 5,
++        try_sleep => 30,
++        path      => '/usr/sbin:/usr/bin:/sbin:/bin',
++      }
++    }
++
 +    class { 'neutron::plugins::ml2::opendaylight':
 +      odl_controller_ip => $opendaylight_controller_ip,
 +      odl_username      => hiera('opendaylight_username'),
@@ -944,7 +1014,7 @@ index 1f6c2be..474bb1d 100644
    if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
      include ::neutron::plugins::ml2::cisco::nexus1000v
  
-@@ -280,8 +358,6 @@ if hiera('step') >= 3 {
+@@ -280,8 +382,6 @@ if hiera('step') >= 3 {
    }
  
    Service['neutron-server'] -> Service['neutron-dhcp-service']
@@ -953,7 +1023,7 @@ index 1f6c2be..474bb1d 100644
    Service['neutron-server'] -> Service['neutron-metadata']
  
    include ::cinder
-@@ -447,6 +523,20 @@ if hiera('step') >= 3 {
+@@ -447,6 +547,20 @@ if hiera('step') >= 3 {
  
    Cron <| title == 'ceilometer-expirer' |> { command => "sleep $((\$(od -A n -t d -N 3 /dev/urandom) % 86400)) && ${::ceilometer::params::expirer_command}" }
  
@@ -975,7 +1045,7 @@ index 1f6c2be..474bb1d 100644
    include ::heat
    include ::heat::api
 diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp
-index 3fb92f3..5992602 100644
+index 3fb92f3..42b9f06 100644
 --- a/puppet/manifests/overcloud_controller_pacemaker.pp
 +++ b/puppet/manifests/overcloud_controller_pacemaker.pp
 @@ -380,6 +380,21 @@ if hiera('step') >= 2 {
@@ -984,7 +1054,7 @@ index 3fb92f3..5992602 100644
  
 +  if str2bool(hiera('opendaylight_install', 'false')) {
 +    class {"opendaylight":
-+      extra_features => ['odl-ovsdb-openstack'],
++      extra_features => any2array(hiera('opendaylight_features', 'odl-ovsdb-openstack')),
 +      odl_rest_port  => hiera('opendaylight_port'),
 +      enable_l3      => hiera('opendaylight_enable_l3', 'no'),
 +    }
@@ -1551,7 +1621,7 @@ index 3fb92f3..5992602 100644
        pacemaker::constraint::base { 'mongodb-then-ceilometer-central-constraint':
 diff --git a/puppet/manifests/overcloud_opendaylight.pp b/puppet/manifests/overcloud_opendaylight.pp
 new file mode 100644
-index 0000000..33f609a
+index 0000000..aeb31be
 --- /dev/null
 +++ b/puppet/manifests/overcloud_opendaylight.pp
 @@ -0,0 +1,27 @@
@@ -1577,17 +1647,17 @@ index 0000000..33f609a
 +}
 +
 +class {"opendaylight":
-+  extra_features => ['odl-ovsdb-openstack'],
++  extra_features => any2array(hiera('opendaylight_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..b876dc7
+index 0000000..6488e0e
 --- /dev/null
 +++ b/puppet/opendaylight-puppet.yaml
-@@ -0,0 +1,217 @@
+@@ -0,0 +1,223 @@
 +heat_template_version: 2015-04-30
 +
 +description: >
@@ -1619,6 +1689,10 @@ index 0000000..b876dc7
 +    description: Knob to enable/disable ODL L3
 +    type: string
 +    default: 'no'
++  OpenDaylightFeatures:
++    description: List of features to install with ODL
++    type: comma_delimited_list
++    default: "odl-ovsdb-openstack"
 +  OpenDaylightPort:
 +    default: 8081
 +    description: Set OpenDaylight service port
@@ -1720,6 +1794,7 @@ index 0000000..b876dc7
 +        opendaylight_enable_l3: {get_param: OpenDaylightEnableL3}
 +        opendaylight_username: {get_param: OpenDaylightUsername}
 +        opendaylight_password: {get_param: OpenDaylightPassword}
++        opendaylight_features: {get_param: OpenDaylightFeatures}
 +
 +  OpenDaylightConfig:
 +    type: OS::Heat::StructuredConfig
@@ -1745,6 +1820,7 @@ index 0000000..b876dc7
 +                opendaylight::admin_password: {get_param: OpenDaylightPassword}
 +                opendaylight_port: {get_input: opendaylight_port}
 +                opendaylight_enable_l3: {get_input: opendaylight_enable_l3}
++                opendaylight_features: {get_input: opendaylight_features}
 +            ceph:
 +              raw_data: {get_file: hieradata/ceph.yaml}
 +
@@ -1806,5 +1882,5 @@ index 0000000..b876dc7
 +      - - {get_attr: [OpenDaylightDeployment, deploy_stdout]}
 +        - {get_param: UpdateIdentifier}
 -- 
-2.5.4 (Apple Git-61)
+2.5.0
 
index 5eabebb..5cccb06 100755 (executable)
@@ -782,6 +782,8 @@ function undercloud_prep_overcloud_deploy {
   if [[ ${#deploy_options_array[@]} -eq 0 || ${deploy_options_array['sdn_controller']} == 'opendaylight' ]]; then
     if [ ${deploy_options_array['sdn_l3']} == 'true' ]; then
       DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_l3.yaml"
+    elif [ ${deploy_options_array['sfc']} == 'true' ]; then
+      DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_sfc.yaml"
     else
       DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight.yaml"
     fi
@@ -957,6 +959,20 @@ EOI
       echo -e "${blue}INFO: Undercloud (instack VM) has been setup to NAT Overcloud public network${reset}"
     fi
   fi
+
+  # for sfc deployments we need the vxlan workaround
+  if [ ${deploy_options_array['sfc']} == 'true' ]; then
+      ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI
+source stackrc
+set -o errexit
+for node in \$(nova list | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"); do
+ssh -T ${SSH_OPTIONS[@]} "heat-admin@\$node" <<EOF
+sudo ifconfig br-int up
+sudo ip route add 123.123.123.0/24 dev br-int
+EOF
+done
+EOI
+  fi
 }
 
 display_usage() {
similarity index 86%
rename from config/deploy/os-odl_l2-sfc-ha.yaml
rename to config/deploy/os-odl_l2-sfc-noha.yaml
index d2e49be..92372a9 100644 (file)
@@ -1,5 +1,5 @@
 global_params:
-  ha_enabled: true
+  ha_enabled: false
 
 deploy_options:
   sdn_controller: opendaylight