Nova Placement API composable service

Add support to deploy Nova Placement API service in TripleO.

Change-Id: Ie41ebc362a0695c8f55419e231100c63007405ed
This commit is contained in:
Emilien Macchi 2016-12-02 18:13:50 -05:00 committed by Juan Antonio Osorio Robles
parent f43f9d9fe3
commit 26ae162564
15 changed files with 419 additions and 0 deletions

View File

@ -30,6 +30,7 @@ parameter_defaults:
- OS::TripleO::Services::Pacemaker
- OS::TripleO::Services::NovaConductor
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaMetadata
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::Ntp

View File

@ -28,6 +28,7 @@ parameter_defaults:
- OS::TripleO::Services::Pacemaker
- OS::TripleO::Services::NovaConductor
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaMetadata
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::Ntp

View File

@ -31,6 +31,7 @@ parameter_defaults:
- OS::TripleO::Services::Pacemaker
- OS::TripleO::Services::NovaConductor
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaMetadata
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::Ntp

View File

@ -33,6 +33,7 @@ parameter_defaults:
- OS::TripleO::Services::Pacemaker
- OS::TripleO::Services::NovaConductor
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaMetadata
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::Ntp

View File

@ -58,6 +58,7 @@
- OS::TripleO::Services::MongoDb
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaMetadata
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::NovaConsoleauth
- OS::TripleO::Services::NovaVncProxy

View File

@ -50,6 +50,9 @@ parameter_defaults:
NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
NovaPublic: {protocol: 'https', port: '13774', host: 'CLOUDNAME'}
NovaPlacementAdmin: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
NovaPlacementInternal: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
NovaPlacementPublic: {protocol: 'https', port: '13778', host: 'CLOUDNAME'}
NovaVNCProxyAdmin: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
NovaVNCProxyInternal: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'CLOUDNAME'}

View File

@ -50,6 +50,9 @@ parameter_defaults:
NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
NovaPublic: {protocol: 'https', port: '13774', host: 'IP_ADDRESS'}
NovaPlacementAdmin: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
NovaPlacementInternal: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
NovaPlacementPublic: {protocol: 'https', port: '13778', host: 'IP_ADDRESS'}
NovaVNCProxyAdmin: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
NovaVNCProxyInternal: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'IP_ADDRESS'}

View File

@ -50,6 +50,9 @@ parameter_defaults:
NovaAdmin: {protocol: 'https', port: '8774', host: 'CLOUDNAME'}
NovaInternal: {protocol: 'https', port: '8774', host: 'CLOUDNAME'}
NovaPublic: {protocol: 'https', port: '13774', host: 'CLOUDNAME'}
NovaPlacementAdmin: {protocol: 'https', port: '8778', host: 'CLOUDNAME'}
NovaPlacementInternal: {protocol: 'https', port: '8778', host: 'CLOUDNAME'}
NovaPlacementPublic: {protocol: 'https', port: '13778', host: 'CLOUDNAME'}
NovaVNCProxyAdmin: {protocol: 'https', port: '6080', host: 'CLOUDNAME'}
NovaVNCProxyInternal: {protocol: 'https', port: '6080', host: 'CLOUDNAME'}
NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'CLOUDNAME'}

View File

@ -205,6 +205,21 @@ Nova:
'': /v2.1
port: 8774
NovaPlacement:
Internal:
net_param: NovaApi
uri_suffixes:
'': /placement
Public:
net_param: Public
uri_suffixes:
'': /placement
Admin:
net_param: NovaApi
uri_suffixes:
'': /placement
port: 8778
NovaVNCProxy:
Internal:
net_param: NovaApi

View File

@ -67,6 +67,9 @@ parameters:
NovaAdmin: {protocol: http, port: '8774', host: IP_ADDRESS}
NovaInternal: {protocol: http, port: '8774', host: IP_ADDRESS}
NovaPublic: {protocol: http, port: '8774', host: IP_ADDRESS}
NovaPlacementAdmin: {protocol: http, port: '8778', host: IP_ADDRESS}
NovaPlacementInternal: {protocol: http, port: '8778', host: IP_ADDRESS}
NovaPlacementPublic: {protocol: http, port: '8778', host: IP_ADDRESS}
NovaVNCProxyAdmin: {protocol: http, port: '6080', host: IP_ADDRESS}
NovaVNCProxyInternal: {protocol: http, port: '6080', host: IP_ADDRESS}
NovaVNCProxyPublic: {protocol: http, port: '6080', host: IP_ADDRESS}
@ -5077,6 +5080,255 @@ outputs:
template: NETWORK_uri
- ':'
- get_param: [EndpointMap, NovaPublic, port]
NovaPlacementAdmin:
host:
str_replace:
template:
get_param: [EndpointMap, NovaPlacementAdmin, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, NovaApiNetwork]
template: NETWORK_uri
host_nobrackets:
str_replace:
template:
get_param: [EndpointMap, NovaPlacementAdmin, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- get_param: [ServiceNetMap, NovaApiNetwork]
port:
get_param: [EndpointMap, NovaPlacementAdmin, port]
protocol:
get_param: [EndpointMap, NovaPlacementAdmin, protocol]
uri:
list_join:
- ''
- - get_param: [EndpointMap, NovaPlacementAdmin, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, NovaPlacementAdmin, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, NovaApiNetwork]
template: NETWORK_uri
- ':'
- get_param: [EndpointMap, NovaPlacementAdmin, port]
- /placement
uri_no_suffix:
list_join:
- ''
- - get_param: [EndpointMap, NovaPlacementAdmin, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, NovaPlacementAdmin, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, NovaApiNetwork]
template: NETWORK_uri
- ':'
- get_param: [EndpointMap, NovaPlacementAdmin, port]
- /placement
NovaPlacementInternal:
host:
str_replace:
template:
get_param: [EndpointMap, NovaPlacementInternal, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, NovaApiNetwork]
template: NETWORK_uri
host_nobrackets:
str_replace:
template:
get_param: [EndpointMap, NovaPlacementInternal, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- get_param: [ServiceNetMap, NovaApiNetwork]
port:
get_param: [EndpointMap, NovaPlacementInternal, port]
protocol:
get_param: [EndpointMap, NovaPlacementInternal, protocol]
uri:
list_join:
- ''
- - get_param: [EndpointMap, NovaPlacementInternal, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, NovaPlacementInternal, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, NovaApiNetwork]
template: NETWORK_uri
- ':'
- get_param: [EndpointMap, NovaPlacementInternal, port]
- /placement
uri_no_suffix:
list_join:
- ''
- - get_param: [EndpointMap, NovaPlacementInternal, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, NovaPlacementInternal, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, NovaApiNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, NovaApiNetwork]
template: NETWORK_uri
- ':'
- get_param: [EndpointMap, NovaPlacementInternal, port]
- /placement
NovaPlacementPublic:
host:
str_replace:
template:
get_param: [EndpointMap, NovaPlacementPublic, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, PublicNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, PublicNetwork]
template: NETWORK_uri
host_nobrackets:
str_replace:
template:
get_param: [EndpointMap, NovaPlacementPublic, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, PublicNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- get_param: [ServiceNetMap, PublicNetwork]
port:
get_param: [EndpointMap, NovaPlacementPublic, port]
protocol:
get_param: [EndpointMap, NovaPlacementPublic, protocol]
uri:
list_join:
- ''
- - get_param: [EndpointMap, NovaPlacementPublic, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, NovaPlacementPublic, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, PublicNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, PublicNetwork]
template: NETWORK_uri
- ':'
- get_param: [EndpointMap, NovaPlacementPublic, port]
- /placement
uri_no_suffix:
list_join:
- ''
- - get_param: [EndpointMap, NovaPlacementPublic, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, NovaPlacementPublic, host]
params:
CLOUDNAME:
get_param:
- CloudEndpoints
- get_param: [ServiceNetMap, PublicNetwork]
IP_ADDRESS:
get_param:
- NetIpMap
- str_replace:
params:
NETWORK:
get_param: [ServiceNetMap, PublicNetwork]
template: NETWORK_uri
- ':'
- get_param: [EndpointMap, NovaPlacementPublic, port]
- /placement
NovaVNCProxyAdmin:
host:
str_replace:

View File

@ -173,6 +173,7 @@ resource_registry:
OS::TripleO::Services::NovaConductor: puppet/services/nova-conductor.yaml
OS::TripleO::Services::MongoDb: puppet/services/database/mongodb.yaml
OS::TripleO::Services::NovaApi: puppet/services/nova-api.yaml
OS::TripleO::Services::NovaPlacement: puppet/services/nova-placement.yaml
OS::TripleO::Services::NovaMetadata: puppet/services/nova-metadata.yaml
OS::TripleO::Services::NovaScheduler: puppet/services/nova-scheduler.yaml
OS::TripleO::Services::NovaConsoleauth: puppet/services/nova-consoleauth.yaml

View File

@ -103,6 +103,17 @@ outputs:
- '/nova_api'
- '?bind_address='
- "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
nova::placement_database_connection:
list_join:
- ''
- - {get_param: [EndpointMap, MysqlInternal, protocol]}
- '://nova_placement:'
- {get_param: NovaPassword}
- '@'
- {get_param: [EndpointMap, MysqlInternal, host]}
- '/nova_placement'
- '?bind_address='
- "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
nova::debug: {get_param: Debug}
nova::purge_config: {get_param: EnableConfigPurge}
nova::network::neutron::neutron_project_name: 'service'

View File

@ -0,0 +1,124 @@
heat_template_version: ocata
description: >
OpenStack Nova Placement API service configured with Puppet
parameters:
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
EndpointMap:
default: {}
description: Mapping of service endpoint -> protocol. Typically set
via parameter_defaults in the resource registry.
type: json
NovaWorkers:
default: 0
description: Number of workers for Nova Placement API service.
type: number
NovaPassword:
description: The password for the nova service and db account, used by nova-placement.
type: string
hidden: true
KeystoneRegion:
type: string
default: 'regionOne'
description: Keystone region for endpoint
MonitoringSubscriptionNovaPlacement:
default: 'overcloud-nova-placement'
type: string
NovaPlacementLoggingSource:
type: json
default:
tag: openstack.nova.placement
path: /var/log/httpd/nova_placement_wsgi_error_ssl.log
EnableInternalTLS:
type: boolean
default: false
conditions:
nova_workers_zero: {equals : [{get_param: NovaWorkers}, 0]}
resources:
ApacheServiceBase:
type: ./apache.yaml
properties:
ServiceNetMap: {get_param: ServiceNetMap}
DefaultPasswords: {get_param: DefaultPasswords}
EndpointMap: {get_param: EndpointMap}
EnableInternalTLS: {get_param: EnableInternalTLS}
NovaBase:
type: ./nova-base.yaml
properties:
ServiceNetMap: {get_param: ServiceNetMap}
DefaultPasswords: {get_param: DefaultPasswords}
EndpointMap: {get_param: EndpointMap}
outputs:
role_data:
description: Role data for the Nova Placement API service.
value:
service_name: nova_placement
monitoring_subscription: {get_param: MonitoringSubscriptionNovaPlacement}
logging_source: {get_param: NovaPlacementLoggingSource}
logging_groups:
- nova
config_settings:
map_merge:
- get_attr: [NovaBase, role_data, config_settings]
- get_attr: [ApacheServiceBase, role_data, config_settings]
- tripleo.nova_placement.firewall_rules:
'138 nova_placement':
dport:
- 8778
- 13778
nova::placement::project_name: 'service'
nova::placement::password: {get_param: NovaPassword}
nova::placement::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
nova::placement::os_region_name: {get_param: KeystoneRegion}
nova::wsgi::apache_placement::api_port: '8778'
nova::wsgi::apache_placement::ssl: {get_param: EnableInternalTLS}
# NOTE: bind IP is found in Heat replacing the network name with the local node IP
# for the given network; replacement examples (eg. for internal_api):
# internal_api -> IP
# internal_api_uri -> [IP]
# internal_api_subnet - > IP/CIDR
nova::wsgi::apache_placement::bind_host: {get_param: [ServiceNetMap, NovaApiNetwork]}
nova::wsgi::apache_placement::servername:
str_replace:
template:
"%{hiera('fqdn_$NETWORK')}"
params:
$NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
-
if:
- nova_workers_zero
- {}
- nova::wsgi::apache_placement::workers: {get_param: NovaWorkers}
step_config: |
include tripleo::profile::base::nova::placement
service_config_settings:
keystone:
nova::keystone::auth_placement::tenant: 'service'
nova::keystone::auth_placement::public_url: {get_param: [EndpointMap, NovaPlacementPublic, uri]}
nova::keystone::auth_placement::internal_url: {get_param: [EndpointMap, NovaPlacementInternal, uri]}
nova::keystone::auth_placement::admin_url: {get_param: [EndpointMap, NovaPlacementAdmin, uri]}
nova::keystone::auth_placement::password: {get_param: NovaPassword}
nova::keystone::auth_placement::region: {get_param: KeystoneRegion}
mysql:
map_merge:
- {get_attr: [NovaBase, role_data, service_config_settings, mysql]}
- nova::db::mysql_placement::password: {get_param: NovaPassword}
nova::db::mysql_placement::user: nova_placement
nova::db::mysql_placement::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
nova::db::mysql_placement::dbname: nova_placement
nova::db::mysql_placement::allowed_hosts:
- '%'
- "%{hiera('mysql_bind_host')}"

View File

@ -57,6 +57,7 @@
- OS::TripleO::Services::NovaConductor
- OS::TripleO::Services::MongoDb
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaMetadata
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::NovaConsoleauth

View File

@ -18,6 +18,7 @@
- OS::TripleO::Services::HeatApiCfn
- OS::TripleO::Services::HeatEngine
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaMetadata
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::NovaConductor