Enable hieradata ExtraConfig overrides for Controller
authorSteven Hardy <shardy@redhat.com>
Wed, 15 Jul 2015 15:04:13 +0000 (11:04 -0400)
committerSteven Hardy <shardy@redhat.com>
Wed, 15 Jul 2015 15:33:57 +0000 (16:33 +0100)
Wires in the ControllerExtraConfig and ExtraConfig parameters so
that they may be used to specify overrides of the default hieradata.

Note if this is used to override values specified via parameters
rather than hard-coded values in puppet/hieradata caution should
be used as the overridden values will always take precendence
regardless of the parameter input, unless the parameter is provided
directly to the Deployment resource applying the manifiest (e.g
not the pattern currently employed in most of t-h-t)

Also note that ControllerExtraConfig takes precedence over the
deployment-wide ExtraConfig.

For example, here's how you would pass a value which disables the
heat-api-cfn service on all controllers. This would be put into an
environment file, then passed to the heat stack-create via an extra
-e option:

parameters:
  controllerExtraConfig:
    heat::api_cfn::enabled: false

Note the parameter capitalization is different in the top-level
overcloud-without-mergepy template for some reason.

Change-Id: I6d6e3e78460308134d95c01892bb242aba70e9ca

overcloud-without-mergepy.yaml
puppet/controller-puppet.yaml

index 19c65a4..d4dd5a1 100644 (file)
@@ -300,40 +300,9 @@ parameters:
   ExtraConfig:
     default: {}
     description: |
-      Additional configuration to inject into the cluster. The JSON should have
-      the following structure:
-        {"FILEKEY":
-          {"config":
-            [{"section": "SECTIONNAME",
-              "values":
-                [{"option": "OPTIONNAME",
-                  "value": "VALUENAME"
-                 }
-                ]
-             }
-            ]
-          }
-        }
-      For instance:
-        {"nova":
-          {"config":
-            [{"section": "default",
-              "values":
-                [{"option": "force_config_drive",
-                  "value": "always"
-                 }
-                ]
-             },
-             {"section": "cells",
-              "values":
-                [{"option": "driver",
-                  "value": "nova.cells.rpc_driver.CellsRPCDriver"
-                 }
-                ]
-             }
-            ]
-          }
-        }
+      Additional configuration to inject into the cluster. The format required
+      may be implementation specific, e.g puppet hieradata.  Any role specific
+      ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
     type: json
   FencingConfig:
     default: {}
index ad4eff1..d88e54b 100644 (file)
@@ -61,8 +61,7 @@ parameters:
   ControllerExtraConfig:
     default: {}
     description: |
-      Controller specific configuration to inject into the cluster. Same
-      structure as ExtraConfig.
+      Controller specific hiera configuration data to inject into the cluster.
     type: json
   ControlVirtualInterface:
     default: 'br-ex'
@@ -91,40 +90,8 @@ parameters:
   ExtraConfig:
     default: {}
     description: |
-      Additional configuration to inject into the cluster. The JSON should have
-      the following structure:
-        {"FILEKEY":
-          {"config":
-            [{"section": "SECTIONNAME",
-              "values":
-                [{"option": "OPTIONNAME",
-                  "value": "VALUENAME"
-                 }
-                ]
-             }
-            ]
-          }
-        }
-      For instance:
-        {"nova":
-          {"config":
-            [{"section": "default",
-              "values":
-                [{"option": "compute_manager",
-                  "value": "ironic.nova.compute.manager.ClusterComputeManager"
-                 }
-                ]
-             },
-             {"section": "cells",
-              "values":
-                [{"option": "driver",
-                  "value": "nova.cells.rpc_driver.CellsRPCDriver"
-                 }
-                ]
-             }
-            ]
-          }
-        }
+      Additional hieradata to inject into the cluster, note that
+      ControllerExtraConfig takes precedence over ExtraConfig.
     type: json
   FencingConfig:
     default: {}
@@ -868,6 +835,8 @@ resources:
         hiera:
           hierarchy:
             - heat_config_%{::deploy_config_name}
+            - controller_extraconfig
+            - extraconfig
             - controller
             - object
             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
@@ -880,6 +849,10 @@ resources:
             - common
             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
           datafiles:
+            controller_extraconfig:
+              mapped_data: {get_param: ControllerExtraConfig}
+            extraconfig:
+              mapped_data: {get_param: ExtraConfig}
             common:
               raw_data: {get_file: hieradata/common.yaml}
             ceph: