heat_template_version: 2015-10-15
description: ONAP on Kubernetes using OOM

parameters:
  docker_proxy:
    type: string

  apt_proxy:
    type: string

  public_net_id:
    type: string
    description: The ID of the Public network for floating IP address allocation

  oam_network_cidr:
    type: string
    description: CIDR of the OAM ONAP network

  ubuntu_1604_image:
    type: string
    description: Name of the Ubuntu 16.04 image

  rancher_vm_flavor:
    type: string
    description: VM flavor for Rancher

  k8s_vm_flavor:
    type: string
    description: VM flavor for k8s hosts

  integration_override_yaml:
    type: string
    description: Content for integration_override.yaml

  integration_gerrit_branch:
    type: string
    default: "master"

  integration_gerrit_refspec:
    type: string
    default: "refs/heads/master"

  oom_gerrit_branch:
    type: string
    default: "master"

  oom_gerrit_refspec:
    type: string
    default: "refs/heads/master"

  docker_manifest:
    type: string
    default: ""

  key_name:
    type: string
    default: "onap_key"

  docker_version:
    type: string
    default: "17.03"

  rancher_version:
    type: string
    default: "1.6.18"

  rancher_agent_version:
    type: string
    default: "1.2.10"

  kubectl_version:
    type: string
    default: "1.8.10"

  helm_version:
    type: string
    default: "2.9.1"

resources:
  random-str:
    type: OS::Heat::RandomString
    properties:
      length: 4

  # ONAP security group
  onap_sg:
    type: OS::Neutron::SecurityGroup
    properties:
      name:
        str_replace:
          template: base_rand
          params:
            base: onap_sg
            rand: { get_resource: random-str }
      description: security group used by ONAP
      rules:
        # All egress traffic
        - direction: egress
          ethertype: IPv4
        - direction: egress
          ethertype: IPv6
        # ingress traffic
        # ICMP
        - protocol: icmp
        - protocol: udp
          port_range_min: 1
          port_range_max: 65535
        - protocol: tcp
          port_range_min: 1
          port_range_max: 65535


  # ONAP management private network
  oam_network:
    type: OS::Neutron::Net
    properties:
      name:
        str_replace:
          template: oam_network_rand
          params:
            rand: { get_resource: random-str }

  oam_subnet:
    type: OS::Neutron::Subnet
    properties:
      name:
        str_replace:
          template: oam_network_rand
          params:
            rand: { get_resource: random-str }
      network_id: { get_resource: oam_network }
      cidr: { get_param: oam_network_cidr }
      dns_nameservers: [ "8.8.8.8" ]

  router:
    type: OS::Neutron::Router
    properties:
      external_gateway_info:
        network: { get_param: public_net_id }

  router_interface:
    type: OS::Neutron::RouterInterface
    properties:
      router_id: { get_resource: router }
      subnet_id: { get_resource: oam_subnet }

  rancher_private_port:
    type: OS::Neutron::Port
    properties:
      network: { get_resource: oam_network }
      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
      security_groups:
      - { get_resource: onap_sg }

  rancher_floating_ip:
    type: OS::Neutron::FloatingIP
    properties:
      floating_network_id: { get_param: public_net_id }
      port_id: { get_resource: rancher_private_port }