Wire in Controller pre-deployment extraconfig
authorSteven Hardy <shardy@redhat.com>
Thu, 18 Jun 2015 14:05:06 +0000 (10:05 -0400)
committerRobert Pothier <rpothier@cisco.com>
Mon, 6 Jul 2015 14:56:11 +0000 (10:56 -0400)
The recently added cinder-netapp extraconfig contains some additional
hieradata which needs to be applied during the initial pre-deployment
phase, e.g in controller-puppet.yaml (before the manifests are applied)
so wire in a new OS::TripleO::ControllerExtraConfigPre provider resource
which allows passing in a nested stack (empty by default) which contains
any required "pre deployment" extraconfig, such as applying this hieradata.

Some changes were required to the cinder-netapp extraconfig and environment
such that now the hieradata is actually applied, and the parameter_defaults
specified will be correctly mapped into the StructuredDeployment.

Change-Id: I8838a71db9447466cc84283b0b257bdb70353ffd

environments/cinder-netapp-config.yaml
extraconfig/controller/cinder-netapp.yaml [deleted file]
extraconfig/controller/noop.yaml [deleted file]
extraconfig/post_deploy/README [new file with mode: 0644]
overcloud-resource-registry-puppet.yaml
puppet/controller-puppet.yaml
puppet/extraconfig/pre_deploy/README [new file with mode: 0644]
puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml [new file with mode: 0644]
puppet/extraconfig/pre_deploy/controller/multiple.yaml [new file with mode: 0644]
puppet/extraconfig/pre_deploy/default.yaml [new file with mode: 0644]

index 4dd9eed..4eaec71 100644 (file)
@@ -1,30 +1,29 @@
 # A Heat environment file which can be used to enable a
-# a Cinder NetApp backend.
+# a Cinder NetApp backend, configured via puppet
 resource_registry:
-  OS::TripleO::Controller::CinderBackend: extraconfig/controller/cinder-netapp.yaml
+  OS::TripleO::ControllerExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml
 
 parameter_defaults:
-  CinderBackendConfig:
-    CinderEnableNetappBackend: false
-    CinderNetappBackendName: 'tripleo_netapp'
-    CinderNetappLogin: ''
-    CinderNetappPassword: ''
-    CinderNetappServerHostname: ''
-    CinderNetappServerPort: '80'
-    CinderNetappSizeMultiplier: '1.2'
-    CinderNetappStorageFamily: 'ontap_cluster'
-    CinderNetappStorageProtocol: 'nfs'
-    CinderNetappTransportType: 'http'
-    CinderNetappVfiler: ''
-    CinderNetappVolumeList: ''
-    CinderNetappVserver: ''
-    CinderNetappPartnerBackendName: ''
-    CinderNetappNfsShares: ''
-    CinderNetappNfsSharesConfig: '/etc/cinder/shares.conf'
-    CinderNetappNfsMountOptions: ''
-    CinderNetappCopyOffloadToolPath: ''
-    CinderNetappControllerIps: ''
-    CinderNetappSaPassword: ''
-    CinderNetappStoragePools: ''
-    CinderNetappEseriesHostType: 'linux_dm_mp'
-    CinderNetappWebservicePath: '/devmgr/v2'
+  CinderEnableNetappBackend: false
+  CinderNetappBackendName: 'tripleo_netapp'
+  CinderNetappLogin: ''
+  CinderNetappPassword: ''
+  CinderNetappServerHostname: ''
+  CinderNetappServerPort: '80'
+  CinderNetappSizeMultiplier: '1.2'
+  CinderNetappStorageFamily: 'ontap_cluster'
+  CinderNetappStorageProtocol: 'nfs'
+  CinderNetappTransportType: 'http'
+  CinderNetappVfiler: ''
+  CinderNetappVolumeList: ''
+  CinderNetappVserver: ''
+  CinderNetappPartnerBackendName: ''
+  CinderNetappNfsShares: ''
+  CinderNetappNfsSharesConfig: '/etc/cinder/shares.conf'
+  CinderNetappNfsMountOptions: ''
+  CinderNetappCopyOffloadToolPath: ''
+  CinderNetappControllerIps: ''
+  CinderNetappSaPassword: ''
+  CinderNetappStoragePools: ''
+  CinderNetappEseriesHostType: 'linux_dm_mp'
+  CinderNetappWebservicePath: '/devmgr/v2'
diff --git a/extraconfig/controller/cinder-netapp.yaml b/extraconfig/controller/cinder-netapp.yaml
deleted file mode 100644 (file)
index 223ceac..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-heat_template_version: 2015-04-30
-
-description: >
-  Configure hieradata for Cinder Netapp configuration
-
-resources:
-  CinderNetappConfig:
-    type: OS::Heat::StructuredConfig
-    properties:
-      group: os-apply-config
-      config:
-        hiera:
-          datafiles:
-            cinder_netapp_data:
-              mapped_data:
-                cinder_enable_netapp_backend: {get_param: CinderEnableNetappBackend}
-                cinder::backend::netapp::title: {get_param: CinderNetappBackendName}
-                cinder::backend::netapp::netapp_login: {get_param: CinderNetappLogin}
-                cinder::backend::netapp::netapp_password: {get_param: CinderNetappPassword}
-                cinder::backend::netapp::netapp_hostname: {get_param: CinderNetappServerHostname}
-                cinder::backend::netapp::netapp_server_port: {get_param: CinderNetappServerPort}
-                cinder::backend::netapp::netapp_size_multiplier: {get_param: CinderNetappSizeMultiplier}
-                cinder::backend::netapp::netapp_storage_family: {get_param: CinderNetappStorageFamily}
-                cinder::backend::netapp::netapp_storage_protocol: {get_param: CinderNetappStorageProtocol}
-                cinder::backend::netapp::netapp_transport_type: {get_param: CinderNetappTransportType}
-                cinder::backend::netapp::netapp_vfiler: {get_param: CinderNetappVfiler}
-                cinder::backend::netapp::netapp_volume_list: {get_param: CinderNetappVolumeList}
-                cinder::backend::netapp::netapp_vserver: {get_param: CinderNetappVserver}
-                cinder::backend::netapp::netapp_partner_backend_name: {get_param: CinderNetappPartnerBackendName}
-                cinder::backend::netapp::nfs_shares: {get_param: CinderNetappNfsShares}
-                cinder::backend::netapp::nfs_shares_config: {get_param: CinderNetappNfsSharesConfig}
-                cinder::backend::netapp::nfs_mount_options: {get_param: CinderNetappNfsMountOptions}
-                cinder::backend::netapp::netapp_copyoffload_tool_path: {get_param: CinderNetappCopyOffloadToolPath}
-                cinder::backend::netapp::netapp_controller_ips: {get_param: CinderNetappControllerIps}
-                cinder::backend::netapp::netapp_sa_password: {get_param: CinderNetappSaPassword}
-                cinder::backend::netapp::netapp_storage_pools: {get_param: CinderNetappStoragePools}
-                cinder::backend::netapp::netapp_eseries_host_type: {get_param: CinderNetappEseriesHostType}
-                cinder::backend::netapp::netapp_webservice_path: {get_param: CinderNetappWebservicePath}
diff --git a/extraconfig/controller/noop.yaml b/extraconfig/controller/noop.yaml
deleted file mode 100644 (file)
index 2eb3576..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-heat_template_version: 2015-04-30
-
-description: A stack which doesn't configure anything.
diff --git a/extraconfig/post_deploy/README b/extraconfig/post_deploy/README
new file mode 100644 (file)
index 0000000..3c53fa2
--- /dev/null
@@ -0,0 +1,2 @@
+This tree contains additional configuration which happens "post deployment",
+e.g after the OpenStack service configuration has been completed.
index c9041c6..17c1470 100644 (file)
@@ -21,9 +21,15 @@ resource_registry:
   OS::TripleO::CephClusterConfig::SoftwareConfig: puppet/ceph-cluster-config.yaml
   OS::TripleO::AllNodes::SoftwareConfig: puppet/all-nodes-config.yaml
   OS::TripleO::BootstrapNode::SoftwareConfig: puppet/bootstrap-config.yaml
+  OS::TripleO::Tasks::PackageUpdate: extraconfig/tasks/yum_update.yaml
+
+  # Hooks for operator extra config
+  # NodeUserData == Cloud-init additional user-data, e.g cloud-config
+  # ControllerExtraConfigPre == Controller configuration pre service deployment
+  # NodeExtraConfigPost == All nodes configuration post service deployment
   OS::TripleO::NodeUserData: firstboot/userdata_default.yaml
+  OS::TripleO::ControllerExtraConfigPre: puppet/extraconfig/pre_deploy/default.yaml
   OS::TripleO::NodeExtraConfigPost: extraconfig/post_deploy/default.yaml
-  OS::TripleO::Tasks::PackageUpdate: extraconfig/tasks/yum_update.yaml
 
   # TripleO overcloud networks
   OS::TripleO::Network: network/networks.yaml
@@ -65,9 +71,6 @@ resource_registry:
   OS::TripleO::BlockStorage::Ports::StoragePort: network/ports/noop.yaml
   OS::TripleO::BlockStorage::Ports::StorageMgmtPort: network/ports/noop.yaml
 
-  # Cinder backend config for the controller role
-  OS::TripleO::Controller::CinderBackend: extraconfig/controller/noop.yaml
-
   # Port assignments for service virtual IPs for the controller role
   OS::TripleO::Controller::Ports::RedisVipPort: network/ports/ctlplane_vip.yaml
 
index 5a356bc..f4eab68 100644 (file)
@@ -824,6 +824,7 @@ resources:
             - vip_data # provided by vip-config
             - '"%{::osfamily}"'
             - common
+            - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
           datafiles:
             common:
               raw_data: {get_file: hieradata/common.yaml}
@@ -1041,6 +1042,13 @@ resources:
                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
                 enable_package_install: {get_input: enable_package_install}
 
+  # Hook for site-specific additional pre-deployment config, e.g extra hieradata
+  ControllerExtraConfigPre:
+    depends_on: ControllerDeployment
+    type: OS::TripleO::ControllerExtraConfigPre
+    properties:
+        server: {get_resource: Controller}
+
   UpdateConfig:
     type: OS::TripleO::Tasks::PackageUpdate
 
@@ -1112,4 +1120,8 @@ outputs:
           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
   config_identifier:
     description: identifier which changes if the controller configuration may need re-applying
-    value: {get_attr: [ControllerDeployment, deploy_stdout]}
+    value:
+      list_join:
+      - ','
+      - - {get_attr: [ControllerDeployment, deploy_stdout]}
+        - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
diff --git a/puppet/extraconfig/pre_deploy/README b/puppet/extraconfig/pre_deploy/README
new file mode 100644 (file)
index 0000000..51fc340
--- /dev/null
@@ -0,0 +1,12 @@
+This tree contains additional configuration which happens "pre deployment",
+e.g before the OpenStack services themselves are configured but after the
+nodes themselves have been provisioned and initially configured.
+
+Typically for puppet deployments these additional configs will put in place
+hieradata which is then consumed by the subsequent puppet configuration
+which occurs during the post-deployment phase.
+
+If you need to specify multiple configs, you can chain them together in a
+template, see the multiple.yaml example:
+
+  OS::TripleO::ControllerExtraConfigPre: puppet/extraconfig/pre_deploy/controller/multiple.yaml
diff --git a/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml b/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml
new file mode 100644 (file)
index 0000000..1d982df
--- /dev/null
@@ -0,0 +1,145 @@
+heat_template_version: 2015-04-30
+
+description: Configure hieradata for Cinder Netapp configuration
+
+parameters:
+  server:
+    description: ID of the controller node to apply this config to
+    type: string
+
+  # Config specific parameters, to be provided via parameter_defaults
+  CinderEnableNetappBackend:
+    type: string
+    default: false
+  CinderNetappBackendName:
+    type: string
+    default: 'tripleo_netapp'
+  CinderNetappLogin:
+    type: string
+  CinderNetappPassword:
+    type: string
+  CinderNetappServerHostname:
+    type: string
+  CinderNetappServerPort:
+    type: string
+    default: '80'
+  CinderNetappSizeMultiplier:
+    type: string
+    default: '1.2'
+  CinderNetappStorageFamily:
+    type: string
+    default: 'ontap_cluster'
+  CinderNetappStorageProtocol:
+    type: string
+    default: 'nfs'
+  CinderNetappTransportType:
+    type: string
+    default: 'http'
+  CinderNetappVfiler:
+    type: string
+    default: ''
+  CinderNetappVolumeList:
+    type: string
+    default: ''
+  CinderNetappVserver:
+    type: string
+    default: ''
+  CinderNetappPartnerBackendName:
+    type: string
+    default: ''
+  CinderNetappNfsShares:
+    type: string
+    default: ''
+  CinderNetappNfsSharesConfig:
+    type: string
+    default: '/etc/cinder/shares.conf'
+  CinderNetappNfsMountOptions:
+    type: string
+    default: ''
+  CinderNetappCopyOffloadToolPath:
+    type: string
+    default: ''
+  CinderNetappControllerIps:
+    type: string
+    default: ''
+  CinderNetappSaPassword:
+    type: string
+    default: ''
+  CinderNetappStoragePools:
+    type: string
+    default: ''
+  CinderNetappEseriesHostType:
+    type: string
+    default: 'linux_dm_mp'
+  CinderNetappWebservicePath:
+    type: string
+    default: '/devmgr/v2'
+
+resources:
+  CinderNetappConfig:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        hiera:
+          datafiles:
+            cinder_netapp_data:
+              mapped_data:
+                cinder_enable_netapp_backend: {get_input: EnableNetappBackend}
+                cinder::backend::netapp::title: {get_input: NetappBackendName}
+                cinder::backend::netapp::netapp_login: {get_input: NetappLogin}
+                cinder::backend::netapp::netapp_password: {get_input: NetappPassword}
+                cinder::backend::netapp::netapp_hostname: {get_input: NetappServerHostname}
+                cinder::backend::netapp::netapp_server_port: {get_input: NetappServerPort}
+                cinder::backend::netapp::netapp_size_multiplier: {get_input: NetappSizeMultiplier}
+                cinder::backend::netapp::netapp_storage_family: {get_input: NetappStorageFamily}
+                cinder::backend::netapp::netapp_storage_protocol: {get_input: NetappStorageProtocol}
+                cinder::backend::netapp::netapp_transport_type: {get_input: NetappTransportType}
+                cinder::backend::netapp::netapp_vfiler: {get_input: NetappVfiler}
+                cinder::backend::netapp::netapp_volume_list: {get_input: NetappVolumeList}
+                cinder::backend::netapp::netapp_vserver: {get_input: NetappVserver}
+                cinder::backend::netapp::netapp_partner_backend_name: {get_input: NetappPartnerBackendName}
+                cinder::backend::netapp::nfs_shares: {get_input: NetappNfsShares}
+                cinder::backend::netapp::nfs_shares_config: {get_input: NetappNfsSharesConfig}
+                cinder::backend::netapp::nfs_mount_options: {get_input: NetappNfsMountOptions}
+                cinder::backend::netapp::netapp_copyoffload_tool_path: {get_input: NetappCopyOffloadToolPath}
+                cinder::backend::netapp::netapp_controller_ips: {get_input: NetappControllerIps}
+                cinder::backend::netapp::netapp_sa_password: {get_input: NetappSaPassword}
+                cinder::backend::netapp::netapp_storage_pools: {get_input: NetappStoragePools}
+                cinder::backend::netapp::netapp_eseries_host_type: {get_input: NetappEseriesHostType}
+                cinder::backend::netapp::netapp_webservice_path: {get_input: NetappWebservicePath}
+
+  CinderNetappDeployment:
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: CinderNetappConfig}
+      server: {get_param: server}
+      input_values:
+        EnableNetappBackend: {get_param: CinderEnableNetappBackend}
+        NetappBackendName: {get_param: CinderNetappBackendName}
+        NetappLogin: {get_param: CinderNetappLogin}
+        NetappPassword: {get_param: CinderNetappPassword}
+        NetappServerHostname: {get_param: CinderNetappServerHostname}
+        NetappServerPort: {get_param: CinderNetappServerPort}
+        NetappSizeMultiplier: {get_param: CinderNetappSizeMultiplier}
+        NetappStorageFamily: {get_param: CinderNetappStorageFamily}
+        NetappStorageProtocol: {get_param: CinderNetappStorageProtocol}
+        NetappTransportType: {get_param: CinderNetappTransportType}
+        NetappVfiler: {get_param: CinderNetappVfiler}
+        NetappVolumeList: {get_param: CinderNetappVolumeList}
+        NetappVserver: {get_param: CinderNetappVserver}
+        NetappPartnerBackendName: {get_param: CinderNetappPartnerBackendName}
+        NetappNfsShares: {get_param: CinderNetappNfsShares}
+        NetappNfsSharesConfig: {get_param: CinderNetappNfsSharesConfig}
+        NetappNfsMountOptions: {get_param: CinderNetappNfsMountOptions}
+        NetappCopyOffloadToolPath: {get_param: CinderNetappCopyOffloadToolPath}
+        NetappControllerIps: {get_param: CinderNetappControllerIps}
+        NetappSaPassword: {get_param: CinderNetappSaPassword}
+        NetappStoragePools: {get_param: CinderNetappStoragePools}
+        NetappEseriesHostType: {get_param: CinderNetappEseriesHostType}
+        NetappWebservicePath: {get_param: CinderNetappWebservicePath}
+
+outputs:
+  deploy_stdout:
+    description: Deployment reference, used to trigger puppet apply on changes
+    value: {get_attr: [CinderNetappDeployment, deploy_stdout]}
diff --git a/puppet/extraconfig/pre_deploy/controller/multiple.yaml b/puppet/extraconfig/pre_deploy/controller/multiple.yaml
new file mode 100644 (file)
index 0000000..f949a39
--- /dev/null
@@ -0,0 +1,18 @@
+heat_template_version: 2014-10-16
+description: 'Extra Pre-Deployment Config, multiple'
+parameters:
+  server:
+    type: string
+
+resources:
+
+  CinderNetappConfig:
+    type: cinder-netapp.yaml
+    properties:
+        server: {get_param: server}
+
+  # Note depends_on may be used for serialization if ordering is important
+  OtherConfig:
+    type: other.yaml
+    properties:
+        server: {get_param: server}
diff --git a/puppet/extraconfig/pre_deploy/default.yaml b/puppet/extraconfig/pre_deploy/default.yaml
new file mode 100644 (file)
index 0000000..dcbc681
--- /dev/null
@@ -0,0 +1,8 @@
+heat_template_version: 2014-10-16
+description: 'Noop Extra Pre-Deployment Config'
+parameters:
+  server:
+    type: string
+outputs:
+  deploy_stdout:
+    value: "None"