heat_template_version: 2013-05-23
description: 'Nova Compute'
parameters:
  AdminPassword:
    default: unset
    description: The password for the keystone admin account, used for monitoring, querying neutron etc.
    type: string
    hidden: true
  AllNodesConfig:
    type: string
    description: OS::Heat::Config to use for all nodes deployment
  CeilometerComputeAgent:
    description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
    type: string
    default: ''
    constraints:
    - allowed_values: ['', Present]
  CeilometerMeteringSecret:
    default: unset
    description: Secret shared by the ceilometer services.
    type: string
    hidden: true
  CeilometerPassword:
    default: unset
    description: The password for the ceilometer service account.
    type: string
    hidden: true
  DefaultSignalTransport:
    default: CFN_SIGNAL
    description: Transport to use for software-config signals.
    type: string
    constraints:
      - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
  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": "force_config_drive",
                  "value": "always"
                 }
                ]
             },
             {"section": "cells",
              "values":
                [{"option": "driver",
                  "value": "nova.cells.rpc_driver.CellsRPCDriver"
                 }
                ]
             }
            ]
          }
        }
    type: json
  GlanceHost:
    type: string
  GlancePort:
    default: 9292
    description: Glance port.
    type: string
  GlanceProtocol:
    default: http
    description: Protocol to use when connecting to glance, set to https for SSL.
    type: string
  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 EC2 KeyPair to enable SSH access to the instances
    type: string
    default: default
  KeystoneHost:
    type: string
  NeutronBridgeMappings:
    type: string
  NeutronEnableTunnelling:
    type: string
  NeutronFlatNetworks:
    type: string
    default: ''
    description: If set, flat networks to configure in neutron plugins.
  NeutronHost:
    type: string
  NeutronNetworkType:
    default: 'gre'
    description: The tenant network type for Neutron, either gre or vxlan.
    type: string
  NeutronNetworkVLANRanges:
    type: string
  NeutronPhysicalBridge:
    default: ''
    description: An OVS bridge to create for accessing external networks.
    type: string
  NeutronPublicInterface:
    default: ''
    description: A port to add to the NeutronPhysicalBridge.
    type: string
  NeutronTunnelTypes:
    default: 'gre'
    description: |
        The tunnel types for the Neutron tenant network. To specify multiple
        values, use a comma separated string, like so: 'gre,vxlan'
    type: string
  NeutronPublicInterfaceRawDevice:
    default: ''
    type: string
  NeutronDVR:
    default: 'False'
    type: string
  NeutronMechanismDrivers:
    default: 'openvswitch'
    description: |
        The mechanism drivers for the Neutron tenant network. To specify multiple
        values, use a comma separated string, like so: 'openvswitch,l2_population'
    type: string
  NeutronAllowL3AgentFailover:
    default: 'True'
    description: Allow automatic l3-agent failover
    type: string
  NeutronL3HA:
    default: 'False'
    description: Whether to enable l3-agent HA
    type: string
  NovaApiHost:
    type: string
  NovaComputeDriver:
    type: string
    default: libvirt.LibvirtDriver
  NovaComputeExtraConfig:
    default: {}
    description: |
      NovaCompute specific configuration to inject into the cluster. Same
      structure as ExtraConfig.
    type: json
  NovaComputeLibvirtType:
    type: string
    default: ''
  NovaImage:
    type: string
    default: overcloud-compute
  NovaPassword:
    default: unset
    description: The password for the nova service account, used by nova-api.
    type: string
    hidden: true
  NovaPublicIP:
    type: string
  NtpServer:
    type: string
    default: ''
  OvercloudComputeFlavor:
    description: Use this flavor
    type: string
    constraints:
      - custom_constraint: nova.flavor
  RabbitHost:
    type: string
  RabbitUserName:
    type: string
  RabbitPassword:
    type: string
    hidden: true
  SnmpdReadonlyUserName:
    default: ro_snmp_user
    description: The user name for SNMPd with readonly rights running on all Overcloud nodes
    type: string
  SnmpdReadonlyUserPassword:
    default: unset
    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
    type: string
    hidden: true
resources:
  NovaCompute0:
    type: OS::Nova::Server
    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
  NovaCompute0Deployment:
    type: OS::Heat::StructuredDeployment
    properties:
      signal_transport: NO_SIGNAL
      config: {get_resource: NovaComputeConfig}
      server: {get_resource: NovaCompute0}
      input_values:
        nova_compute_driver: {get_param: NovaComputeDriver}
        nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
        nova_public_ip: {get_param: NovaPublicIP}
        nova_api_host: {get_param: NovaApiHost}
        nova_password: {get_param: NovaPassword}
        ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
        ceilometer_password: {get_param: CeilometerPassword}
        ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
        snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
        snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
        glance_host: {get_param: GlanceHost}
        glance_port: {get_param: GlancePort}
        glance_protocol: {get_param: GlanceProtocol}
        keystone_host: {get_param: KeystoneHost}
        neutron_flat_networks: {get_param: NeutronFlatNetworks}
        neutron_host: {get_param: NeutronHost}
        neutron_local_ip: {get_attr: [NovaCompute0, networks, ctlplane, 0]}
        neutron_tenant_network_type: {get_param: NeutronNetworkType}
        neutron_tunnel_types: {get_param: NeutronTunnelTypes}
        neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
        neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
        neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
        neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
        neutron_public_interface: {get_param: NeutronPublicInterface}
        neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
        neutron_password: {get_param: NeutronPassword}
        neutron_agent_mode: {get_param: NeutronComputeAgentMode}
        neutron_router_distributed: {get_param: NeutronDVR}
        neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
        neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
        neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
        neutron_l3_ha: {get_param: NeutronL3HA}
        admin_password: {get_param: AdminPassword}
        rabbit_host: {get_param: RabbitHost}
        rabbit_username: {get_param: RabbitUserName}
        rabbit_password: {get_param: RabbitPassword}
        ntp_server: {get_param: NtpServer}
  NovaCompute0AllNodesDeployment:
    depends_on:
      - controller0AllNodesDeployment
      - NovaCompute0Deployment
      - NovaCompute0PassthroughSpecific
    type: OS::Heat::StructuredDeployment
    properties:
      signal_transport: {get_param: DefaultSignalTransport}
      config: {get_param: AllNodesConfig}
      server: {get_resource: NovaCompute0}
  NovaCompute0Passthrough:
    type: OS::Heat::StructuredDeployment
    properties:
      config: {get_resource: NovaComputePassthrough}
      server: {get_resource: NovaCompute0}
      signal_transport: NO_SIGNAL
      input_values:
        passthrough_config: {get_param: ExtraConfig}
  NovaCompute0PassthroughSpecific:
    depends_on: [NovaCompute0Passthrough]
    type: OS::Heat::StructuredDeployment
    properties:
      config: {get_resource: NovaComputePassthroughSpecific}
      server: {get_resource: NovaCompute0}
      signal_transport: NO_SIGNAL
      input_values:
        passthrough_config_specific: {get_param: NovaComputeExtraConfig}