From e4c4c4068e817e30f46ba9ed475790f20343df18 Mon Sep 17 00:00:00 2001 From: Steven Hardy Date: Thu, 18 Jun 2015 10:05:06 -0400 Subject: [PATCH] Wire in Controller pre-deployment extraconfig 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 | 51 +++--- extraconfig/controller/cinder-netapp.yaml | 38 ----- extraconfig/controller/noop.yaml | 3 - extraconfig/post_deploy/README | 2 + overcloud-resource-registry-puppet.yaml | 13 +- puppet/controller-puppet.yaml | 14 +- puppet/extraconfig/pre_deploy/README | 12 ++ .../pre_deploy/controller/cinder-netapp.yaml | 145 ++++++++++++++++++ .../pre_deploy/controller/multiple.yaml | 18 +++ puppet/extraconfig/pre_deploy/default.yaml | 8 + 10 files changed, 231 insertions(+), 73 deletions(-) delete mode 100644 extraconfig/controller/cinder-netapp.yaml delete mode 100644 extraconfig/controller/noop.yaml create mode 100644 extraconfig/post_deploy/README create mode 100644 puppet/extraconfig/pre_deploy/README create mode 100644 puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml create mode 100644 puppet/extraconfig/pre_deploy/controller/multiple.yaml create mode 100644 puppet/extraconfig/pre_deploy/default.yaml diff --git a/environments/cinder-netapp-config.yaml b/environments/cinder-netapp-config.yaml index 4dd9eed791..4eaec71fad 100644 --- a/environments/cinder-netapp-config.yaml +++ b/environments/cinder-netapp-config.yaml @@ -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 index 223ceacd28..0000000000 --- a/extraconfig/controller/cinder-netapp.yaml +++ /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 index 2eb3576399..0000000000 --- a/extraconfig/controller/noop.yaml +++ /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 index 0000000000..3c53fa2c5c --- /dev/null +++ b/extraconfig/post_deploy/README @@ -0,0 +1,2 @@ +This tree contains additional configuration which happens "post deployment", +e.g after the OpenStack service configuration has been completed. diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml index c9041c6bf3..17c1470f7a 100644 --- a/overcloud-resource-registry-puppet.yaml +++ b/overcloud-resource-registry-puppet.yaml @@ -21,10 +21,16 @@ 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::NodeUserData: firstboot/userdata_default.yaml - OS::TripleO::NodeExtraConfigPost: extraconfig/post_deploy/default.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 + # TripleO overcloud networks OS::TripleO::Network: network/networks.yaml OS::TripleO::VipConfig: puppet/vip-config.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 diff --git a/puppet/controller-puppet.yaml b/puppet/controller-puppet.yaml index 5a356bccc9..f4eab68aff 100644 --- a/puppet/controller-puppet.yaml +++ b/puppet/controller-puppet.yaml @@ -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 index 0000000000..51fc340686 --- /dev/null +++ b/puppet/extraconfig/pre_deploy/README @@ -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 index 0000000000..1d982dff36 --- /dev/null +++ b/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml @@ -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 index 0000000000..f949a397a0 --- /dev/null +++ b/puppet/extraconfig/pre_deploy/controller/multiple.yaml @@ -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 index 0000000000..dcbc6811da --- /dev/null +++ b/puppet/extraconfig/pre_deploy/default.yaml @@ -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"