34b4954bc4
This change configures the hiera merge behavior to 'deeper' [1], which is useful to merge values when the same hiera key is found in multiple datafiles. The hiera default 'native' only picks the value from the key with the highest priority in the hierarchy. 1. https://docs.puppetlabs.com/hiera/1/lookup_types.html#deep-merging-in-hiera--120 Change-Id: I88c764d9af510ffbbad9fcaa4b747655e38255c2
459 lines
16 KiB
YAML
459 lines
16 KiB
YAML
heat_template_version: 2015-04-30
|
|
description: 'OpenStack cinder storage configured by Puppet'
|
|
parameters:
|
|
Image:
|
|
default: overcloud-cinder-volume
|
|
type: string
|
|
CinderEnableIscsiBackend:
|
|
default: true
|
|
description: Whether to enable or not the Iscsi backend for Cinder
|
|
type: boolean
|
|
CinderISCSIHelper:
|
|
default: lioadm
|
|
description: The iSCSI helper to use with cinder.
|
|
type: string
|
|
CinderLVMLoopDeviceSize:
|
|
default: 10280
|
|
description: The size of the loopback file used by the cinder LVM driver.
|
|
type: number
|
|
CinderPassword:
|
|
description: The password for the cinder service and db account, used by cinder-api.
|
|
type: string
|
|
hidden: true
|
|
Debug:
|
|
default: ''
|
|
description: Set to True to enable debugging on all services.
|
|
type: string
|
|
VirtualIP: # deprecated. Use per service VIPs instead.
|
|
default: ''
|
|
type: string
|
|
ExtraConfig:
|
|
default: {}
|
|
description: |
|
|
Additional hiera configuration to inject into the cluster. Note
|
|
that BlockStorageExtraConfig takes precedence over ExtraConfig.
|
|
type: json
|
|
BlockStorageExtraConfig:
|
|
default: {}
|
|
description: |
|
|
Role specific additional hiera configuration to inject into the cluster.
|
|
type: json
|
|
BlockStorageIPs:
|
|
default: {}
|
|
type: json
|
|
Flavor:
|
|
description: Flavor for block storage nodes to request when deploying.
|
|
type: string
|
|
constraints:
|
|
- custom_constraint: nova.flavor
|
|
KeyName:
|
|
default: default
|
|
description: Name of an existing Nova key pair to enable SSH access to the instances
|
|
type: string
|
|
RabbitPassword:
|
|
type: string
|
|
hidden: true
|
|
RabbitUserName:
|
|
default: 'guest'
|
|
type: string
|
|
RabbitClientUseSSL:
|
|
default: false
|
|
description: >
|
|
Rabbit client subscriber parameter to specify
|
|
an SSL connection to the RabbitMQ host.
|
|
type: string
|
|
RabbitClientPort:
|
|
default: 5672
|
|
description: Set rabbit subscriber port, change this if using SSL
|
|
type: number
|
|
SnmpdReadonlyUserName:
|
|
default: ro_snmp_user
|
|
description: The user name for SNMPd with readonly rights running on all Overcloud nodes
|
|
type: string
|
|
SnmpdReadonlyUserPassword:
|
|
description: The user password for SNMPd with readonly rights running on all Overcloud nodes
|
|
type: string
|
|
hidden: true
|
|
NtpServer:
|
|
default: ''
|
|
description: Comma-separated list of ntp servers
|
|
type: comma_delimited_list
|
|
EnablePackageInstall:
|
|
default: 'false'
|
|
description: Set to true to enable package installation via Puppet
|
|
type: boolean
|
|
UpdateIdentifier:
|
|
default: ''
|
|
type: string
|
|
description: >
|
|
Setting to a previously unused value during stack-update will trigger
|
|
package update on all nodes
|
|
Hostname:
|
|
type: string
|
|
default: '' # Defaults to Heat created hostname
|
|
HostnameMap:
|
|
type: json
|
|
default: {}
|
|
description: Optional mapping to override hostnames
|
|
ServiceNetMap:
|
|
default: {}
|
|
description: Mapping of service_name -> network name. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
EndpointMap:
|
|
default: {}
|
|
description: Mapping of service endpoint -> protocol. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
TimeZone:
|
|
default: 'UTC'
|
|
description: The timezone to be set on Cinder nodes.
|
|
type: string
|
|
GlanceApiVirtualIP:
|
|
type: string
|
|
default: ''
|
|
MysqlVirtualIPUri:
|
|
type: string
|
|
default: ''
|
|
NetworkDeploymentActions:
|
|
type: comma_delimited_list
|
|
description: >
|
|
Heat action when to apply network configuration changes
|
|
default: ['CREATE']
|
|
SoftwareConfigTransport:
|
|
default: POLL_SERVER_CFN
|
|
description: |
|
|
How the server should receive the metadata required for software configuration.
|
|
type: string
|
|
constraints:
|
|
- allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
|
|
CloudDomain:
|
|
default: ''
|
|
type: string
|
|
description: >
|
|
The DNS domain used for the hosts. This should match the dhcp_domain
|
|
configured in the Undercloud neutron. Defaults to localdomain.
|
|
ServerMetadata:
|
|
default: {}
|
|
description: >
|
|
Extra properties or metadata passed to Nova for the created nodes in
|
|
the overcloud. It's accessible via the Nova metadata API.
|
|
type: json
|
|
SchedulerHints:
|
|
type: json
|
|
description: Optional scheduler hints to pass to nova
|
|
default: {}
|
|
NodeIndex:
|
|
type: number
|
|
default: 0
|
|
|
|
|
|
resources:
|
|
BlockStorage:
|
|
type: OS::Nova::Server
|
|
properties:
|
|
image:
|
|
{get_param: Image}
|
|
flavor: {get_param: Flavor}
|
|
key_name: {get_param: KeyName}
|
|
networks:
|
|
- network: ctlplane
|
|
user_data_format: SOFTWARE_CONFIG
|
|
user_data: {get_resource: UserData}
|
|
name:
|
|
str_replace:
|
|
template: {get_param: Hostname}
|
|
params: {get_param: HostnameMap}
|
|
software_config_transport: {get_param: SoftwareConfigTransport}
|
|
metadata: {get_param: ServerMetadata}
|
|
scheduler_hints: {get_param: SchedulerHints}
|
|
|
|
# Combine the NodeAdminUserData and NodeUserData mime archives
|
|
UserData:
|
|
type: OS::Heat::MultipartMime
|
|
properties:
|
|
parts:
|
|
- config: {get_resource: NodeAdminUserData}
|
|
type: multipart
|
|
- config: {get_resource: NodeUserData}
|
|
type: multipart
|
|
|
|
# Creates the "heat-admin" user if configured via the environment
|
|
# Should return a OS::Heat::MultipartMime reference via OS::stack_id
|
|
NodeAdminUserData:
|
|
type: OS::TripleO::NodeAdminUserData
|
|
|
|
# For optional operator additional userdata
|
|
# Should return a OS::Heat::MultipartMime reference via OS::stack_id
|
|
NodeUserData:
|
|
type: OS::TripleO::NodeUserData
|
|
|
|
ExternalPort:
|
|
type: OS::TripleO::BlockStorage::Ports::ExternalPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: BlockStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
InternalApiPort:
|
|
type: OS::TripleO::BlockStorage::Ports::InternalApiPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: BlockStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
StoragePort:
|
|
type: OS::TripleO::BlockStorage::Ports::StoragePort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: BlockStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
StorageMgmtPort:
|
|
type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: BlockStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
TenantPort:
|
|
type: OS::TripleO::BlockStorage::Ports::TenantPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: BlockStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
ManagementPort:
|
|
type: OS::TripleO::BlockStorage::Ports::ManagementPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: BlockStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
NetworkConfig:
|
|
type: OS::TripleO::BlockStorage::Net::SoftwareConfig
|
|
properties:
|
|
ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
|
|
InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
|
|
StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
|
|
StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
|
|
TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
|
|
ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
|
|
|
|
NetIpMap:
|
|
type: OS::TripleO::Network::Ports::NetIpMap
|
|
properties:
|
|
ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
ExternalIp: {get_attr: [ExternalPort, ip_address]}
|
|
ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
|
|
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
|
|
InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
|
|
StorageIp: {get_attr: [StoragePort, ip_address]}
|
|
StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
|
|
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
|
|
StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
|
|
TenantIp: {get_attr: [TenantPort, ip_address]}
|
|
TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
|
|
ManagementIp: {get_attr: [ManagementPort, ip_address]}
|
|
ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
|
|
|
|
NetworkDeployment:
|
|
type: OS::TripleO::SoftwareDeployment
|
|
properties:
|
|
name: NetworkDeployment
|
|
config: {get_resource: NetworkConfig}
|
|
server: {get_resource: BlockStorage}
|
|
actions: {get_param: NetworkDeploymentActions}
|
|
|
|
BlockStorageDeployment:
|
|
type: OS::Heat::StructuredDeployment
|
|
depends_on: NetworkDeployment
|
|
properties:
|
|
name: BlockStorageDeployment
|
|
server: {get_resource: BlockStorage}
|
|
config: {get_resource: BlockStorageConfig}
|
|
input_values:
|
|
debug: {get_param: Debug}
|
|
cinder_dsn: {list_join: ['', ['mysql+pymysql://cinder:', {get_param: CinderPassword}, '@', {get_param: MysqlVirtualIPUri} , '/cinder']]}
|
|
snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
|
|
snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
|
|
cinder_lvm_loop_device_size:
|
|
str_replace:
|
|
template: sizeM
|
|
params:
|
|
size: {get_param: CinderLVMLoopDeviceSize}
|
|
cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
|
|
cinder_iscsi_helper: {get_param: CinderISCSIHelper}
|
|
cinder_iscsi_ip_address:
|
|
str_replace:
|
|
template: "'IP'"
|
|
params:
|
|
IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
|
|
glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
|
|
rabbit_username: {get_param: RabbitUserName}
|
|
rabbit_password: {get_param: RabbitPassword}
|
|
rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
|
|
rabbit_client_port: {get_param: RabbitClientPort}
|
|
ntp_servers: {get_param: NtpServer}
|
|
timezone: {get_param: TimeZone}
|
|
enable_package_install: {get_param: EnablePackageInstall}
|
|
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
|
|
|
|
# Map heat metadata into hiera datafiles
|
|
BlockStorageConfig:
|
|
type: OS::Heat::StructuredConfig
|
|
properties:
|
|
group: os-apply-config
|
|
config:
|
|
hiera:
|
|
hierarchy:
|
|
- '"%{::uuid}"'
|
|
- heat_config_%{::deploy_config_name}
|
|
- volume_extraconfig
|
|
- extraconfig
|
|
- volume
|
|
- all_nodes # provided by allNodesConfig
|
|
- '"%{::osfamily}"'
|
|
- common
|
|
merge_behavior: deeper
|
|
datafiles:
|
|
common:
|
|
raw_data: {get_file: hieradata/common.yaml}
|
|
volume_extraconfig:
|
|
mapped_data: {get_param: BlockStorageExtraConfig}
|
|
extraconfig:
|
|
mapped_data: {get_param: ExtraConfig}
|
|
volume:
|
|
raw_data: {get_file: hieradata/volume.yaml}
|
|
mapped_data:
|
|
# Cinder
|
|
cinder::debug: {get_input: debug}
|
|
cinder::setup_test_volume::size: {get_input: cinder_lvm_loop_device_size}
|
|
cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
|
|
cinder::database_connection: {get_input: cinder_dsn}
|
|
cinder::rabbit_userid: {get_input: rabbit_username}
|
|
cinder::rabbit_password: {get_input: rabbit_password}
|
|
cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
|
|
cinder::rabbit_port: {get_input: rabbit_client_port}
|
|
cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
|
|
cinder_iscsi_ip_address: {get_input: cinder_iscsi_ip_address}
|
|
cinder::glance::glance_api_servers: {get_input: glance_api_servers}
|
|
ntp::servers: {get_input: ntp_servers}
|
|
timezone::timezone: {get_input: timezone}
|
|
tripleo::packages::enable_install: {get_input: enable_package_install}
|
|
tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
|
|
snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
|
|
snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
|
|
|
|
# Resource for site-specific injection of root certificate
|
|
NodeTLSCAData:
|
|
depends_on: BlockStorageDeployment
|
|
type: OS::TripleO::NodeTLSCAData
|
|
properties:
|
|
server: {get_resource: BlockStorage}
|
|
|
|
# Hook for site-specific additional pre-deployment config,
|
|
# applying to all nodes, e.g node registration/unregistration
|
|
NodeExtraConfig:
|
|
depends_on: NodeTLSCAData
|
|
type: OS::TripleO::NodeExtraConfig
|
|
properties:
|
|
server: {get_resource: BlockStorage}
|
|
|
|
UpdateConfig:
|
|
type: OS::TripleO::Tasks::PackageUpdate
|
|
|
|
UpdateDeployment:
|
|
type: OS::Heat::SoftwareDeployment
|
|
properties:
|
|
name: UpdateDeployment
|
|
config: {get_resource: UpdateConfig}
|
|
server: {get_resource: BlockStorage}
|
|
input_values:
|
|
update_identifier:
|
|
get_param: UpdateIdentifier
|
|
|
|
outputs:
|
|
hosts_entry:
|
|
value:
|
|
str_replace:
|
|
template: |
|
|
PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
|
|
EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
|
|
INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
|
|
STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
|
|
STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
|
|
TENANTIP TENANTHOST.DOMAIN TENANTHOST
|
|
MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
|
|
params:
|
|
PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
|
|
DOMAIN: {get_param: CloudDomain}
|
|
PRIMARYHOST: {get_attr: [BlockStorage, name]}
|
|
EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
|
|
EXTERNALHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- external
|
|
INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
|
|
INTERNAL_APIHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- internalapi
|
|
STORAGEIP: {get_attr: [StoragePort, ip_address]}
|
|
STORAGEHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- storage
|
|
STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
|
|
STORAGE_MGMTHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- storagemgmt
|
|
TENANTIP: {get_attr: [TenantPort, ip_address]}
|
|
TENANTHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- tenant
|
|
MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
|
|
MANAGEMENTHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- management
|
|
nova_server_resource:
|
|
description: Heat resource handle for the block storage server
|
|
value:
|
|
{get_resource: BlockStorage}
|
|
external_ip_address:
|
|
description: IP address of the server in the external network
|
|
value: {get_attr: [ExternalPort, ip_address]}
|
|
internal_api_ip_address:
|
|
description: IP address of the server in the internal_api network
|
|
value: {get_attr: [InternalApiPort, ip_address]}
|
|
storage_ip_address:
|
|
description: IP address of the server in the storage network
|
|
value: {get_attr: [StoragePort, ip_address]}
|
|
storage_mgmt_ip_address:
|
|
description: IP address of the server in the storage_mgmt network
|
|
value: {get_attr: [StorageMgmtPort, ip_address]}
|
|
tenant_ip_address:
|
|
description: IP address of the server in the tenant network
|
|
value: {get_attr: [TenantPort, ip_address]}
|
|
management_ip_address:
|
|
description: IP address of the server in the management network
|
|
value: {get_attr: [ManagementPort, ip_address]}
|
|
config_identifier:
|
|
description: identifier which changes if the node configuration may need re-applying
|
|
value:
|
|
list_join:
|
|
- ''
|
|
- - {get_attr: [BlockStorageDeployment, deploy_stdout]}
|
|
- {get_attr: [NodeTLSCAData, deploy_stdout]}
|
|
- {get_param: UpdateIdentifier}
|