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
This commit is contained in:
Steven Hardy 2015-06-18 10:05:06 -04:00 committed by Robert Pothier
parent 45327bc187
commit e4c4c4068e
10 changed files with 231 additions and 73 deletions

View 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'

View File

@ -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}

View File

@ -1,3 +0,0 @@
heat_template_version: 2015-04-30
description: A stack which doesn't configure anything.

View File

@ -0,0 +1,2 @@
This tree contains additional configuration which happens "post deployment",
e.g after the OpenStack service configuration has been completed.

View File

@ -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

View 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]}

View File

@ -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

View File

@ -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]}

View File

@ -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}

View File

@ -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"