Configure ControllerServices via resource chains

This patch wires in a new for Mitaka Heat feature
that allows us to dynamically include a set of nested
stacks representing individual services via a Heat resource chain.
Follow on patches will use this interface to decompose the controller
role into isolated services.

Co-Authored-By: Steve Hardy <shardy@redhat.com>
Depends-On: If510abe260ea7852dfe2d1f7f92b529979483068
Change-Id: I84c97a76159704c2d6c963bc4b26e365764b1366
This commit is contained in:
Dan Prince 2016-03-15 10:49:30 -04:00
parent 98f19c17a6
commit 0bcf693a73
8 changed files with 132 additions and 2 deletions

View File

@ -122,6 +122,9 @@ resource_registry:
# validation resources
OS::TripleO::AllNodes::Validation: all-nodes-validation.yaml
# services
OS::TripleO::Services: puppet/services/services.yaml
parameter_defaults:
EnablePackageInstall: false
SoftwareConfigTransport: POLL_TEMP_URL

View File

@ -1,4 +1,4 @@
heat_template_version: 2015-04-30
heat_template_version: 2016-04-08
description: >
Deploy an OpenStack environment, consisting of several node types (roles),
@ -711,6 +711,13 @@ parameters:
via parameter_defaults in the resource registry.
type: json
ControllerServices:
default: []
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.
type: comma_delimited_list
# Block storage specific parameters
BlockStorageCount:
type: number
@ -892,6 +899,13 @@ resources:
SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
ControllerServiceChain:
type: OS::TripleO::Services
properties:
Services: {get_param: ControllerServices}
EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
Controller:
type: OS::Heat::ResourceGroup
depends_on: Networks
@ -1043,6 +1057,7 @@ resources:
NodeIndex: '%index%'
ServerMetadata: {get_param: ServerMetadata}
SchedulerHints: {get_param: ControllerSchedulerHints}
ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
Compute:
type: OS::Heat::ResourceGroup
@ -1611,6 +1626,7 @@ resources:
allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
controller_config: {get_attr: [Controller, attributes, config_identifier]}
deployment_identifier: {get_param: DeployIdentifier}
StepConfig: {get_attr: [ControllerServiceChain, step_config]}
ComputeNodesPostDeployment:
type: OS::TripleO::ComputePostDeployment

View File

@ -8,6 +8,10 @@ parameters:
default: false
description: Whether to run config management (e.g. Puppet) in debug mode.
type: boolean
StepConfig:
type: string
description: Config manifests that will be used to step through the deployment.
default: ''
resources:
@ -26,6 +30,7 @@ resources:
- ''
- - get_file: manifests/overcloud_controller_pacemaker.pp
- get_file: manifests/ringbuilder.pp
- {get_param: StepConfig}
outputs:
OS::stack_id:

View File

@ -8,6 +8,10 @@ parameters:
default: false
description: Whether to run config management (e.g. Puppet) in debug mode.
type: boolean
StepConfig:
type: string
description: Config manifests that will be used to step through the deployment.
default: ''
resources:
@ -26,6 +30,7 @@ resources:
- ''
- - get_file: manifests/overcloud_controller.pp
- get_file: manifests/ringbuilder.pp
- {get_param: StepConfig}
outputs:
OS::stack_id:

View File

@ -13,7 +13,10 @@ parameters:
NodeConfigIdentifiers:
type: json
description: Value which changes if the node configuration may need to be re-applied
StepConfig:
type: string
description: Config manifests that will be used to step through the deployment.
default: ''
resources:
@ -35,6 +38,8 @@ resources:
ControllerPuppetConfig:
type: OS::TripleO::ControllerConfig
properties:
StepConfig: {get_param: StepConfig}
# Step through a series of Puppet runs using the same manifest.
# NOTE: To enable stepping through the deployments via heat hooks,

View File

@ -790,6 +790,9 @@ parameters:
type: json
description: Optional scheduler hints to pass to nova
default: {}
ServiceConfigSettings:
type: json
default: {}
resources:
@ -1294,6 +1297,7 @@ resources:
- heat_config_%{::deploy_config_name}
- controller_extraconfig
- extraconfig
- service_configs
- controller
- database
- object
@ -1316,6 +1320,8 @@ resources:
- neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
- neutron_plumgrid_data # Optionally provided by ControllerExtraConfigPre
datafiles:
service_configs:
mapped_data: {get_param: ServiceConfigSettings}
controller_extraconfig:
mapped_data: {get_param: ControllerExtraConfig}
extraconfig:

View File

@ -0,0 +1,50 @@
========
services
========
A TripleO nested stack Heat template that encapsulates generic configuration
data to configure a specific service. This generally includes everything
needed to configure the service excluding the local bind ports which
are still managed in the per-node role templates directly (controller.yaml,
compute.yaml, etc.). All other (global) service settings go into
the puppet/service templates.
Input Parameters
----------------
Each service may define its own input parameters and defaults.
Operators will use the parameter_defaults section of any Heat
environment to set per service parameters.
Config Settings
---------------
Each service may define a config_settings output variable which returns
Hiera settings to be configured.
Steps
-----
Each service may define an output variable which returns a puppet manifest
snippet that will run at each of the following steps. Earlier manifests
are re-asserted when applying latter ones.
* config_settings: Custom hiera settings for this service.
* step_config: A puppet manifest that is used to step through the deployment
sequence. Each sequence is given a "step" (via hiera('step') that provides
information for when puppet classes should activate themselves.
Steps correlate to the following:
1) Load Balancer configuration
2) Core Services (Database/Rabbit/NTP/etc.)
3) Early Openstack Service setup (Ringbuilder, etc.)
4) General OpenStack Services
5) Service activation (Pacemaker)
6) Fencing (Pacemaker)

View File

@ -0,0 +1,40 @@
heat_template_version: 2016-04-08
description: >
Utility stack to convert an array of services into a set of combined
role configs.
parameters:
Services:
default: []
description: |
List nested stack service templates.
type: comma_delimited_list
EndpointMap:
default: {}
description: Mapping of service endpoint -> protocol. Typically set
via parameter_defaults in the resource registry.
type: json
MysqlVirtualIPUri:
default: ''
type: string
description: The URI virtual IP for the MySQL service.
resources:
ServiceChain:
type: OS::Heat::ResourceChain
properties:
resources: {get_param: Services}
concurrent: true
resource_properties:
EndpointMap: {get_param: EndpointMap}
MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
outputs:
config_settings:
description: Configuration settings.
value: {map_merge: {get_attr: [ServiceChain, role_data, config_settings]}}
step_config:
description: Step configuration.
value: {list_join: ["\n", {get_attr: [ServiceChain, role_data, step_config]}]}