Configure ControllerServices via resource chains
authorDan Prince <dprince@redhat.com>
Tue, 15 Mar 2016 14:49:30 +0000 (10:49 -0400)
committerDan Prince <dprince@redhat.com>
Thu, 31 Mar 2016 20:09:17 +0000 (16:09 -0400)
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

overcloud-resource-registry-puppet.yaml
overcloud.yaml
puppet/controller-config-pacemaker.yaml
puppet/controller-config.yaml
puppet/controller-post.yaml
puppet/controller.yaml
puppet/services/README.rst [new file with mode: 0644]
puppet/services/services.yaml [new file with mode: 0644]

index 54074d1..bc3b724 100644 (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
index 19e847a..cd724b3 100644 (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
index 21db825..dfebcf8 100644 (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:
index f7a6a56..458aff3 100644 (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:
index 04f20b6..80b08a0 100644 (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,
index efdf08b..d966700 100644 (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:
diff --git a/puppet/services/README.rst b/puppet/services/README.rst
new file mode 100644 (file)
index 0000000..38d2ac6
--- /dev/null
@@ -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)
diff --git a/puppet/services/services.yaml b/puppet/services/services.yaml
new file mode 100644 (file)
index 0000000..f968163
--- /dev/null
@@ -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]}]}