51bac7d227
Change-Id: I839a593df2116264112a6060f1f306910cfba197
105 lines
3.2 KiB
ReStructuredText
105 lines
3.2 KiB
ReStructuredText
THT design patterns
|
|
-------------------
|
|
|
|
.. _duplicated-parameters:
|
|
|
|
Duplicated parameters
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Problem: When defining multiple related services, it can be necessary
|
|
to define the same parameters (such as rabbit or DB credentials) in
|
|
multiple service templates. To avoid this, it is possible to define a
|
|
"base" heat template that contains the common parameters and config_settings
|
|
mapping for those services that require it.
|
|
|
|
This pattern will describe how to avoid duplicated parameters in the THT yaml
|
|
files.
|
|
|
|
``mongodb-base.yaml``: This file should have all the common parameters between
|
|
the different environments (With pacemaker and without pacemaker).
|
|
::
|
|
|
|
heat_template_version: 2016-04-08
|
|
description: >
|
|
Configuration details for MongoDB service using composable roles
|
|
parameters:
|
|
MongoDbNoJournal:
|
|
default: false
|
|
description: Should MongoDb journaling be disabled
|
|
type: boolean
|
|
MongoDbIPv6:
|
|
default: false
|
|
description: Enable IPv6 if MongoDB VIP is IPv6
|
|
type: boolean
|
|
MongoDbReplset:
|
|
type: string
|
|
default: "tripleo"
|
|
outputs:
|
|
role_data:
|
|
description: Role data for the MongoDB base service.
|
|
value:
|
|
config_settings:
|
|
mongodb::server::nojournal: {get_param: MongoDbNoJournal}
|
|
mongodb::server::ipv6: {get_param: MongoDbIPv6}
|
|
mongodb::server::replset: {get_param: MongoDbReplset}
|
|
|
|
In this way we will be able to reuse the common parameter among all the
|
|
template files requiring it.
|
|
|
|
Referencing the common parameter:
|
|
|
|
``mongodb.yaml``: Will have specific parameters to deploy mongodb without
|
|
pacemaker.
|
|
::
|
|
|
|
heat_template_version: 2016-04-08
|
|
description: >
|
|
MongoDb service deployment using puppet
|
|
parameters:
|
|
#Parameters not used EndpointMap
|
|
EndpointMap:
|
|
default: {}
|
|
description: Mapping of service endpoint -> protocol. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
resources:
|
|
MongoDbBase:
|
|
type: ./mongodb-base.yaml
|
|
outputs:
|
|
role_data:
|
|
description: Service mongodb using composable services.
|
|
value:
|
|
config_settings:
|
|
map_merge:
|
|
- get_attr: [MongoDbBase, role_data, config_settings]
|
|
- mongodb::server::service_manage: True
|
|
step_config: |
|
|
include ::tripleo::profile::base::database::mongodb
|
|
|
|
In this case mongodb.yaml is using all the common parameter added in the
|
|
MongoDbBase resource.
|
|
|
|
If using the parameter 'EndpointMap' in the base template, you must the pass it from from the service file,
|
|
and even if it is not used in the service template, it must still be defined.
|
|
|
|
In the service file:
|
|
::
|
|
|
|
parameters:
|
|
EndpointMap:
|
|
default: {}
|
|
description: Mapping of service endpoint -> protocol. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
resources:
|
|
<ServiceName>ServiceBase:
|
|
type: ./<ServiceName>-base.yaml
|
|
properties:
|
|
EndpointMap: {get_param: EndpointMap}
|
|
|
|
This will pass the endpoint information to the base config file.
|
|
|
|
.. note::
|
|
|
|
Even if the EndpointMap parameter is optional in the base template,
|
|
for consistency is advised always using it in all service templates. |