Adds OpenDaylight composable service

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>
This commit is contained in:
Tim Rozet 2016-08-12 22:12:28 -04:00
parent a4b8e86199
commit 783975c72c
9 changed files with 174 additions and 1 deletions

View File

@ -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'"

View File

@ -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'

View 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

View 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

View 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]}]}

View 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:
- ','

View File

@ -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

View File

@ -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

View 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}