heat_template_version: 2013-05-23

description: nested heat template that creates a PCRF OAM node stack

parameters:
  pcrf_oam_server_name:
    type: string
    label: PCRF OAM server name
    description: PCRF OAM server name
  pcrf_oam_image_name:
    type: string
    label: image name
    description: PCRF OAM image name
  pcrf_oam_flavor_name:
    type: string
    label: PCRF OAM flavor name
    description: flavor name of PCRF OAM instance
  availabilityzone_name:
    type: string
    label: availabilityzone name
    description: availabilityzone name
  pcrf_cps_net_name:
    type: string
    label: CPS network name
    description: CPS network name
  pcrf_cps_net_ip:
    type: string
    label: CPS network ip
    description: CPS network ip
  pcrf_cps_net_mask:
    type: string
    label: CPS network mask
    description: CPS network mask
  pcrf_arbiter_vip:
    type: string
    label: OAM Arbiter LB VIP
    description: OAM Arbiter LB VIP
  pcrf_oam_net_name:
    type: string
    label: OAM network name
    description: OAM network name
  pcrf_oam_net_ip:
    type: string
    label: OAM network ip
    description: OAM network ip
  pcrf_oam_net_gw:
    type: string
    label: CPS network gateway
    description: CPS network gateway
  pcrf_oam_net_mask:
    type: string
    label: CPS network mask
    description: CPS network mask
  pcrf_oam_volume_id:
    type: string
    label: CPS OAM Cinder Volume
    description: CPS OAM Cinder Volume
  pcrf_security_group_name:
    type: string
    label: security group name
    description: the name of security group
  pcrf_vnf_id:
    type: string
    label: PCRF VNF Id
    description: PCRF VNF Id

resources:
  network:
    type: OS::Heat::CloudConfig
    properties:
      cloud_config:
        write_files:
          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
            permissions: "0644"
            content:
              str_replace:
                template: { get_file: nimbus-ethernet }
                params:
                  $dev: eth0
                  $ip: { get_param: pcrf_cps_net_ip }
                  $netmask: { get_param: pcrf_cps_net_mask }
          - path: /etc/sysconfig/network-scripts/ifcfg-eth1
            permissions: "0644"
            content:
              str_replace:
                template: { get_file: nimbus-ethernet-gw }
                params:
                  $dev: eth1
                  $ip: { get_param: pcrf_oam_net_ip }
                  $netmask: { get_param: pcrf_oam_net_mask }
                  $gateway: { get_param: pcrf_oam_net_gw }
        runcmd:
          - ifdown eth0 && ifup eth0
          - ifdown eth1 && ifup eth1
  script_init:
    type: OS::Heat::SoftwareConfig
    properties:
      group: ungrouped
      config:
        str_replace:
          template: { get_file: cloud-nimbus.sh }
          params:
            $vm_name: { get_param: pcrf_oam_server_name }
  pcrf_server_init:
    type: OS::Heat::MultipartMime
    properties:
      parts:
      - config: { get_resource: network}
      - config: { get_resource: script_init}

  pcrf_server_oam:
    type: OS::Nova::Server
    properties:
      config_drive: "True"
      name: { get_param: pcrf_oam_server_name }
      image: { get_param: pcrf_oam_image_name }
      flavor: { get_param: pcrf_oam_flavor_name }
      availability_zone: { get_param: availabilityzone_name }
      networks:
        - port: { get_resource: pcrf_oam_port_0}
        - port: { get_resource: pcrf_oam_port_1}
      user_data_format: RAW
      user_data:
        get_resource: pcrf_server_init
      metadata:
        vnf_id: {get_param: pcrf_vnf_id}
  
  pcrf_oam_port_0:
    type: OS::Neutron::Port
    properties:
      network: { get_param: pcrf_cps_net_name }
      fixed_ips:
        - ip_address: { get_param: pcrf_cps_net_ip }
      allowed_address_pairs:
        - ip_address: { get_param: pcrf_arbiter_vip }
      security_groups: [{ get_param: pcrf_security_group_name }]

  pcrf_oam_port_1:
    type: OS::Neutron::Port
    properties:
      network: { get_param: pcrf_oam_net_name }
      fixed_ips:
        - ip_address: { get_param: pcrf_oam_net_ip }
      security_groups: [{ get_param: pcrf_security_group_name }]

  pcrf_oam_vol_attachment:
    type: OS::Cinder::VolumeAttachment
    properties:
      volume_id: { get_param: pcrf_oam_volume_id }
      mountpoint: /dev/vdd
      instance_uuid: { get_resource: pcrf_server_oam }

outputs:
  pcrf_oam_vol_attachment_id:
    description: the pcrf_oam_vol_attachment_id id
    value: { get_resource: pcrf_oam_vol_attachment }