# Description
# ===========
# This playbook create an Azure VM with public IP, and open 22 port for SSH

- name: Create Azure VM
  hosts: localhost
  connection: local
  
  vars:
    resource_group: vmdemo
    vm_name: testvm
    location: eastus
  collections:
    -  azure.azcollection 
  tasks:
  - name: Create a resource group
    azure_rm_resourcegroup:
      
      name: "{{ resource_group }}"
      location: "{{ location }}"
  - name: Create virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group }}"
      name: "{{ vm_name }}"
      address_prefixes: "10.0.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vm_name }}"
      address_prefix: "10.0.1.0/24"
      virtual_network: "{{ vm_name }}"
  - name: Create public IP address
    azure_rm_publicipaddress:
      resource_group: "{{ resource_group }}"
      allocation_method: Static
      name: "{{ vm_name }}"
  - name: Create Network Security Group that allows SSH
    azure_rm_securitygroup:
      resource_group: "{{ resource_group }}"
      name: "{{ vm_name }}"
      rules:
        - name: SSH
          protocol: Tcp
          destination_port_range: 22
          access: Allow
          priority: 1001
          direction: Inbound
  - name: Create virtual network inteface card
    azure_rm_networkinterface:
      resource_group: "{{ resource_group }}"
      name: "{{ vm_name }}"
      virtual_network: "{{ vm_name }}"
      subnet: "{{ vm_name }}"
      public_ip_name: "{{ vm_name }}"
      security_group: "{{ vm_name }}"
  - name: Create VM
    azure_rm_virtualmachine:
      resource_group: "{{ resource_group }}"
      name: "{{ vm_name }}"
      vm_size: Standard_DS1_v2
      admin_username: azureuser
      admin_password: Password@123
      network_interfaces: "{{ vm_name }}"
      image:
        offer: RHEL
        publisher: RedHat
        sku: 7-LVM
        version: latest