7876851011
This patch optimizes how we deploy hiera by using a new heat hook specifically designed to help compose hiera within heat templates. As part of this change: - we update all the 'hiera' software configurations to set the group to hiera instead of os-apply-config. - The new format uses JSON instead of YAML. The hook actually writes out the hiera JSON directly so no conversion takes place. Arrays, Strings, Booleans all stay in their native formats. As such we can avoid having to do many of the awkward string and list conversions in t-h-t to support the previous YAML formatting. - The new hook prefers JSON over YAML so upgrading users will have the new files prefered. (we will post a cleanup routine for the old files soon but this isn't a new behavior, JSON is now simply prefered.) - A lot of services required edits to account for default settings that worked in YAML that no longer work correctly in the native JSON format. In almost all these cases I think the resulting codes looks cleaner and is more explicit with regards to what is getting configured in hiera on the actual nodes. Depends-On: I6a383b1ad4ec29458569763bd3f56fd3f2bd726b Closes-bug: #1596373 Change-Id: Ibe7e2044e200e2c947223286fdf4fd5bcf98c2e1
467 lines
16 KiB
YAML
467 lines
16 KiB
YAML
heat_template_version: 2016-10-14
|
|
|
|
description: >
|
|
OpenStack hypervisor node configured via Puppet.
|
|
|
|
parameters:
|
|
ExtraConfig:
|
|
default: {}
|
|
description: |
|
|
Additional hiera configuration to inject into the cluster. Note
|
|
that NovaComputeExtraConfig takes precedence over ExtraConfig.
|
|
type: json
|
|
OvercloudComputeFlavor:
|
|
description: Flavor for the nova compute node
|
|
default: baremetal
|
|
type: string
|
|
constraints:
|
|
- custom_constraint: nova.flavor
|
|
NovaImage:
|
|
type: string
|
|
default: overcloud-full
|
|
constraints:
|
|
- custom_constraint: glance.image
|
|
ImageUpdatePolicy:
|
|
default: 'REBUILD_PRESERVE_EPHEMERAL'
|
|
description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
|
|
type: string
|
|
KeyName:
|
|
description: Name of an existing Nova key pair to enable SSH access to the instances
|
|
type: string
|
|
default: default
|
|
constraints:
|
|
- custom_constraint: nova.keypair
|
|
NeutronPhysicalBridge:
|
|
default: 'br-ex'
|
|
description: An OVS bridge to create for accessing external networks.
|
|
type: string
|
|
NeutronPublicInterface:
|
|
default: nic1
|
|
description: A port to add to the NeutronPhysicalBridge.
|
|
type: string
|
|
NodeIndex:
|
|
type: number
|
|
default: 0
|
|
NovaComputeExtraConfig:
|
|
default: {}
|
|
description: |
|
|
NovaCompute specific configuration to inject into the cluster. Same
|
|
structure as ExtraConfig.
|
|
type: json
|
|
NovaComputeIPs:
|
|
default: {}
|
|
type: json
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
NovaComputeSchedulerHints:
|
|
type: json
|
|
description: Optional scheduler hints to pass to nova
|
|
default: {}
|
|
ServiceConfigSettings:
|
|
type: json
|
|
default: {}
|
|
ServiceNames:
|
|
type: comma_delimited_list
|
|
default: []
|
|
MonitoringSubscriptions:
|
|
type: comma_delimited_list
|
|
default: []
|
|
ConfigCommand:
|
|
type: string
|
|
description: Command which will be run whenever configuration data changes
|
|
default: os-refresh-config --timeout 14400
|
|
|
|
resources:
|
|
|
|
NovaCompute:
|
|
type: OS::TripleO::Server
|
|
metadata:
|
|
os-collect-config:
|
|
command: {get_param: ConfigCommand}
|
|
properties:
|
|
image: {get_param: NovaImage}
|
|
image_update_policy:
|
|
get_param: ImageUpdatePolicy
|
|
flavor: {get_param: OvercloudComputeFlavor}
|
|
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: NovaComputeSchedulerHints}
|
|
|
|
# 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::Compute::Ports::ExternalPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
IPPool: {get_param: NovaComputeIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
InternalApiPort:
|
|
type: OS::TripleO::Compute::Ports::InternalApiPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
IPPool: {get_param: NovaComputeIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
StoragePort:
|
|
type: OS::TripleO::Compute::Ports::StoragePort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
IPPool: {get_param: NovaComputeIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
StorageMgmtPort:
|
|
type: OS::TripleO::Compute::Ports::StorageMgmtPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
IPPool: {get_param: NovaComputeIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
TenantPort:
|
|
type: OS::TripleO::Compute::Ports::TenantPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
IPPool: {get_param: NovaComputeIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
ManagementPort:
|
|
type: OS::TripleO::Compute::Ports::ManagementPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
IPPool: {get_param: NovaComputeIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
NetIpMap:
|
|
type: OS::TripleO::Network::Ports::NetIpMap
|
|
properties:
|
|
ControlPlaneIp: {get_attr: [NovaCompute, 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]}
|
|
|
|
NetworkConfig:
|
|
type: OS::TripleO::Compute::Net::SoftwareConfig
|
|
properties:
|
|
ControlPlaneIp: {get_attr: [NovaCompute, 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]}
|
|
|
|
NetworkDeployment:
|
|
type: OS::TripleO::SoftwareDeployment
|
|
properties:
|
|
name: NetworkDeployment
|
|
config: {get_resource: NetworkConfig}
|
|
server: {get_resource: NovaCompute}
|
|
actions: {get_param: NetworkDeploymentActions}
|
|
input_values:
|
|
bridge_name: {get_param: NeutronPhysicalBridge}
|
|
interface_name: {get_param: NeutronPublicInterface}
|
|
|
|
NovaComputeConfig:
|
|
type: OS::Heat::StructuredConfig
|
|
properties:
|
|
group: hiera
|
|
config:
|
|
hierarchy:
|
|
- '"%{::uuid}"'
|
|
- heat_config_%{::deploy_config_name}
|
|
- compute_extraconfig
|
|
- extraconfig
|
|
- service_names
|
|
- service_configs
|
|
- compute
|
|
- bootstrap_node # provided by allNodesConfig
|
|
- all_nodes # provided by allNodesConfig
|
|
- vip_data # provided by allNodesConfig
|
|
- '"%{::osfamily}"'
|
|
- neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
|
|
- cisco_n1kv_data # Optionally provided by ComputeExtraConfigPre
|
|
- nova_nuage_data # Optionally provided by ComputeExtraConfigPre
|
|
- midonet_data # Optionally provided by AllNodesExtraConfig
|
|
- neutron_opencontrail_data # Optionally provided by ComputeExtraConfigPre
|
|
- cisco_aci_data # Optionally provided by ComputeExtraConfigPre
|
|
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]}
|
|
compute_extraconfig: {get_param: NovaComputeExtraConfig}
|
|
extraconfig: {get_param: ExtraConfig}
|
|
compute:
|
|
tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
|
|
|
|
NovaComputeDeployment:
|
|
type: OS::TripleO::SoftwareDeployment
|
|
depends_on: NetworkDeployment
|
|
properties:
|
|
name: NovaComputeDeployment
|
|
config: {get_resource: NovaComputeConfig}
|
|
server: {get_resource: NovaCompute}
|
|
input_values:
|
|
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
|
|
|
|
# Resource for site-specific injection of root certificate
|
|
NodeTLSCAData:
|
|
depends_on: NovaComputeDeployment
|
|
type: OS::TripleO::NodeTLSCAData
|
|
properties:
|
|
server: {get_resource: NovaCompute}
|
|
|
|
# Hook for site-specific additional pre-deployment config, e.g extra hieradata
|
|
ComputeExtraConfigPre:
|
|
depends_on: NovaComputeDeployment
|
|
type: OS::TripleO::ComputeExtraConfigPre
|
|
properties:
|
|
server: {get_resource: NovaCompute}
|
|
|
|
# Hook for site-specific additional pre-deployment config,
|
|
# applying to all nodes, e.g node registration/unregistration
|
|
NodeExtraConfig:
|
|
depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
|
|
type: OS::TripleO::NodeExtraConfig
|
|
properties:
|
|
server: {get_resource: NovaCompute}
|
|
|
|
UpdateConfig:
|
|
type: OS::TripleO::Tasks::PackageUpdate
|
|
|
|
UpdateDeployment:
|
|
type: OS::Heat::SoftwareDeployment
|
|
properties:
|
|
name: UpdateDeployment
|
|
config: {get_resource: UpdateConfig}
|
|
server: {get_resource: NovaCompute}
|
|
input_values:
|
|
update_identifier:
|
|
get_param: UpdateIdentifier
|
|
|
|
outputs:
|
|
ip_address:
|
|
description: IP address of the server in the ctlplane network
|
|
value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
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]}
|
|
hostname:
|
|
description: Hostname of the server
|
|
value: {get_attr: [NovaCompute, name]}
|
|
hostname_map:
|
|
description: Mapping of network names to hostnames
|
|
value:
|
|
external:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- external
|
|
- {get_param: CloudDomain}
|
|
internal_api:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- internalapi
|
|
- {get_param: CloudDomain}
|
|
storage:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- storage
|
|
- {get_param: CloudDomain}
|
|
storage_mgmt:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- storagemgmt
|
|
- {get_param: CloudDomain}
|
|
tenant:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- tenant
|
|
- {get_param: CloudDomain}
|
|
management:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- management
|
|
- {get_param: CloudDomain}
|
|
ctlplane:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- ctlplane
|
|
- {get_param: CloudDomain}
|
|
hosts_entry:
|
|
description: >
|
|
Server's IP address and hostname in the /etc/hosts format
|
|
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, ComputeHostnameResolveNetwork]}]}
|
|
DOMAIN: {get_param: CloudDomain}
|
|
PRIMARYHOST: {get_attr: [NovaCompute, name]}
|
|
EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
|
|
EXTERNALHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- external
|
|
INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
|
|
INTERNAL_APIHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- internalapi
|
|
STORAGEIP: {get_attr: [StoragePort, ip_address]}
|
|
STORAGEHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- storage
|
|
STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
|
|
STORAGE_MGMTHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- storagemgmt
|
|
TENANTIP: {get_attr: [TenantPort, ip_address]}
|
|
TENANTHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- tenant
|
|
MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
|
|
MANAGEMENTHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- management
|
|
CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
|
|
CTLPLANEHOST:
|
|
list_join:
|
|
- '.'
|
|
- - {get_attr: [NovaCompute, name]}
|
|
- ctlplane
|
|
nova_server_resource:
|
|
description: Heat resource handle for the Nova compute server
|
|
value:
|
|
{get_resource: NovaCompute}
|