Integraci贸n de Ansible y Azure (parte 1)

Este post pertenece a una serie de publicaciones relacionadas:

  • Integraci贸n de Ansible y Azure - Introducci贸n
  • Integraci贸n de Ansible y Azure - Hello world!
  • Integraci贸n de Ansible y Azure - Desplegar una VM
  • En los d铆as que corren, el concepto de IaC (Insfrastructure as Code) se ha vuelto moneda corriente entre los sysadmins. Por ello, creo que es necesario hablar sobre las posibilidades que Azure nos brinda realizar las tareas de la mejor manera posible.

    Si bien existen varias alternativas para abordar el tema de considerar la 鈥渋nfraestructura como c贸digo鈥, creo que una de las herramientas que est谩 creciendo d铆a a d铆a es Ansible.

    Introducci贸n a Ansible

    Ansible es un software que cae dentro de la categor铆a Configuration Management Tools. Su uso principal radica en la posibilidad de escribir en un lenguaje declarativo la configuraci贸n que debe poseer un determinado servidor (o un grupo) en los llamados playbooks, para posteriormente asegurarse que esos servidores se encuentren configurados tal como se defini贸.

    Los playbooks estpan estructurados usando YAML (Yet Another Markup Language) y soportan el uso de variables (m谩s adelante se demostrar谩 con ejemplos).

    A diferencia de otras Configuration Management Tools como Puppet o Chef, Ansible es agent-less, lo que significa que no requiere la instalaci贸n de ning煤n software en los servidores administrados. Ansible utiliza SSH para administrar m谩quinas Linux y PowerShell (de forma remota junto a WinRM) para administrar sistemas Windows.

    Ansible incluye una suite de m贸dulos para interactuar con ARM (Azure Resource Manager), ofreciendo mejores herramientas para crear y orquestar de forma sencilla la infraestructura en Azure. Estos m贸dulos son bibliotecas de Python, debido a que Ansible est谩 completamente escrito en Python y utiliza el Azure Python SDK.

    驴C贸mo empezamos a trabajar?

    No todos los que usan Azure a diario (sin importar las tareas que realicen) conocen lo siguiente:

    Azure Cloud Shell

    Azure Cloud Shell

    Y menos a煤n, saben que dentro de la shell que proporciona Azure, se encuentra instalado Ansible por defecto. Para comprobar 茅sto, basta con ejecutar lo siguiente (y de paso vamos a saber la versi贸n que se encuentra instalada):

    ansible --version

    Ansible version

    Si desean saber que otras herramientas se encuentran disponibles en la Azure Cloud Shell, existe el siguiente enlace:

    Features & tools for Bash in Azure Cloud Shell

    Azure credentials

    Ansible se comunica con Azure usando un nombre de usuario y contrase帽a o un service principal. Un Azure service principal es una identidad de seguridad que puede ser utilizada en aplicaciones, servicios y herramientas de automatizaci贸n (como Ansible, por ejemplo). El usuario define y controla los permisos sobre qu茅 operaciones puede realizar el service principal en Azure.

    Para crear un service principal dentro de la Azure Cloud Shell se debe ejecutar:

    az ad sp create-for-rbac --query '{"client_id": appId, "secret": password, "tenant": tenant}'

    M谩s informaci贸n: az ad sp create-for-rbac

    El resultado deber铆a ser similar al siguiente:

    {
      "client_id": "eec5624a-90f8-4386-8a87-02730b5410d5",
      "secret": "531dcffa-3aff-4488-99bb-4816c395ea3f",
      "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db47"
    }

    Para autenticar contra Azure es necesario contar con el subscription ID, ejecutando el comando az account show:

    az account show --query "{ subscription_id: id }"

    Crear el archivo de credenciales para Ansible

    Para proveer de credenciales a Ansible es posible generar variables de entorno o crear un archivo local.

    Dentro de la consola vamos a ejecutar los siguientes comandos para crear el archivo de credenciales para Ansible:

    mkdir ~/.azure
    vi ~/.azure/credentials

    Para los que no tienen mucho dominio del editor de textos vi, en esta oportunidad lo 煤nico que debemos saber es que para poder ingresar valores en el nuevo archivo credentials, es necesario pulsar la tecla Insert. Para guardar los cambios y salir del editor, debemos pulsar la tecla Esc, escribir :wq y pulsar la tecla Enter.

    Ansible credentials file

    Los valores a ingresar dentro del archivo tienen que tener la siguiente forma:

    [default]
    subscription_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    client_id=eec5624a-90f8-4386-8a87-02730b5410d5
    secret=531dcffa-3aff-4488-99bb-4816c395ea3f
    tenant=72f988bf-86f1-41af-91ab-2d7cd011db47

    Que corresponden a la salida de los comandos anteriormente ejecutados (az ad sp create-for-rbac y az account show).

    Continuar谩鈥

    Happy scripting!

    Comments