Skip to content

Latest commit

 

History

History
136 lines (99 loc) · 4.41 KB

README.md

File metadata and controls

136 lines (99 loc) · 4.41 KB

Minimalistic ansible collection for managing Azure resources

There is an existing azure.azcollection, which supports a lot of different types of azure resources, includes examples and documentation.

Unforturnately, there are some problems with maintenance:

  • it is still based on the old versions of Microsoft Azure API and is having problems updating its dependencies ansible-collections/azure#477
  • does not include all resources Azures supports, especially the new ones
  • lacks support for advanced options for many resources, especially for hosting resource inside virtual private networks (relevant for my enterprise customers)
  • conflicts with official azure command line client az - it is not possible/easy to use the both on the same computer

Explanation for that: ansible-collections/azure development is not scalable. While Microsoft constantly expands and changes its API by introducing new resources and new features to existing resources, every such change requires adjustment to the implementation of these ansible modules, which is not feasible for a project driven by a couple of enthusiasts.

Heavily inspired by resource and resource_info modules of the azcollection, without the ballast of obsolete dependencies, it supports all Azure resources with the newest API and allows for a high-productivity workflow, described below.

Welcome to azbare!

Ideal workflow

For a cloud engineer productivity following workflow would be desirable:

Assuming you've already created a resource group like

az group create -g experimental-applicationdevelopment -l westeurope

Try out something with resource specific az command like

az servicebus namespace create -g experimental-applicationdevelopment \
  -n myexample-bus1 --sku Standard

The extensive documentation behind az servicebus --help helps a lot. Alternatively or optionaly you can check/edit the resource interactively via Azure Portal.

⬇️

Find out the resource id with az servicebus namespace list -o yaml | grep myexample | grep id

⬇️

Now print a generic resource definition. You can already filter out some null values with grep: az resource show -o yaml --ids /subscriptions/xxxxx-...-xxxx/resourceGroups/experimental-applicationdevelopment/providers/Microsoft.ServiceBus/namespaces/myexample-bus1 | grep -v ': null'

id: /subscriptions/xxxxx-....
location: West Europe
name: myexample-bus1
properties:
  createdAt: '2021-09-09T19:41:47.587Z'
  metricId: xxxx-8b05-xxxx-ad6d-6f43b47f438f:myexample-bus1
  provisioningState: Succeeded
  serviceBusEndpoint: https://myexample-bus1.servicebus.windows.net:443/
  status: Active
  updatedAt: '2021-09-09T19:42:32.827Z'
resourceGroup: experimental-applicationdevelopment
sku:
  name: Standard
  tier: Standard
tags: {}
type: Microsoft.ServiceBus/Namespaces

⬇️

Remove empty (null) and other not relevant parameters from the output and feed that content to the definition parameter of the new azbare.resource module to create the resource. Set group and path based on the id value.

- name: Define a service bus namespace
  geekq.azbare.resource:
    group: experimental-applicationdevelopment
    path: /providers/Microsoft.ServiceBus/namespaces/myexample-bus1
    definition:
      location: West Europe
      sku:
        name: Premium
        tier: Premium
      tags:
        env: myenv

Resource info

You can also use azbare just for getting information about existing azure resources, as a replacement for azure_rm_resource_info:

- name: Check the existing service bus
  geekq.azbare.resource:
    group: experimental-applicationdevelopment
    path: /providers/Microsoft.ServiceBus/namespaces/myexample-bus1
    state: check

returns

ok: [localhost] => changed=false 
  response:
    id: /subscriptions/xxxxx-....
    location: Germany West Central
    name: myexample-bus1
    properties:
      createdAt: '2021-09-17T11:51:53.507Z'
      metricId: xxxx:myexample-bus1
      provisioningState: Succeeded
   ...

For module documentation, see resource.py.

For more examples see tests folder.

Installation

pip install -r requirements-azure.txt
ansible-galaxy collection install [email protected]:geekq/azbare.git --force

More

See also: