default: ''
description: Set to True to enable debugging on all services.
type: string
- DefaultSignalTransport:
- default: CFN_SIGNAL
- description: Transport to use for software-config signals.
- type: string
- constraints:
- - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
GlancePort:
default: "9292"
description: Glance port.
type: string
constraints:
- custom_constraint: nova.keypair
+ NeutronExternalNetworkBridge:
+ description: Name of bridge used for external network traffic.
+ type: string
+ default: 'br-ex'
NeutronBridgeMappings:
description: >
The OVS logical->physical bridge mappings to use. See the Neutron
The tunnel types for the Neutron tenant network. To specify multiple
values, use a comma separated string, like so: 'gre,vxlan'
type: string
+ NeutronTunnelIdRanges:
+ description: |
+ Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
+ of GRE tunnel IDs that are available for tenant network allocation
+ default: ["1:1000", ]
+ type: comma_delimited_list
+ NeutronVniRanges:
+ description: |
+ Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
+ of VXLAN VNI IDs that are available for tenant network allocation
+ default: ["1:1000", ]
+ type: comma_delimited_list
NeutronMechanismDrivers:
default: 'openvswitch'
description: |
default: 'False'
description: Whether to enable l3-agent HA
type: string
+ NeutronDhcpAgentsPerNetwork:
+ type: number
+ default: 3
+ description: The number of neutron dhcp agents to schedule per network
NovaPassword:
default: unset
description: The password for the nova service account, used by nova-api.
default: 'br-ex'
description: Interface where virtual ip will be assigned.
type: string
+ EnableFencing:
+ default: false
+ description: Whether to enable fencing in Pacemaker or not.
+ type: boolean
EnableGalera:
default: true
description: Whether to use Galera instead of regular MariaDB.
type: boolean
- EnablePacemaker:
- default: false
- description: If enabled services will be monitored by Pacemaker; it
- will manage VIPs as well, in place of Keepalived.
- type: boolean
ControllerEnableCephStorage:
default: false
description: Whether to deploy Ceph Storage (OSD) on the Controller
}
}
type: json
+ FencingConfig:
+ default: {}
+ description: |
+ Pacemaker fencing configuration. The JSON should have
+ the following structure:
+ {
+ "devices": [
+ {
+ "agent": "AGENT_NAME",
+ "host_mac": "HOST_MAC_ADDRESS",
+ "params": {"PARAM_NAME": "PARAM_VALUE"}
+ }
+ ]
+ }
+ For instance:
+ {
+ "devices": [
+ {
+ "agent": "fence_xvm",
+ "host_mac": "52:54:00:aa:bb:cc",
+ "params": {
+ "multicast_address": "225.0.0.12",
+ "port": "baremetal_0",
+ "manage_fw": true,
+ "manage_key_file": true,
+ "key_file": "/etc/fence_xvm.key",
+ "key_file_password": "abcdef"
+ }
+ }
+ ]
+ }
+ type: json
GlanceLogFile:
description: The filepath of the file to use for logging messages from Glance.
type: string
- custom_constraint: nova.flavor
ServiceNetMap:
default:
- NeutronLocalIp: tenant
+ NeutronTenantNetwork: tenant
CeilometerApiNetwork: internal_api
MongoDbNetwork: internal_api
CinderApiNetwork: internal_api
HeatApiNetwork: internal_api
NovaApiNetwork: internal_api
NovaMetadataNetwork: internal_api
+ NovaVncProxyNetwork: internal_api
SwiftMgmtNetwork: storage_mgmt
SwiftProxyNetwork: storage
HorizonNetwork: internal_api
RabbitMqNetwork: internal_api
RedisNetwork: internal_api
MysqlNetwork: internal_api
+ CephClusterNetwork: storage_mgmt
+ CephPublicNetwork: storage
+ ControllerHostnameResolveNetwork: internal_api
+ ComputeHostnameResolveNetwork: internal_api
+ BlockStorageHostnameResolveNetwork: internal_api
+ ObjectStorageHostnameResolveNetwork: internal_api
+ CephStorageHostnameResolveNetwork: storage
description: Mapping of service_name -> network name. Typically set
via parameter_defaults in the resource registry.
type: json
constraints:
- custom_constraint: nova.flavor
+ # Hostname format for each role
+ # Note %index% is translated into the index of the node, e.g 0/1/2 etc
+ # and %stackname% is replaced with OS::stack_name in the template below.
+ # If you want to use the heat generated names, pass '' (empty string).
+ ControllerHostnameFormat:
+ type: string
+ description: Format for Controller node hostnames
+ default: '%stackname%-controller-%index%'
+ ComputeHostnameFormat:
+ type: string
+ description: Format for Compute node hostnames
+ default: '%stackname%-novacompute-%index%'
+ BlockStorageHostnameFormat:
+ type: string
+ description: Format for BlockStorage node hostnames
+ default: '%stackname%-blockstorage-%index%'
+ ObjectStorageHostnameFormat:
+ type: string
+ description: Format for SwiftStorage node hostnames
+ default: '%stackname%-objectstorage-%index%'
+ CephStorageHostnameFormat:
+ type: string
+ description: Format for CephStorage node hostnames
+ default: '%stackname%-cephstorage-%index%'
+
+ # Identifiers to trigger tasks on nodes
+ UpdateIdentifier:
+ default: ''
+ type: string
+ description: >
+ Setting to a previously unused value during stack-update will trigger
+ package update on all nodes
+
+ # If you want to remove a specific node from a resource group, you can pass
+ # the node name or id as a <Group>RemovalPolicies parameter, for example:
+ # ComputeRemovalPolicies: [{'resource_list': ['0']}]
+ ControllerRemovalPolicies:
+ default: []
+ type: json
+ description: >
+ List of resources to be removed from ControllerResourceGroup when
+ doing an update which requires removal of specific resources.
+ ComputeRemovalPolicies:
+ default: []
+ type: json
+ description: >
+ List of resources to be removed from ComputeResourceGroup when
+ doing an update which requires removal of specific resources.
+ BlockStorageRemovalPolicies:
+ default: []
+ type: json
+ description: >
+ List of resources to be removed from BlockStorageResourceGroup when
+ doing an update which requires removal of specific resources.
+ ObjectStorageRemovalPolicies:
+ default: []
+ type: json
+ description: >
+ List of resources to be removed from ObjectStorageResourceGroup when
+ doing an update which requires removal of specific resources.
+ CephStorageRemovalPolicies:
+ default: []
+ type: json
+ description: >
+ List of resources to be removed from CephStorageResourceGroup when
+ doing an update which requires removal of specific resources.
+
+
resources:
HeatAuthEncryptionKey:
depends_on: Networks
properties:
count: {get_param: ControllerCount}
+ removal_policies: {get_param: ControllerRemovalPolicies}
resource_def:
type: OS::TripleO::Controller
properties:
ControlVirtualInterface: {get_param: ControlVirtualInterface}
ControllerExtraConfig: {get_param: controllerExtraConfig}
Debug: {get_param: Debug}
+ EnableFencing: {get_param: EnableFencing}
EnableGalera: {get_param: EnableGalera}
- EnablePacemaker: {get_param: EnablePacemaker}
EnableCephStorage: {get_param: ControllerEnableCephStorage}
EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
ExtraConfig: {get_param: ExtraConfig}
+ FencingConfig: {get_param: FencingConfig}
Flavor: {get_param: OvercloudControlFlavor}
GlancePort: {get_param: GlancePort}
GlanceProtocol: {get_param: GlanceProtocol}
NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
+ NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
NeutronPublicInterface: {get_param: NeutronPublicInterface}
NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
NeutronL3HA: {get_param: NeutronL3HA}
+ NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
NeutronNetworkType: {get_param: NeutronNetworkType}
NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
NovaPassword: {get_param: NovaPassword}
RabbitClientPort: {get_param: RabbitClientPort}
SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
+ RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
SSLCertificate: {get_param: SSLCertificate}
SSLKey: {get_param: SSLKey}
SSLCACertificate: {get_param: SSLCACertificate}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
+ UpdateIdentifier: {get_param: UpdateIdentifier}
+ Hostname:
+ str_replace:
+ template: {get_param: ControllerHostnameFormat}
+ params:
+ '%stackname%': {get_param: 'OS::stack_name'}
Compute:
type: OS::Heat::ResourceGroup
depends_on: Networks
properties:
count: {get_param: ComputeCount}
+ removal_policies: {get_param: ComputeRemovalPolicies}
resource_def:
type: OS::TripleO::Compute
properties:
SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
ServiceNetMap: {get_param: ServiceNetMap}
+ UpdateIdentifier: {get_param: UpdateIdentifier}
+ Hostname:
+ str_replace:
+ template: {get_param: ComputeHostnameFormat}
+ params:
+ '%stackname%': {get_param: 'OS::stack_name'}
BlockStorage:
type: OS::Heat::ResourceGroup
depends_on: Networks
properties:
count: {get_param: BlockStorageCount}
+ removal_policies: {get_param: BlockStorageRemovalPolicies}
resource_def:
type: OS::TripleO::BlockStorage
properties:
# Purpose of the dedicated BlockStorage nodes should be to use their local LVM
CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
CinderPassword: {get_param: CinderPassword}
- VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
KeyName: {get_param: KeyName}
Flavor: {get_param: OvercloudBlockStorageFlavor}
+ VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ GlancePort: {get_param: GlancePort}
+ GlanceProtocol: {get_param: GlanceProtocol}
+ GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
RabbitPassword: {get_param: RabbitPassword}
RabbitUserName: {get_param: RabbitUserName}
RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
RabbitClientPort: {get_param: RabbitClientPort}
NtpServer: {get_param: NtpServer}
+ UpdateIdentifier: {get_param: UpdateIdentifier}
+ Hostname:
+ str_replace:
+ template: {get_param: BlockStorageHostnameFormat}
+ params:
+ '%stackname%': {get_param: 'OS::stack_name'}
+ ServiceNetMap: {get_param: ServiceNetMap}
+ MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
ObjectStorage:
type: OS::Heat::ResourceGroup
depends_on: Networks
properties:
count: {get_param: ObjectStorageCount}
+ removal_policies: {get_param: ObjectStorageRemovalPolicies}
resource_def:
type: OS::TripleO::ObjectStorage
properties:
Image: {get_param: SwiftStorageImage}
Replicas: { get_param: SwiftReplicas}
NtpServer: {get_param: NtpServer}
+ UpdateIdentifier: {get_param: UpdateIdentifier}
+ ServiceNetMap: {get_param: ServiceNetMap}
+ Hostname:
+ str_replace:
+ template: {get_param: ObjectStorageHostnameFormat}
+ params:
+ '%stackname%': {get_param: 'OS::stack_name'}
CephStorage:
type: OS::Heat::ResourceGroup
depends_on: Networks
properties:
count: {get_param: CephStorageCount}
+ removal_policies: {get_param: CephStorageRemovalPolicies}
resource_def:
type: OS::TripleO::CephStorage
properties:
KeyName: {get_param: KeyName}
Flavor: {get_param: OvercloudCephStorageFlavor}
NtpServer: {get_param: NtpServer}
+ ServiceNetMap: {get_param: ServiceNetMap}
+ UpdateIdentifier: {get_param: UpdateIdentifier}
+ Hostname:
+ str_replace:
+ template: {get_param: CephStorageHostnameFormat}
+ params:
+ '%stackname%': {get_param: 'OS::stack_name'}
ControllerIpListMap:
type: OS::TripleO::Network::Ports::NetIpListMap
fixed_ips: {get_param: ControlFixedIPs}
replacement_policy: AUTO
+ RedisVirtualIP:
+ depends_on: Networks
+ type: OS::TripleO::Controller::Ports::RedisVipPort
+ properties:
+ ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
+ PortName: redis_virtual_ip
+ NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
+
# same as external
PublicVirtualIP:
type: OS::Neutron::Port
ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
- redis_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
+ redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
# direct configuration of Virtual IPs for each network
properties:
config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
servers: {get_attr: [Controller, attributes, nova_server_resource]}
- signal_transport: NO_SIGNAL
ControllerSwiftDeployment:
type: OS::Heat::StructuredDeployments
properties:
config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
servers: {get_attr: [Controller, attributes, nova_server_resource]}
- signal_transport: NO_SIGNAL
ObjectStorageSwiftDeployment:
type: OS::Heat::StructuredDeployments
properties:
config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
- signal_transport: NO_SIGNAL
SwiftDevicesAndProxyConfig:
type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
ceph_mon_key: {get_param: CephMonKey}
ceph_admin_key: {get_param: CephAdminKey}
ceph_mon_names: {get_attr: [Controller, hostname]}
- ceph_mon_ips: {get_attr: [Controller, ip_address]}
+ ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
ControllerClusterConfig:
type: OS::Heat::StructuredConfig
properties:
+ group: os-apply-config
config:
corosync:
nodes: {get_attr: [Controller, corosync_node]}
properties:
config: {get_resource: ControllerClusterConfig}
servers: {get_attr: [Controller, attributes, nova_server_resource]}
- signal_transport: NO_SIGNAL
ControllerAllNodesDeployment:
type: OS::Heat::StructuredDeployments
depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
properties:
servers: {get_attr: [Controller, attributes, nova_server_resource]}
+ NodeConfigIdentifiers: {get_attr: [Controller, attributes, config_identifier]}
ComputeNodesPostDeployment:
type: OS::TripleO::ComputePostDeployment
depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
properties:
servers: {get_attr: [Compute, attributes, nova_server_resource]}
+ NodeConfigIdentifiers: {get_attr: [Compute, attributes, config_identifier]}
ObjectStorageNodesPostDeployment:
type: OS::TripleO::ObjectStoragePostDeployment
depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
properties:
servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
+ NodeConfigIdentifiers: {get_attr: [ObjectStorage, attributes, config_identifier]}
+
BlockStorageNodesPostDeployment:
type: OS::TripleO::BlockStoragePostDeployment
depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
properties:
servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
+ NodeConfigIdentifiers: {get_attr: [BlockStorage, attributes, config_identifier]}
CephStorageNodesPostDeployment:
type: OS::TripleO::CephStoragePostDeployment
depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
properties:
servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
+ NodeConfigIdentifiers: {get_attr: [CephStorage, attributes, config_identifier]}
outputs:
KeystoneURL: