115 lines
3.6 KiB
YAML
115 lines
3.6 KiB
YAML
---
|
|
- name: Azure Webserver
|
|
hosts: localhost
|
|
connection: local
|
|
vars:
|
|
user: alex
|
|
location: northeurope
|
|
virtual_network_name: webserver_{{ user }}
|
|
subnet: Webserver
|
|
resource_group: webserver_{{ user }}
|
|
domain_sub: domain{{ user }}
|
|
ssh_public_key: "{{lookup('file', '~/.ssh/id_rsa.pub') }}"
|
|
|
|
tasks:
|
|
- name: Create a virtual network
|
|
azure.azcollection.azure_rm_virtualnetwork:
|
|
resource_group: "{{ resource_group }}"
|
|
name: "{{ virtual_network_name }}"
|
|
address_prefixes_cidr: 10.99.0.0/16
|
|
tags:
|
|
solution: webserver_{{ user }}
|
|
delete: ansibletraining
|
|
|
|
- name: Create a subnet
|
|
azure.azcollection.azure_rm_subnet:
|
|
resource_group: "{{ resource_group }}"
|
|
virtual_network_name: "{{ virtual_network_name }}"
|
|
name: "{{ subnet }}"
|
|
address_prefix_cidr: 10.99.0.0/24
|
|
|
|
- name: Create a public ip address for webserver
|
|
register: webserver_pub_ip
|
|
azure.azcollection.azure_rm_publicipaddress:
|
|
resource_group: "{{ resource_group }}"
|
|
name: public_ip_webserver
|
|
allocation_method: static
|
|
domain_name: webserver{{ domain_sub }}
|
|
tags:
|
|
solution: webserver_{{ user }}
|
|
delete: ansibletraining
|
|
|
|
- name: Create Security Group for webserver
|
|
azure.azcollection.azure_rm_securitygroup:
|
|
resource_group: "{{ resource_group }}"
|
|
name: webserver_securitygroup
|
|
purge_rules: true
|
|
rules:
|
|
- name: Allow_SSH
|
|
protocol: Tcp
|
|
destination_port_range: 22
|
|
access: Allow
|
|
priority: 100
|
|
direction: Inbound
|
|
- name: Allow_HTTP
|
|
protocol: Tcp
|
|
destination_port_range: 80
|
|
access: Allow
|
|
priority: 101
|
|
direction: Inbound
|
|
tags:
|
|
solution: webserver_{{ user }}
|
|
delete: ansibletraining
|
|
|
|
- name: Create a network interface for webserver
|
|
azure.azcollection.azure_rm_networkinterface:
|
|
name: webserver_nic01
|
|
resource_group: "{{ resource_group }}"
|
|
virtual_network: "{{ virtual_network_name }}"
|
|
subnet_name: "{{ subnet }}"
|
|
security_group: webserver_securitygroup
|
|
ip_configurations:
|
|
- name: webserver_nic01_ipconfig
|
|
public_ip_address_name: public_ip_webserver
|
|
primary: true
|
|
tags:
|
|
solution: webserver_{{ user }}
|
|
delete: ansibletraining
|
|
|
|
- name: Create a VM webserver
|
|
azure.azcollection.azure_rm_virtualmachine:
|
|
resource_group: "{{ resource_group }}"
|
|
name: webserver
|
|
os_type: Linux
|
|
admin_username: "{{ user }}"
|
|
ssh_password_enabled: false
|
|
ssh_public_keys:
|
|
- path: /home/{{ user }}/.ssh/authorized_keys
|
|
key_data: "{{ ssh_public_key }}"
|
|
managed_disk_type: Standard_LRS
|
|
state: present
|
|
image:
|
|
offer: RHEL
|
|
publisher: RedHat
|
|
sku: "8_4"
|
|
version: latest
|
|
vm_size: Standard_A1_v2
|
|
network_interfaces: webserver_nic01
|
|
tags:
|
|
solution: webserver_{{ user }}
|
|
delete: ansibletraining
|
|
|
|
- name: Show webserver public ip
|
|
ansible.builtin.debug:
|
|
msg: "{{ webserver_pub_ip.state.ip_address }}"
|
|
|
|
- name: Wait for ssh on webserver
|
|
ansible.builtin.wait_for:
|
|
host: "{{ webserver_pub_ip.state.ip_address }}"
|
|
port: 22
|
|
delay: 10
|
|
timeout: 600
|
|
|
|
- name: Add webserver to ssh known_hosts
|
|
ansible.builtin.shell: ssh-keyscan -t ecdsa {{ webserver_pub_ip.state.ip_address }} >> /home/{{ user }}/.ssh/known_hosts
|