Installare e configurare Ansible per gestire le macchine virtuali in Azure

Questo articolo descrive come installare Ansible e i moduli di Azure Python SDK necessari per alcune delle distribuzioni di Linux più comuni. È possibile installare Ansible in altre distribuzioni regolando i pacchetti installati per adattarli alla piattaforma specifica. Per creare le risorse di Azure in modo sicuro, si apprenderà anche come creare e definire le credenziali da usare con Ansible.

Per altre opzioni di installazione e la procedura per altre piattaforme, vedere la guida all'installazione di Ansible.

Installare Ansible

Creare prima un gruppo di risorse con az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroupAnsible nella posizione eastus:

az group create --name myResourceGroupAnsible --location eastus

A questo punto, creare una macchina virtuale e installare Ansible per una delle distribuzioni seguenti:

Ubuntu 16.04 LTS

Creare una macchina virtuale con il comando az vm create. L'esempio seguente crea una macchina virtuale denominata myVMAnsible:

az vm create \
    --name myVMAnsible \
    --resource-group myResourceGroupAnsible \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys

SSH per la macchina virtuale con publicIpAddress indicato nell'output dall'operazione di creazione della macchina virtuale:

ssh azureuser@<publicIpAddress>

Nella macchina virtuale installare i pacchetti richiesti per i moduli di Azure Python SDK e Ansible come segue:

## Install pre-requisite packages
sudo apt-get update && sudo apt-get install -y libssl-dev libffi-dev python-dev python-pip

## Install Azure SDKs via pip
pip install "azure==2.0.0rc5" msrestazure

## Install Ansible via apt
sudo apt-get install -y software-properties-common
sudo apt-add-repository -y ppa:ansible/ansible
sudo apt-get update && sudo apt-get install -y ansible

Passare ora a Creare le credenziali di Azure.

CentOS 7.3

Creare una macchina virtuale con il comando az vm create. L'esempio seguente crea una macchina virtuale denominata myVMAnsible:

az vm create \
    --name myVMAnsible \
    --resource-group myResourceGroupAnsible \
    --image CentOS \
    --admin-username azureuser \
    --generate-ssh-keys

SSH per la macchina virtuale con publicIpAddress indicato nell'output dall'operazione di creazione della macchina virtuale:

ssh azureuser@<publicIpAddress>

Nella macchina virtuale installare i pacchetti richiesti per i moduli di Azure Python SDK e Ansible come segue:

## Install pre-requisite packages
sudo yum check-update; sudo yum install -y gcc libffi-devel python-devel openssl-devel epel-release
sudo yum install -y python-pip python-wheel

## Install Azure SDKs via pip
sudo pip install "azure==2.0.0rc5" msrestazure

## Install Ansible via yum
sudo yum install -y ansible

Passare ora a Creare le credenziali di Azure.

SLES 12.2 SP2

Creare una macchina virtuale con il comando az vm create. L'esempio seguente crea una macchina virtuale denominata myVMAnsible:

az vm create \
    --name myVMAnsible \
    --resource-group myResourceGroupAnsible \
    --image SLES \
    --admin-username azureuser \
    --generate-ssh-keys

SSH per la macchina virtuale con publicIpAddress indicato nell'output dall'operazione di creazione della macchina virtuale:

ssh azureuser@<publicIpAddress>

Nella macchina virtuale installare i pacchetti richiesti per i moduli di Azure Python SDK e Ansible come segue:

## Install pre-requisite packages
sudo zypper refresh && sudo zypper --non-interactive install gcc libffi-devel-gcc5 python-devel \
    libopenssl-devel python-pip python-setuptools python-azure-sdk

## Install Ansible via zypper
sudo zypper addrepo http://download.opensuse.org/repositories/systemsmanagement/SLE_12_SP2/systemsmanagement.repo
sudo zypper refresh && sudo zypper install ansible

Passare ora a Creare le credenziali di Azure.

Creare credenziali di Azure

Ansible comunica con Azure usando un nome utente e password o un'entità servizio. Un'entità servizio di Azure è un'identità di sicurezza che è possibile usare con le app, con i servizi e con strumenti di automazione come Ansible. Le autorizzazioni per le operazioni che l'entità servizio può eseguire in Azure vengono controllate e definite dall'utente. Per migliorare la sicurezza indicare un nome utente e password, questo esempio crea un'entità servizio di base.

Creare un'entità servizio con az ad sp create-for-rbac e generare l'output delle credenziali necessarie per Ansible:

az ad sp create-for-rbac --query [appId,password,tenant]

Ecco un esempio di output dei comandi precedenti:

[
  "eec5624a-90f8-4386-8a87-02730b5410d5",
  "531dcffa-3aff-4488-99bb-4816c395ea3f",
  "72f988bf-86f1-41af-91ab-2d7cd011db47"
]

Per eseguire l'autenticazione in Azure, è anche necessario ottenere l'ID della sottoscrizione di Azure con az account show:

az account show --query [id] --output tsv

L'output di questi due comandi verrà usato nel passaggio successivo.

Creare un file di credenziali di Ansible

Per specificare le credenziali per Ansible, definire le variabili di ambiente o creare un file di credenziali locali. Per altre informazioni su come definire le credenziali di Ansible, vedere Providing Credentials to Azure Modules (Fornire le credenziali ai moduli di Azure).

Per un ambiente di sviluppo, creare un file di credenziali per Ansible sulla macchina virtuale host come segue:

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

Il file delle credenziali combina l'ID della sottoscrizione con l'output ottenuto dalla creazione di un'entità servizio. L'output del comando az ad sp create-for-rbac precedente segue lo stesso ordine in base alle esigenze di client_id, secret e tenant. Il file delle credenziali seguente mostra questi valori che corrispodono a quelli dell'output precedente. Immettere valori personalizzati come di seguito:

[default]
subscription_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
client_id=66cf7166-dd13-40f9-bca2-3e9a43f2b3a4
secret=b8326643-f7e9-48fb-b0d5-952b68ab3def
tenant=72f988bf-86f1-41af-91ab-2d7cd011db47

Usare le variabili di ambiente di Ansible

Se si intende usare strumenti quali Ansible Tower o Jenkins, è possibile definire variabili di ambiente come indicato di seguito. Queste variabili combinano l'ID della sottoscrizione con l'output della creazione di un'entità servizio. L'output del comando az ad sp create-for-rbac precedente segue lo stesso ordine in base alle esigenze di AZURE_CLIENT_ID, AZURE_SECRET e AZURE_TENANT.

export AZURE_SUBSCRIPTION_ID=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export AZURE_CLIENT_ID=66cf7166-dd13-40f9-bca2-3e9a43f2b3a4
export AZURE_SECRET=8326643-f7e9-48fb-b0d5-952b68ab3def
export AZURE_TENANT=72f988bf-86f1-41af-91ab-2d7cd011db47

Passaggi successivi

A questo punto Ansible e i moduli necessari di Azure Python SDK sono stati installati e sono state definite le credenziali che Ansible dovrà usare. Informazioni su come creare una macchina virtuale con Ansible. È anche possibile capire come creare una macchina virtuale di Azure completa e le risorse di supporto con Ansible.