---
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
#
# These Ansible tasks only run on the client machine where Muchos runs
# At a high level, the various sections in this file do the following:
# 1. Create (if not already existing): an Azure resource group, virtual network / subnet
# 2. Optionally (if the user specified) create a VM and related resources to use as a proxy host
# 3. Create the Azure VMSS to support the nodes for use with Muchos
# 4. Automatically populate the hosts file and associated [nodes] section in muchos.props
#
# SECTION 2: Optionally create a VM with a public IP which can act as a proxy host
#
- name: Create public IP address
  azure_rm_publicipaddress:
    resource_group: "{{ resource_group }}"
    allocation_method: Static
    name: "{{ azure_proxy_host }}-ip"
  register: azure_proxy_public_ip
  when: azure_proxy_host is defined and azure_proxy_host and azure_proxy_host != None

- name: Create Network Security Group that allows SSH
  azure_rm_securitygroup:
    resource_group: "{{ resource_group }}"
    name: "{{ azure_proxy_host }}-nsg"
    rules:
      - name: SSH
        protocol: Tcp
        destination_port_range: 22
        access: Allow
        priority: 1001
        direction: Inbound
  when: azure_proxy_host is defined and azure_proxy_host and azure_proxy_host != None

- name: Create NIC
  azure_rm_networkinterface:
    resource_group: "{{ resource_group }}"
    name: "{{ azure_proxy_host }}-nic"
    virtual_network: "{{ vnet }}"
    subnet_name: "{{ subnet }}"
    ip_configurations:
      - name: default
        public_ip_address_name: "{{ azure_proxy_host }}-ip"
        primary: True
    security_group: "{{ azure_proxy_host }}-nsg"
    enable_accelerated_networking: "{{ True if azure_proxy_host_vm_sku in accnet_capable_skus else False }}"
  when: azure_proxy_host is defined and azure_proxy_host and azure_proxy_host != None

- name: Create azure proxy virtual machine
  vars:
    azure_proxy_image_plan_name: "{{ azure_proxy_image_plan.split('|')[0] }}"
    azure_proxy_image_plan_dict:
      name: "{{ azure_proxy_image_plan.split('|')[0] }}"
      product: "{{ azure_proxy_image_plan.split('|')[1] }}"
      publisher: "{{ azure_proxy_image_plan.split('|')[2] }}"
    image_offer: "{{ azure_proxy_image_reference.split('|')[0] }}"
    image_publisher: "{{ azure_proxy_image_reference.split('|')[1] }}"
    image_sku: "{{ azure_proxy_image_reference.split('|')[2] }}"
    image_version: "{{ azure_proxy_image_reference.split('|')[3] }}"
    image_id: "{{ azure_proxy_image_reference.split('|')[4] }}"
    osdisk_sku: "{{ 'Premium_LRS' if azure_proxy_host_vm_sku in premiumio_capable_skus else 'Standard_LRS' }}"
  azure_rm_virtualmachine:
    resource_group: "{{ resource_group }}"
    name: "{{ azure_proxy_host }}"
    network_interface_names:
      - "{{ azure_proxy_host }}-nic"
    vm_size: "{{ azure_proxy_host_vm_sku }}"
    admin_username: "{{ cluster_user }}"
    ssh_password_enabled: false
    ssh_public_keys:
      - path: /home/{{ cluster_user }}/.ssh/authorized_keys
        key_data: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
    os_disk_size_gb: "{{ os_disk_size_gb if os_disk_size_gb else omit }}"
    os_disk_caching: ReadWrite
    image:
      offer: "{{ image_offer if image_offer else omit }}"
      publisher: "{{ image_publisher if image_publisher else omit }}"
      sku: "{{ image_sku if image_sku else omit }}"
      version: "{{ image_version if image_version else omit }}"
      id: "{{ image_id if image_id else omit }}"
    plan: "{{ azure_proxy_image_plan_dict if azure_proxy_image_plan_name else omit }}"
    managed_disk_type: "{{ osdisk_sku }}"
    data_disks:
      - lun: 0
        disk_size_gb: 64
        managed_disk_type: "{{ data_disk_sku }}"
    custom_data: "{{ lookup('file', azure_proxy_image_cloud_init_file) if azure_proxy_image_cloud_init_file }}"
  when: azure_proxy_host is defined and azure_proxy_host and azure_proxy_host != None
