heat_template_version: 2015-10-15

description: |
  App server that is a member of Neutron Pool.

parameters:

  image:
    type: string

  flavor:
    type: string

  net:
    type: string

  sec_group:
    type: string

  pool_id:
    type: string

  app_port:
    type: number

  timeout:
    type: number

resources:

  config:
    type: OS::Test::WebAppConfig
    properties:
      app_port: { get_param: app_port }
      wc_curl_cli: { get_attr: [ handle, curl_cli ] }

  server:
    type: OS::Nova::Server
    properties:
      image: { get_param: image }
      flavor: { get_param: flavor }
      networks:
        - network: { get_param: net }
      security_groups:
        - { get_param: sec_group }
      user_data_format: RAW
      user_data: { get_resource: config }

  handle:
    type: OS::Heat::WaitConditionHandle

  waiter:
    type: OS::Heat::WaitCondition
    depends_on: server
    properties:
      timeout: { get_param: timeout }
      handle: { get_resource: handle }

  pool_member:
    type: OS::Neutron::PoolMember
    depends_on: waiter
    properties:
      address: { get_attr: [ server, networks, { get_param: net }, 0 ] }
      pool_id: { get_param: pool_id }
      protocol_port: { get_param: app_port }
