Creating an Azure Virtual Network with Ansible Playbook
Learn how to use Ansible’s Azure modules to automate the creation of a virtual network with subnets and a public IP address in Microsoft Azure Cloud.


Creating an Azure Virtual Network with Ansible Playbook
As organizations continue to adopt cloud technologies, the need for automated infrastructure provisioning and configuration management becomes more important than ever. Ansible, a popular open-source automation tool, has several modules for working with Microsoft Azure Cloud. In this article, we will explore how to use Ansible’s Azure modules to automate the creation of a virtual network with subnets and a public IP address in Microsoft Azure Cloud.
Prerequisites
To follow along with this tutorial, you will need the following:
- An Azure account with the necessary permissions to create virtual networks and subnets.
- Ansible is installed on your local machine or server.
- Azure modules for Ansible installed.
ansible-galaxy collection install azure.azcollection
Creating an Azure Virtual Network with Ansible Let’s start by creating an Ansible playbook to create a virtual network with subnets and a public IP address in Azure.
Links
- azure.azcollection.azure_rm_virtualnetwork
- azure.azcollection.azure_rm_subnet
- azure.azcollection.azure_rm_publicipaddress
The Best Resources For Ansible
Certifications
Video Course
Printed Book
eBooks
Ansible by Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps
Ansible Cookbook: A Comprehensive Guide to Unleashing the Power of Ansible via Best Practices, Troubleshooting, and Linting Rules with Luca Berton
Ansible For Windows By Examples: 50+ Automation Examples For Windows System Administrator And DevOps
Ansible For Linux by Examples: 100+ Automation Examples For Linux System Administrator and DevOps
Ansible Linux Filesystem By Examples: 40+ Automation Examples on Linux File and Directory Operation for Modern IT Infrastructure
Ansible For Security by Examples: 100+ Automation Examples to Automate Security and Verify Compliance for IT Modern Infrastructure
Ansible Tips and Tricks: 10+ Ansible Examples to Save Time and Automate More Tasks
Ansible Linux Users & Groups By Examples: 20+ Automation Examples on Linux Users and Groups Operation for Modern IT Infrastructure
Ansible For PostgreSQL by Examples: 10+ Examples To Automate Your PostgreSQL database
Ansible For Amazon Web Services AWS By Examples: 10+ Examples To Automate Your AWS Modern Infrastructure
Ansible Automation Platform By Example: A step-by-step guide for the most common user scenarios
Code
- Define Variables First. We need to define the variables that will be used throughout the playbook. Open a new file and add the following code:
---
- name: Azure Virtual Network
hosts: all
vars:
resource_group_name: "aznetwork-rg"
location: westeurope
tags:
environment: dev
department: infrastructure
network:
name: "aznetwork-vnet"
address: "10.210.0.0/16"
subnets:
- name: "aznetwork-vnet-frontend"
address: "10.210.1.0/24"
- name: "aznetwork-vnet-backend"
address: "10.210.2.0/24"
publicip:
name: "aznetwork-public-ip"
domain: aznetwork-labs
In this code, we define the following variables:
- resource_group_name: The name of the resource group where the virtual network will be created.
- location: The Azure region where the resource group will be created.
- tags: Custom tags to be added to the virtual network.
- network: The details of the virtual network, including its name, address space, and subnets.
- publicip: The details of the public IP address.
- Create Virtual Network Next.
We will use the azure_rm_virtualnetwork module to create the virtual network. Add the following task to the playbook:
- name: VNet - Create virtual network
azure.azcollection.azure_rm_virtualnetwork:
resource_group: "{{ resource_group_name }}"
name: "{{ network.name }}"
address_prefixes:
- "{{ network.address }}"
tags:
environment: "{{ tags.environment }}"
department: "{{ tags.department }}"
register: output_vmet
In this code, we use the azure_rm_virtualnetwork
module to create the virtual network with the following parameters:
resource_group
: The name of the resource group where the virtual network will be created.name
: The name of the virtual network.address_prefixes
: The address space for the virtual network.tags
: The tags to be added to the virtual network.
The register
keyword allows us to save the output of the task in a variable called output_vmet
.
- Add Subnets. Now, let’s use the
azure_rm_subnet
module to add subnets to the virtual network. Add the following tasks to the playbook:
- name: VNet - Add frontend subnet
azure.azcollection.azure_rm_subnet:
resource_group: "{{ resource_group_name }}"
name: "{{ network.subnets[0].name }}"
address_prefix: "{{ network.subnets[0].address }}"
virtual_network: "{{ network.name }}"
register: output_vnet_frontend
This is an Ansible playbook written in YAML format for creating an Azure Virtual Network. It defines variables such as the resource group name, location, and tags, as well as the network, subnet, and public IP address configurations. The playbook executes tasks such as creating the virtual network, adding frontend and backend subnets, and creating a public IP address using the Azure modules provided by the Azure Collection for Ansible. The full Ansible Playbook looks like the following:
---
- name: Azure Virtual Network
hosts: all
vars:
resource_group_name: "aznetwork-rg"
location: westeurope
tags:
environment: dev
department: infrastructure
network:
name: "aznetwork-vnet"
address: "10.210.0.0/16"
subnets:
- name: "aznetwork-vnet-frontend"
address: "10.210.1.0/24"
- name: "aznetwork-vnet-backend"
address: "10.210.2.0/24"
publicip:
name: "aznetwork-public-ip"
domain: aznetwork-labs
tasks:
- name: VNet - Create virtual network
azure.azcollection.azure_rm_virtualnetwork:
resource_group: "{{ resource_group_name }}"
name: "{{ network.name }}"
address_prefixes:
- "{{ network.address }}"
tags:
environment: "{{ tags.environment }}"
department: "{{ tags.department }}"
register: output_vmet
- name: VNet - Add frontend subnet
azure.azcollection.azure_rm_subnet:
resource_group: "{{ resource_group_name }}"
name: "{{ network.subnets[0].name }}"
address_prefix: "{{ network.subnets[0].address }}"
virtual_network: "{{ network.name }}"
register: output_vnet_frontend
- name: VNet - Add backend subnet
azure.azcollection.azure_rm_subnet:
resource_group: "{{ resource_group_name }}"
name: "{{ network.subnets[1].name }}"
address_prefix: "{{ network.subnets[1].address }}"
virtual_network: "{{ network.name }}"
register: output_vnet_backend
- name: Create a public IP address
azure.azcollection.azure_rm_publicipaddress:
resource_group: "{{ resource_group_name }}"
allocation_method: Static
name: "{{ network.publicip.name }}"
domain_name_label: "{{ network.publicip.domain }}"
sku: standard
register: output_publicip
Recap
This Ansible playbook uses the Azure Collection to create an Azure Virtual Network. The playbook includes variables for the resource group name, location, tags, network, subnet, and public IP address configurations. The tasks in the playbook include creating the virtual network, adding frontend and backend subnets, and creating a public IP address.
Subscribe to the YouTube channel, Medium, Website, Twitter, and Substack to not miss the next episode of the Ansible Pilot.Academy
Learn the Ansible automation technology with some real-life examples in my
My book Ansible By Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps
Donate
Want to keep this project going? Please donate