Description: All-in-one baremetal OpenStack and all dependencies.
HeatTemplateFormatVersion: '2012-12-12'
Parameters:
  AdminPassword:
    Default: unset
    Description: The password for the keystone admin account, used for monitoring, querying neutron etc.
    Type: String
  AdminToken:
    Default: unset
    Description: The keystone auth secret.
    Type: String
  BaremetalArch:
    Default: i386
    Description: The architecture to use in Nova-BM - i386 or amd64.
    Type: String
  Flavor:
    Default: baremetal
    Description: Flavor to request when deploying.
    Type: String
  GlancePassword:
    Default: unset
    Description: The password for the glance service account, used by the glance services.
    Type: String
  KeyName:
    Default: default
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instances
    Type: String
  HeatPassword:
    Default: unset
    Description: The password for the Heat service account, used by the Heat services.
    Type: String
  Image:
    Default: undercloud
    Type: String
  NeutronPassword:
    Default: unset
    Description: The password for the neutron service account, used by neutron agents.
    Type: String
  NovaPassword:
    Default: unset
    Description: The password for the nova service account, used by nova-api.
    Type: String
  PowerUserName:
    Default: stack
    Description: What username to ssh to the virtual power host with.
    Type: String
Resources:
  AccessPolicy:
    Properties:
      AllowedResources:
      - notcomputeConfig
    Type: OS::Heat::AccessPolicy
  Key:
    Properties:
      UserName:
        Ref: User
    Type: AWS::IAM::AccessKey
  User:
    Properties:
      Policies:
      - Ref: AccessPolicy
    Type: AWS::IAM::User
  notcomputeConfig:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      ImageId: '0'
      InstanceType: foo
    Metadata:
      OpenStack::Heat::Stack: {}
      Openstack::ImageBuilder::Elements: [ boot-stack, heat-cfntools, neutron-network-node ]
      admin-password:
        Ref: AdminPassword
      admin-token: 
        Ref: AdminToken
      controller-address:
        Fn::GetAtt:
          - notcompute
          - first_private_address
      cinder:
        db: mysql://cinder:unset@localhost/cinder
        volume_size_mb: '5000'
      db-password: unset
      glance:
        db: mysql://glance:unset@localhost/glance
        host: 127.0.0.1
        service-password:
          Ref: GlancePassword
      heat:
        admin_password:
          Ref: HeatPassword
        admin_tenant_name: service
        admin_user: heat
        auth_encryption_key: unset___________
        db: mysql://heat:unset@localhost/heat
        heat_watch_server_url:
          Fn::Join:
            - ''
            - - http://
              - {"Fn::GetAtt": [ notcompute, first_private_address ]}
              - ":8003"
        metadata_server_url:
          Fn::Join:
            - ''
            - - http://
              - {"Fn::GetAtt": [ notcompute, first_private_address ]}
              - ":8000"
        waitcondition_server_url:
          Fn::Join:
            - ''
            - - http://
              - {"Fn::GetAtt": [ notcompute, first_private_address ]}
              - ":8000/v1/waitcondition"
      os-collect-config:
        cfn:
          access_key_id:
            Ref: Key
          path: notcomputeConfig.Metadata
          secret_access_key:
            Fn::GetAtt:
            - Key
            - SecretAccessKey
          stack_name:
            Ref: AWS::StackName
      interfaces:
        control: eth2
      keystone:
        db: mysql://keystone:unset@localhost/keystone
        host: 127.0.0.1
      nova:
        compute_hostname: ubuntu
        compute_driver: baremetal.driver.BareMetalDriver
        db: mysql://nova:unset@localhost/nova
        host: 127.0.0.1
        metadata-proxy: false
        tuning:
          ram_allocation_ratio: 1.0
          reserved_host_memory_mb: 0
        baremetal:
          arch:
            Ref: BaremetalArch
          db: mysql://nova:unset@localhost/nova_bm
          power_manager: nova.virt.baremetal.virtual_power_driver.VirtualPowerManager
          pxe_deploy_timeout: 2400
          virtual_power:
            user:
              Ref: PowerUserName
            key: /opt/stack/boot-stack/virtual-power-key
            ssh_host: 192.168.122.1
            type: virsh
        service-password:
          Ref: NovaPassword
      neutron:
        host: 127.0.0.1
        ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8
        ovs:
          dnsmasq_range: [192.0.2.25, 192.0.2.44]
          public_interface: eth0
          physical_bridge: br-ctlplane
          physical_network: ctlplane
          network_vlan_ranges: ctlplane
          bridge_mappings: ctlplane:br-ctlplane
          tenant_network_type: vlan
          enable_tunneling: 'False'
        service-password:
          Ref: NeutronPassword
      rabbit:
        host: 127.0.0.1
        password: guest
  notcompute:
    Type: OS::Nova::Server
    Properties:
      image:
        Ref: Image
      flavor:
        Ref: Flavor
      key_name:
        Ref: KeyName
    Metadata:
      os-collect-config:
        cfn:
          access_key_id:
            Ref: Key
          path: notcomputeConfig.Metadata
          secret_access_key:
            Fn::GetAtt:
            - Key
            - SecretAccessKey
          stack_name:
            Ref: AWS::StackName