# Copyright (c) 2022 VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

heat_template_version: 2016-10-14

parameters:
  internal_cidr:
    type: string
    default: 10.96.240.0/24
    constraints:
      - custom_constraint: net_cidr

  nameservers:
    type: comma_delimited_list

  external_cidr:
    type: string
    default: 10.96.250.0/24
    constraints:
      - custom_constraint: net_cidr

  public_network:
    type: string
    constraints:
      - custom_constraint: neutron.network

  public_key_pair:
    type: string

  image:
    type: string
    constraints:
      - custom_constraint: glance.image

  boot_from_volume:
    type: boolean
    default: false

  create_bastion_host:
    type: boolean
    default: false

  bastion_instance_type:
    type: string
    constraints:
      - custom_constraint: nova.flavor

  controller_instance_type:
    type: string
    constraints:
      - custom_constraint: nova.flavor

  compute_instance_type:
    type: string
    constraints:
      - custom_constraint: nova.flavor

  storage_instance_type:
    type: string
    constraints:
      - custom_constraint: nova.flavor

conditions:
  create_bastion_host:
    equals:
      - get_param: create_bastion_host
      - true

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

  internal_network:
    type: OS::Neutron::Net

  internal_subnet:
    type: OS::Neutron::Subnet
    properties:
      network: { get_resource: internal_network }
      cidr: { get_param: internal_cidr }
      dns_nameservers: { get_param: nameservers }

  internal_network_router_interface:
    type: OS::Neutron::RouterInterface
    properties:
      router: { get_resource: router }
      subnet: { get_resource: internal_subnet }

  internal_network_vip:
    type: OS::Neutron::Port
    properties:
      network: { get_resource: internal_network }

  internal_network_vip_floating_ip:
    type: OS::Neutron::FloatingIP
    depends_on:
      - internal_network_router_interface
    properties:
      floating_network: { get_param: public_network }
      port_id: { get_resource: internal_network_vip }

  external_network:
    type: OS::Neutron::Net

  external_subnet:
    type: OS::Neutron::Subnet
    properties:
      network: { get_resource: external_network }
      cidr: { get_param: external_cidr }
      dns_nameservers: { get_param: nameservers }
      gateway_ip: null
      allocation_pools:
        - start: 10.96.250.100
          end: 10.96.250.150

  external_network_vip:
    type: OS::Neutron::Port
    properties:
      network: { get_resource: external_network }

  key_pair:
    type: OS::Nova::KeyPair
    properties:
      name: { get_param: OS::stack_id }
      public_key: { get_param: public_key_pair }

  bastion_host:
    type: server.yaml
    condition: create_bastion_host
    depends_on:
      - internal_network_router_interface
    properties:
      name: bastion
      index: -1
      image: { get_param: image }
      instance_type: { get_param: bastion_instance_type }
      key_name: { get_resource: key_pair }
      internal_network: { get_resource: internal_network }
      public_network: { get_param: public_network }
      external_network: { get_resource: external_network }
      boot_volumes_size: 40
      boot_from_volume: { get_param: boot_from_volume  }

  controller:
    type: OS::Heat::ResourceGroup
    depends_on:
      - internal_network_router_interface
    properties:
      count: 3
      resource_def:
        type: server.yaml
        properties:
          name: ctl
          index: "%index%"
          image: { get_param: image }
          instance_type: { get_param: controller_instance_type }
          key_name: { get_resource: key_pair }
          internal_network: { get_resource: internal_network }
          public_network: { get_param: public_network }
          external_network: { get_resource: external_network }
          boot_volumes_size: 40
          boot_from_volume: { get_param: boot_from_volume  }

  storage:
    type: OS::Heat::ResourceGroup
    depends_on:
      - internal_network_router_interface
    properties:
      count: 3
      resource_def:
        type: server.yaml
        properties:
          name: nvme
          index: "%index%"
          image: { get_param: image }
          instance_type: { get_param: storage_instance_type }
          key_name: { get_resource: key_pair }
          internal_network: { get_resource: internal_network }
          public_network: { get_param: public_network }
          external_network: { get_resource: external_network }
          extra_volumes_count: 3
          extra_volumes_size: 40
          boot_volumes_size: 40
          boot_from_volume: { get_param: boot_from_volume  }

  compute:
    type: OS::Heat::ResourceGroup
    depends_on:
      - internal_network_router_interface
    properties:
      count: 2
      resource_def:
        type: server.yaml
        properties:
          name: kvm
          index: "%index%"
          image: { get_param: image }
          instance_type: { get_param: compute_instance_type }
          key_name: { get_resource: key_pair }
          internal_network: { get_resource: internal_network }
          public_network: { get_param: public_network }
          external_network: { get_resource: external_network }
          boot_volumes_size: 40
          boot_from_volume: { get_param: boot_from_volume  }

outputs:
  controller_floating_ip_addresses:
    value: { get_attr: [controller, floating_ip_address] }
  storage_floating_ip_addresses:
    value: { get_attr: [storage, floating_ip_address] }
  compute_floating_ip_addresses:
    value: { get_attr: [compute, floating_ip_address] }
