---
#
# 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
  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_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 }}"
    managed_disk_type: "{{ osdisk_sku }}"
    data_disks:
     - lun: 0
       disk_size_gb: 64
       managed_disk_type: "{{ data_disk_sku }}"
    custom_data: "{{ lookup('file', 'cloud-init.yml') }}"
  vars:
  - 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] }}"
  - osdisk_sku: "{{ 'Premium_LRS' if azure_proxy_host_vm_sku in premiumio_capable_skus else 'Standard_LRS' }}"
  when: azure_proxy_host is defined and azure_proxy_host and azure_proxy_host != None
