Description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL server,Dedicated RabbitMQ Server,Group of Nova Computes HeatTemplateFormatVersion: '2012-12-12' Parameters: AdminPassword: Default: unset Description: The password for the keystone admin account, used for monitoring, querying neutron etc. Type: String NoEcho: true AdminToken: Default: unset Description: The keystone auth secret. Type: String NoEcho: true CinderPassword: Default: unset Description: The password for the cinder service account, used by cinder-api. Type: String NoEcho: true CinderISCSIHelper: Default: tgtadm Description: The iSCSI helper to use with cinder. Type: String ExtraConfig: Default: {} Description: | Additional configuration to inject into the cluster. The JSON should have the following structure: {"FILEKEY": {"config": [{"section": "SECTIONNAME", "values": [{"option": "OPTIONNAME", "value": "VALUENAME" } ] } ] } } For instance: {"nova": {"config": [{"section": "default", "values": [{"option": "compute_manager", "value": "ironic.nova.compute.manager.ClusterComputeManager" } ] }, {"section": "cells", "values": [{"option": "driver", "value": "nova.cells.rpc_driver.CellsRPCDriver" } ] } ] } } Type: Json OvercloudControlFlavor: Default: baremetal Description: Flavor for control nodes to request when deploying. Type: String OvercloudComputeFlavor: Default: baremetal Description: Flavor for compute nodes to request when deploying. Type: String GlancePassword: Default: unset Description: The password for the glance service account, used by the glance services. Type: String NoEcho: true GlanceNotifierStrategy: Description: Strategy to use for Glance notification queue Type: String Default: noop GlanceLogFile: Description: The filepath of the file to use for logging messages from Glance. Type: String Default: '' HeatPassword: Default: unset Description: The password for the Heat service account, used by the Heat services. Type: String NoEcho: true 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: Default: default Description: Name of an existing EC2 KeyPair to enable SSH access to the instances Type: String NeutronBridgeMappings: Description: The OVS logical->physical bridge mappings to use. Type: String Default: '' NeutronPassword: Default: unset Description: The password for the neutron service account, used by neutron agents. Type: String NoEcho: true CeilometerComputeAgent: Description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly Type: String Default: '' AllowedValues: ['', Present] CeilometerMeteringSecret: Default: unset Description: Secret shared by the ceilometer services. Type: String NoEcho: true CeilometerPassword: Default: unset Description: The password for the ceilometer service account. Type: String NoEcho: true CloudName: Default: '' Description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org Type: String NovaComputeDriver: Default: libvirt.LibvirtDriver Type: String NovaComputeLibvirtType: Default: '' Type: String NovaImage: Type: String Default: overcloud-compute NovaPassword: Default: unset Description: The password for the nova service account, used by nova-api. Type: String NoEcho: true NeutronFlatNetworks: Type: String Default: '' Description: If set, flat networks to configure in neutron plugins. HypervisorNeutronPhysicalBridge: Default: '' Description: An OVS bridge to create on each hypervisor. Type: String HypervisorNeutronPublicInterface: Default: '' Description: What interface to add to the HypervisorNeutronPhysicalBridge. Type: String NeutronPublicInterface: Default: eth0 Description: What interface to bridge onto br-ex for network nodes. Type: String NeutronPublicInterfaceDefaultRoute: Default: '' Description: A custom default route for the NeutronPublicInterface. Type: String NeutronPublicInterfaceIP: Default: '' Description: A custom IP address to put onto the NeutronPublicInterface. Type: String NeutronPublicInterfaceRawDevice: Default: '' Description: If set, the public interface is a vlan with this device as the raw device. Type: String controllerImage: Type: String Default: overcloud-control NtpServer: Type: String Default: '' RabbitUserName: Default: guest Description: The username for RabbitMQ Type: String RabbitPassword: Default: guest Description: The password for RabbitMQ Type: String NoEcho: true RabbitCookieSalt: Type: String Default: unset Description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change. HeatStackDomainAdminPassword: Description: Password for heat_domain_admin user. Type: String Default: '' NoEcho: true LiveUpdateUserName: Type: String Description: The live-update username for the undercloud Glance API. Default: '' LiveUpdateTenantName: Type: String Description: The live-update tenant name for the undercloud Glance API. Default: '' LiveUpdateHost: Type: String Description: The IP address for the undercloud Glance API. Default: '' LiveUpdatePassword: Type: String Default: '' Description: The live-update password for the undercloud Glance API. NoEcho: true LiveUpdateComputeImage: Type: String Description: The image ID for live-updates to the overcloud compute nodes. Default: '' MysqlInnodbBufferPoolSize: Description: Specifies the size of the buffer pool in megabytes. Type: Number Default: 100 Resources: RabbitCookie: Type: OS::Heat::RandomString Properties: length: 20 salt: Ref: RabbitCookieSalt NovaCompute0Config: Type: FileInclude Path: nova-compute-instance.yaml SubKey: Resources.NovaCompute0Deploy Parameters: NovaApiHost: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] } KeystoneHost: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] } RabbitHost: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] } NeutronHost: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] } GlanceHost: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] } NovaDSN: {"Fn::Join": ['', ['mysql://nova:unset@', {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ]}, '/nova']]} CeilometerDSN: {"Fn::Join": ['', ['mysql://ceilometer:unset@', {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ]}, '/ceilometer']]} NeutronDSN: {"Fn::Join": ['', ['mysql://neutron:unset@', {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ]}, '/neutron']]} NeutronNetworkType: "gre" NeutronEnableTunnelling: "True" NeutronFlatNetworks: Ref: NeutronFlatNetworks NeutronNetworkVLANRanges: "" NeutronPhysicalBridge: Ref: HypervisorNeutronPhysicalBridge NeutronPublicInterface: Ref: HypervisorNeutronPublicInterface NeutronBridgeMappings: Ref: NeutronBridgeMappings StaticHosts: Fn::Join: - "\n" - - Fn::Join: - "\n" - Merge::Map: NovaCompute0: Fn::Join: - ' ' - - Fn::Select: - 0 - Fn::Select: - ctlplane - Fn::GetAtt: - NovaCompute0 - networks - Fn::Select: - name - Fn::GetAtt: - NovaCompute0 - show - Fn::Join: - '.' - - Fn::Select: - name - Fn::GetAtt: - NovaCompute0 - show - 'novalocal' - Fn::Join: - ' ' - - Fn::Select: - 0 - Fn::Select: - ctlplane - Fn::GetAtt: - controller0 - networks - {Ref: CloudName} # If CloudName is unset, make the hosts line still valid - unused NovaCompute0Passthrough: Type: OS::Heat::StructuredDeployment Properties: config: {Ref: NovaComputePassthrough} server: {Ref: NovaCompute0} signal_transport: NO_SIGNAL input_values: passthrough_config: {Ref: ExtraConfig} NovaCompute0: Type: FileInclude Path: nova-compute-instance.yaml SubKey: Resources.NovaCompute0 controllerConfig: Type: OS::Heat::StructuredConfig Properties: config: completion-signal: {get_input: deploy_signal_id} admin-password: Ref: AdminPassword admin-token: Ref: AdminToken bootstack: public_interface_ip: Ref: NeutronPublicInterfaceIP cinder: db: mysql://cinder:unset@localhost/cinder volume_size_mb: '5000' service-password: Ref: CinderPassword iscsi-helper: Ref: CinderISCSIHelper controller-address: get_input: controller_host db-password: unset glance: backend: swift db: mysql://glance:unset@localhost/glance host: get_input: controller_host service-password: Ref: GlancePassword swift-store-user: service:glance swift-store-key: Ref: GlancePassword notifier-strategy: Ref: GlanceNotifierStrategy log-file: Ref: GlanceLogFile heat: admin_password: Ref: HeatPassword admin_tenant_name: service admin_user: heat auth_encryption_key: unset___________ db: mysql://heat:unset@localhost/heat stack_domain_admin_password: {Ref: HeatStackDomainAdminPassword} watch_server_url: {get_input: heat.watch_server_url} metadata_server_url: {get_input: heat.metadata_server_url} waitcondition_server_url: {get_input: heat.waitcondition_server_url} hosts: {get_input: hosts} keystone: db: mysql://keystone:unset@localhost/keystone host: get_input: controller_host mysql: innodb_buffer_pool_size: {Ref: MysqlInnodbBufferPoolSize} neutron: flat-networks: {Ref: NeutronFlatNetworks} host: get_input: controller_host metadata_proxy_shared_secret: unset ovs: enable_tunneling: 'True' local_ip: get_input: controller_host bridge_mappings: {Ref: NeutronBridgeMappings} public_interface: Ref: NeutronPublicInterface public_interface_raw_device: Ref: NeutronPublicInterfaceRawDevice public_interface_route: Ref: NeutronPublicInterfaceDefaultRoute physical_bridge: br-ex tenant_network_type: gre ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8 service-password: Ref: NeutronPassword ceilometer: db: mysql://ceilometer:unset@localhost/ceilometer metering_secret: {Ref: CeilometerMeteringSecret} service-password: Ref: CeilometerPassword nova: compute_driver: libvirt.LibvirtDriver db: mysql://nova:unset@localhost/nova default_floating_pool: ext-net host: get_input: controller_host metadata-proxy: true service-password: Ref: NovaPassword rabbit: host: get_input: controller_host username: Ref: RabbitUserName password: Ref: RabbitPassword cookie: Fn::GetAtt: - RabbitCookie - value ntp: servers: - {server: {Ref: NtpServer}, fudge: "stratum 0"} controllerPassthrough: Type: OS::Heat::StructuredConfig Properties: config: {get_input: passthrough_config} controller0: Type: OS::Nova::Server Properties: image: Ref: controllerImage image_update_policy: Ref: ImageUpdatePolicy flavor: Ref: OvercloudControlFlavor key_name: Ref: KeyName user_data_format: SOFTWARE_CONFIG controller0Deployment: Type: OS::Heat::StructuredDeployment Properties: config: {Ref: controllerConfig} server: {Ref: controller0} input_values: controller_host: Fn::Select: - 0 - Fn::Select: - ctlplane - Fn::GetAtt: - controller0 - networks heat.watch_server_url: Fn::Join: - '' - - 'http://' - {"Fn::Select": [ 0, "Fn::Select": [ ctlplane, { "Fn::GetAtt": [ controller0, networks ]}]]} - ':8003' heat.metadata_server_url: Fn::Join: - '' - - 'http://' - {"Fn::Select": [ 0, "Fn::Select": [ ctlplane, { "Fn::GetAtt": [ controller0, networks ]}]]} - ':8000' heat.waitcondition_server_url: Fn::Join: - '' - - 'http://' - {"Fn::Select": [ 0, "Fn::Select": [ ctlplane, { "Fn::GetAtt": [ controller0, networks ]}]]} - ':8000/v1/waitcondition' hosts: Fn::Join: - ' ' - - {"Fn::Select": [ 0, "Fn::Select": [ ctlplane, { "Fn::GetAtt": [ controller0, networks ]}]]} - {Ref: CloudName} controller0SSLDeployment: Type: OS::Heat::StructuredDeployment Properties: config: {Ref: SSLConfig} server: {Ref: controller0} signal_transport: NO_SIGNAL input_values: ssl_certificate: {Ref: SSLCertificate} ssl_key: {Ref: SSLKey} controller0Passthrough: Type: OS::Heat::StructuredDeployment Properties: config: {Ref: controllerPassthrough} server: {Ref: controller0} signal_transport: NO_SIGNAL input_values: passthrough_config: {Ref: ExtraConfig} Outputs: KeystoneURL: Description: URL for the Overcloud Keystone service Value: Fn::Join: - '' - - http:// - Fn::Select: - 0 - Fn::Select: - ctlplane - Fn::GetAtt: - controller0 - networks - :5000/v2.0/