01a91d3719
This adds the UpgradeInitCommonCommand for newton..ocata common UpgradeInit commands. This comes before the ansible upgrade steps so we need to do things like remove the old newton hieradata and install the ansible-pacemaker module and ansible heat-agent plugin This defaults to '' and is set in the major-upgrade-composable-steps and unset in the major-upgrade-converge environment files. Change-Id: I0c7a32194c0069b63a501a913c17907b47c9cc16
528 lines
19 KiB
YAML
528 lines
19 KiB
YAML
heat_template_version: ocata
|
|
description: 'OpenStack cinder storage configured by Puppet'
|
|
parameters:
|
|
BlockStorageImage:
|
|
default: overcloud-full
|
|
type: string
|
|
constraints:
|
|
- custom_constraint: glance.image
|
|
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
|
|
OvercloudBlockStorageFlavor:
|
|
description: Flavor for block storage nodes to request when deploying.
|
|
type: string
|
|
default: baremetal
|
|
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
|
|
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
|
|
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: 'localdomain'
|
|
type: string
|
|
description: >
|
|
The DNS domain used for the hosts. This should match the dhcp_domain
|
|
configured in the Undercloud neutron. Defaults to localdomain.
|
|
BlockStorageServerMetadata:
|
|
default: {}
|
|
description: >
|
|
Extra properties or metadata passed to Nova for the created nodes in
|
|
the overcloud. It's accessible via the Nova metadata API. This option is
|
|
role-specific and is merged with the values given to the ServerMetadata
|
|
parameter.
|
|
type: json
|
|
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. This applies to
|
|
all roles and is merged with a role-specific metadata parameter.
|
|
type: json
|
|
BlockStorageSchedulerHints:
|
|
type: json
|
|
description: Optional scheduler hints to pass to nova
|
|
default: {}
|
|
NodeIndex:
|
|
type: number
|
|
default: 0
|
|
ServiceConfigSettings:
|
|
type: json
|
|
default: {}
|
|
ServiceNames:
|
|
type: comma_delimited_list
|
|
default: []
|
|
MonitoringSubscriptions:
|
|
type: comma_delimited_list
|
|
default: []
|
|
ServiceMetadataSettings:
|
|
type: json
|
|
default: {}
|
|
ConfigCommand:
|
|
type: string
|
|
description: Command which will be run whenever configuration data changes
|
|
default: os-refresh-config --timeout 14400
|
|
UpgradeInitCommand:
|
|
type: string
|
|
description: |
|
|
Command or script snippet to run on all overcloud nodes to
|
|
initialize the upgrade process. E.g. a repository switch.
|
|
default: ''
|
|
UpgradeInitCommonCommand:
|
|
type: string
|
|
description: |
|
|
Common commands required by the upgrades process. This should not
|
|
normally be modified by the operator and is set and unset in the
|
|
major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
|
|
environment files.
|
|
default: ''
|
|
|
|
resources:
|
|
BlockStorage:
|
|
type: OS::TripleO::Server
|
|
metadata:
|
|
os-collect-config:
|
|
command: {get_param: ConfigCommand}
|
|
properties:
|
|
image:
|
|
{get_param: BlockStorageImage}
|
|
flavor: {get_param: OvercloudBlockStorageFlavor}
|
|
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:
|
|
map_merge:
|
|
- {get_param: ServerMetadata}
|
|
- {get_param: BlockStorageServerMetadata}
|
|
- {get_param: ServiceMetadataSettings}
|
|
scheduler_hints: {get_param: BlockStorageSchedulerHints}
|
|
|
|
# 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
|
|
- config: {get_resource: RoleUserData}
|
|
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
|
|
|
|
# For optional operator role-specific userdata
|
|
# Should return a OS::Heat::MultipartMime reference via OS::stack_id
|
|
RoleUserData:
|
|
type: OS::TripleO::BlockStorage::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]}
|
|
ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
|
|
ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
|
|
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
|
|
InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
|
|
InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
|
|
StorageIp: {get_attr: [StoragePort, ip_address]}
|
|
StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
|
|
StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
|
|
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
|
|
StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
|
|
StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
|
|
TenantIp: {get_attr: [TenantPort, ip_address]}
|
|
TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
|
|
TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
|
|
ManagementIp: {get_attr: [ManagementPort, ip_address]}
|
|
ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
|
|
ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
|
|
|
|
NetHostMap:
|
|
type: OS::Heat::Value
|
|
properties:
|
|
type: json
|
|
value:
|
|
external:
|
|
fqdn:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- external
|
|
- {get_param: CloudDomain}
|
|
short:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- external
|
|
internal_api:
|
|
fqdn:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- internalapi
|
|
- {get_param: CloudDomain}
|
|
short:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- internalapi
|
|
storage:
|
|
fqdn:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- storage
|
|
- {get_param: CloudDomain}
|
|
short:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- storage
|
|
storage_mgmt:
|
|
fqdn:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- storagemgmt
|
|
- {get_param: CloudDomain}
|
|
short:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- storagemgmt
|
|
tenant:
|
|
fqdn:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- tenant
|
|
- {get_param: CloudDomain}
|
|
short:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- tenant
|
|
management:
|
|
fqdn:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- management
|
|
- {get_param: CloudDomain}
|
|
short:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- management
|
|
ctlplane:
|
|
fqdn:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- ctlplane
|
|
- {get_param: CloudDomain}
|
|
short:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [BlockStorage, name]}
|
|
- ctlplane
|
|
|
|
PreNetworkConfig:
|
|
type: OS::TripleO::BlockStorage::PreNetworkConfig
|
|
properties:
|
|
server: {get_resource: BlockStorage}
|
|
|
|
NetworkDeployment:
|
|
type: OS::TripleO::SoftwareDeployment
|
|
depends_on: PreNetworkConfig
|
|
properties:
|
|
name: NetworkDeployment
|
|
config: {get_resource: NetworkConfig}
|
|
server: {get_resource: BlockStorage}
|
|
actions: {get_param: NetworkDeploymentActions}
|
|
|
|
BlockStorageUpgradeInitConfig:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
config:
|
|
list_join:
|
|
- ''
|
|
- - "#!/bin/bash\n\n"
|
|
- "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
|
|
- get_param: UpgradeInitCommand
|
|
- get_param: UpgradeInitCommonCommand
|
|
|
|
# Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
|
|
# but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
|
|
BlockStorageUpgradeInitDeployment:
|
|
type: OS::Heat::SoftwareDeployment
|
|
depends_on: NetworkDeployment
|
|
properties:
|
|
name: BlockStorageUpgradeInitDeployment
|
|
server: {get_resource: BlockStorage}
|
|
config: {get_resource: BlockStorageUpgradeInitConfig}
|
|
|
|
BlockStorageDeployment:
|
|
type: OS::Heat::StructuredDeployment
|
|
depends_on: BlockStorageUpgradeInitDeployment
|
|
properties:
|
|
name: BlockStorageDeployment
|
|
server: {get_resource: BlockStorage}
|
|
config: {get_resource: BlockStorageConfig}
|
|
input_values:
|
|
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
|
|
|
|
# Map heat metadata into hiera datafiles
|
|
BlockStorageConfig:
|
|
type: OS::Heat::StructuredConfig
|
|
properties:
|
|
group: hiera
|
|
config:
|
|
hierarchy:
|
|
- '"%{::uuid}"'
|
|
- heat_config_%{::deploy_config_name}
|
|
- volume_extraconfig
|
|
- extraconfig
|
|
- service_names
|
|
- service_configs
|
|
- volume
|
|
- bootstrap_node # provided by allNodesConfig
|
|
- all_nodes # provided by allNodesConfig
|
|
- vip_data # provided by allNodesConfig
|
|
- '"%{::osfamily}"'
|
|
merge_behavior: deeper
|
|
datafiles:
|
|
service_names:
|
|
service_names: {get_param: ServiceNames}
|
|
sensu::subscriptions: {get_param: MonitoringSubscriptions}
|
|
service_configs:
|
|
map_replace:
|
|
- {get_param: ServiceConfigSettings}
|
|
- values: {get_attr: [NetIpMap, net_ip_map]}
|
|
volume_extraconfig: {get_param: BlockStorageExtraConfig}
|
|
extraconfig: {get_param: ExtraConfig}
|
|
volume:
|
|
tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
|
|
fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
|
|
fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
|
|
fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
|
|
fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
|
|
fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
|
|
fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
|
|
|
|
# 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:
|
|
ip_address:
|
|
description: IP address of the server in the ctlplane network
|
|
value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
hostname:
|
|
description: Hostname of the server
|
|
value: {get_attr: [BlockStorage, name]}
|
|
hostname_map:
|
|
description: Mapping of network names to hostnames
|
|
value:
|
|
external: {get_attr: [NetHostMap, value, external, fqdn]}
|
|
internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
|
|
storage: {get_attr: [NetHostMap, value, storage, fqdn]}
|
|
storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
|
|
tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
|
|
management: {get_attr: [NetHostMap, value, management, fqdn]}
|
|
ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
|
|
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
|
|
CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
|
|
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: {get_attr: [NetHostMap, value, external, short]}
|
|
INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
|
|
INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
|
|
STORAGEIP: {get_attr: [StoragePort, ip_address]}
|
|
STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
|
|
STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
|
|
STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
|
|
TENANTIP: {get_attr: [TenantPort, ip_address]}
|
|
TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
|
|
MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
|
|
MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
|
|
CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
|
|
CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
|
|
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]}
|