Adds OpenDaylight composable service
authorTim Rozet <trozet@redhat.com>
Sat, 13 Aug 2016 02:12:28 +0000 (22:12 -0400)
committerTim Rozet <trozet@redhat.com>
Fri, 26 Aug 2016 13:35:25 +0000 (09:35 -0400)
Introduces environment files for deploying OpenDaylight in two ways:
 - ODL only managing L2 as an ML2 plugin
 - ODL managing L2 and L3 DVR, by replacing NeutronL3Agent

Two services are added.  One to install ODL and configure OVS on the
Controllers, and another service to only configure OVS on compute nodes.

Paritally-Implements: blueprint opendaylight-integration

Depends-On: I666dc0874f1d11a72a62d796f4f6d41f7aa87a3f

Change-Id: Ide69e20cbf2ec6151953cb23e51478b770aca17f
Signed-off-by: Tim Rozet <trozet@redhat.com>
environments/neutron-opendaylight-l3.yaml [new file with mode: 0644]
environments/neutron-opendaylight.yaml [new file with mode: 0644]
network/service_net_map.yaml
overcloud-resource-registry-puppet.yaml
overcloud.yaml
puppet/all-nodes-config.yaml
puppet/services/opendaylight-ovs.yaml [new file with mode: 0644]
puppet/services/opendaylight.yaml [new file with mode: 0644]
puppet/vip-config.yaml

diff --git a/environments/neutron-opendaylight-l3.yaml b/environments/neutron-opendaylight-l3.yaml
new file mode 100644 (file)
index 0000000..92f02a4
--- /dev/null
@@ -0,0 +1,14 @@
+# A Heat environment that can be used to deploy OpenDaylight with L3 DVR
+resource_registry:
+  OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::OpenDaylight: puppet/services/opendaylight.yaml
+  OS::TripleO::Services::OpenDaylightOvs: puppet/services/opendaylight-ovs.yaml
+  OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
+
+parameter_defaults:
+  EnableOpenDaylightOnController: true
+  NeutronEnableForceMetadata: true
+  NeutronMechanismDrivers: 'opendaylight'
+  NeutronServicePlugins: "networking_odl.l3.l3_odl.OpenDaylightL3RouterPlugin"
+  OpenDaylightEnableL3: "'yes'"
diff --git a/environments/neutron-opendaylight.yaml b/environments/neutron-opendaylight.yaml
new file mode 100644 (file)
index 0000000..afc2ef9
--- /dev/null
@@ -0,0 +1,11 @@
+# A Heat environment that can be used to deploy OpenDaylight
+resource_registry:
+  OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::OpenDaylight: puppet/services/opendaylight.yaml
+  OS::TripleO::Services::OpenDaylightOvs: puppet/services/opendaylight-ovs.yaml
+
+parameter_defaults:
+  EnableOpenDaylightOnController: true
+  NeutronEnableForceMetadata: true
+  NeutronMechanismDrivers: 'opendaylight'
index fea8987..50f5c55 100644 (file)
@@ -47,6 +47,7 @@ parameters:
       ObjectStorageHostnameResolveNetwork: internal_api
       CephStorageHostnameResolveNetwork: storage
       PublicNetwork: external
+      OpenDaylightApiNetwork: internal_api
     description: Mapping of service_name -> network name. Typically set
                  via parameter_defaults in the resource registry.
     type: json
index ab4d249..36bdafb 100644 (file)
@@ -219,6 +219,8 @@ resource_registry:
   OS::TripleO::Services::NovaIronic: OS::Heat::None
   OS::TripleO::Services::TripleoPackages: puppet/services/tripleo-packages.yaml
   OS::TripleO::Services::TripleoFirewall: puppet/services/tripleo-firewall.yaml
+  OS::TripleO::Services::OpenDaylight: OS::Heat::None
+  OS::TripleO::Services::OpenDaylightOvs: OS::Heat::None
 
 parameter_defaults:
   EnablePackageInstall: false
index f96f660..f9e8e89 100644 (file)
@@ -173,6 +173,7 @@ parameters:
       - OS::TripleO::Services::NovaIronic
       - OS::TripleO::Services::TripleoPackages
       - OS::TripleO::Services::TripleoFirewall
+      - OS::TripleO::Services::OpenDaylight
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the Controllers.
@@ -196,6 +197,7 @@ parameters:
       - OS::TripleO::Services::TripleoPackages
       - OS::TripleO::Services::TripleoFirewall
       - OS::TripleO::Services::NeutronSriovAgent
+      - OS::TripleO::Services::OpenDaylightOvs
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the Compute Nodes.
@@ -596,6 +598,7 @@ resources:
       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CephPublicNetwork]}]}
+      opendaylight_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, OpenDaylightApiNetwork]}]}
       ceph_mon_node_names: {get_attr: [Controller, hostname]}
       DeployIdentifier: {get_param: DeployIdentifier}
       UpdateIdentifier: {get_param: UpdateIdentifier}
@@ -727,6 +730,7 @@ resources:
         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
+        opendaylight_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, OpenDaylightApiNetwork]}]}
         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
 
@@ -964,6 +968,9 @@ outputs:
   NovaInternalVip:
     description: VIP for Nova API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
+  OpenDaylightInternalVip:
+    description: VIP for OpenDaylight API internal endpoint
+    value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, OpenDaylightApiNetwork]}]}
   SaharaInternalVip:
     description: VIP for Sahara API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
index f1ce42b..ddde549 100644 (file)
@@ -56,6 +56,8 @@ parameters:
     type: comma_delimited_list
   ceph_mon_node_names:
     type: comma_delimited_list
+  opendaylight_api_node_ips:
+    type: comma_delimited_list
   DeployIdentifier:
     type: string
     description: >
@@ -297,7 +299,14 @@ resources:
                         list_join:
                         - "','"
                         - {get_param: ironic_api_node_ips}
-
+                opendaylight_api_node_ips:
+                  str_replace:
+                    template: "['SERVERS_LIST']"
+                    params:
+                      SERVERS_LIST:
+                        list_join:
+                        - "','"
+                        - {get_param: opendaylight_api_node_ips}
                 tripleo::profile::base::ceph::ceph_mon_initial_members:
                   list_join:
                   - ','
diff --git a/puppet/services/opendaylight-ovs.yaml b/puppet/services/opendaylight-ovs.yaml
new file mode 100644 (file)
index 0000000..8bcb72f
--- /dev/null
@@ -0,0 +1,47 @@
+heat_template_version: 2016-04-08
+
+description: >
+  OpenDaylight OVS Configuration.
+
+parameters:
+  OpenDaylightPort:
+    default: 8081
+    description: Set opendaylight service port
+    type: number
+  OpenDaylightConnectionProtocol:
+    description: L7 protocol used for REST access
+    type: string
+    default: 'http'
+  OpenDaylightCheckURL:
+    description: URL postfix to verify ODL has finished starting up
+    type: string
+    default: 'restconf/operational/network-topology:network-topology/topology/netvirt:1'
+  OpenDaylightApiVirtualIP:
+    type: string
+    default: ''
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  ServiceNetMap:
+    default: {}
+    description: Mapping of service_name -> network name. Typically set
+                 via parameter_defaults in the resource registry.  This
+                 mapping overrides those in ServiceNetMapDefaults.
+    type: json
+  DefaultPasswords:
+    default: {}
+    type: json
+
+outputs:
+  role_data:
+    description: Role data for the OpenDaylight service.
+    value:
+      service_name: opendaylight_ovs
+      config_settings:
+        opendaylight::odl_rest_port: {get_param: OpenDaylightPort}
+        opendaylight_check_url: {get_param: OpenDaylightCheckURL}
+        opendaylight::nb_connection_protocol: {get_param: OpenDaylightConnectionProtocol}
+      step_config: |
+        include tripleo::profile::base::neutron::plugins::ovs::opendaylight
diff --git a/puppet/services/opendaylight.yaml b/puppet/services/opendaylight.yaml
new file mode 100644 (file)
index 0000000..c8da701
--- /dev/null
@@ -0,0 +1,81 @@
+heat_template_version: 2016-04-08
+
+description: >
+  OpenDaylight SDN Controller.
+
+parameters:
+  OpenDaylightPort:
+    default: 8081
+    description: Set opendaylight service port
+    type: number
+  EnableOpenDaylightOnController:
+    default: false
+    description: Whether to install OpenDaylight on control nodes.
+    type: boolean
+  OpenDaylightUsername:
+    default: 'admin'
+    description: The username for the opendaylight server.
+    type: string
+  OpenDaylightPassword:
+    default: 'admin'
+    type: string
+    description: The password for the opendaylight server.
+    hidden: true
+  OpenDaylightEnableL3:
+    description: Knob to enable/disable ODL L3
+    type: string
+    default: 'no'
+  OpenDaylightEnableDHCP:
+    description: Knob to enable/disable ODL DHCP Server
+    type: boolean
+    default: false
+  OpenDaylightFeatures:
+    description: List of features to install with ODL
+    type: comma_delimited_list
+    default: ["odl-netvirt-openstack","odl-netvirt-ui"]
+  OpenDaylightConnectionProtocol:
+    description: L7 protocol used for REST access
+    type: string
+    default: 'http'
+  OpenDaylightCheckURL:
+    description: URL postfix to verify ODL has finished starting up
+    type: string
+    default: 'restconf/operational/network-topology:network-topology/topology/netvirt:1'
+  OpenDaylightApiVirtualIP:
+    type: string
+    default: ''
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  ServiceNetMap:
+    default: {}
+    description: Mapping of service_name -> network name. Typically set
+                 via parameter_defaults in the resource registry.  This
+                 mapping overrides those in ServiceNetMapDefaults.
+    type: json
+  DefaultPasswords:
+    default: {}
+    type: json
+
+outputs:
+  role_data:
+    description: Role data for the OpenDaylight service.
+    value:
+      service_name: opendaylight
+      config_settings:
+        opendaylight::odl_rest_port: {get_param: OpenDaylightPort}
+        odl_on_controller: {get_param: EnableOpenDaylightOnController}
+        opendaylight_check_url: {get_param: OpenDaylightCheckURL}
+        opendaylight::username: {get_param: OpenDaylightUsername}
+        opendaylight::password: {get_param: OpenDaylightPassword}
+        opendaylight::enable_l3: {get_param: OpenDaylightEnableL3}
+        opendaylight::extra_features: {get_param: OpenDaylightFeatures}
+        opendaylight::enable_dhcp: {get_param: OpenDaylightEnableDHCP}
+        opendaylight::nb_connection_protocol: {get_param: OpenDaylightConnectionProtocol}
+        opendaylight::odl_bind_ip: {get_param: [ServiceNetMap, OpenDaylightApiNetwork]}
+        tripleo::haproxy::opendaylight: true
+      step_config: |
+        include tripleo::profile::base::neutron::opendaylight
+        include tripleo::profile::base::neutron::plugins::ovs::opendaylight
index 7ce23a2..cbd7ea0 100644 (file)
@@ -39,6 +39,7 @@ resources:
                 storage_virtual_ip: {get_input: storage_virtual_ip}
                 storage_mgmt_virtual_ip: {get_input: storage_mgmt_virtual_ip}
                 ironic_api_vip: {get_input: ironic_api_vip}
+                opendaylight_api_vip: {get_input: opendaylight_api_vip}
                 # public_virtual_ip and controller_virtual_ip are needed in
                 # both HAproxy & keepalived.
                 tripleo::haproxy::public_virtual_ip: {get_input: public_virtual_ip}