Azure i ansible
Dostałem możliwość potestowania Azure - głównie w celu rozwoju swoich projektów. Jako, że ostatnio sporo dłubię w Ansible - pierwsze rzecz, która mi przyszła do głowy to oczywiście deploy czystego serwera z poziomu Ansible.
Zanim zaczniemy - potrzebne są narzędzia Azure zainstalowane w systemie. Do tego celu postrzebne jest nam nodejs i npm. Później wystarczy zainstalować azure-cli:
npm install azure-cli -g
Później musimy się zalogować na swoje konto. Najprościej jest to zrobić za pomocą polecenia:
azure account download
azure account import <nazwa_pliku>
Na sam koniec potrzeba nam jeszcze certyfikatu management i (opcjonalnie) x.509 z klucza ssh.
# certyfikat management
azure account cert export
# certyfikat x.509 id_rsa
openssl req -x509 -key ~/.ssh/id_rsa -nodes -days 365 -newkey rsa:2048 -out myCert.pem
Tyle ze wstępu, przygotowań narzędzi i potrzebnych plików. Do samego deployu potrzeba nam tylko jeszcze jednej rzeczy - nazwy obrazu, który chcemy wrzucić. Z dystrybucji Linuksa dostępny jest RedHat, Ubuntu i OpenLogic (CentOS). Listę dostępnych obrazów uzyskamy poleceniem:
azure vm image list
Potrzebujemy całej nazwy obrazu, czyli:
5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-66-20150706
Jak wygląda kwestia playbooka do tego? Ja stworziłem sobie plik ze zmiennymi (żeby ich w repo przypadkiem nie wrzucić) i wygląda on tak:
azure:
subscription: <id_subskrypcji>
user: mariom
ssh_cert_path: vault/ssh.pem
management_cert_path: vault/azure.pem
location: "West Europe"
image: 5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-66-20150706
storage_account: ansibletest
Playbook:
- name: Create azure vm
hosts: localhost
vars_prompt:
azurename: "Hostname?"
tasks:
- include_vars: vault/azure
- local_action:
module: azure
name: "{{ azurename }}"
role_size: Basic_A0
image: "{{ azure.image }}"
location: "{{ azure.location }}"
user: "{{ azure.user }}"
ssh_cert_path: "{{ azure.ssh_cert_path }}"
subscription_id: "{{ azure.subscription }}"
management_cert_path: "{{ azure.management_cert_path }}"
storage_account: "{{ azure.storage_account }}"
Playbook wykonuje się lokalnie - bo z naszej maszyny jest tworzona inna. Przed wykonaniem zapyta się nas o nazwę nowej wirtualki na Azure. Jeśli wszystko zrobiliśmy poprawnie - playbook powinien zakończyć się sukcesem i po kilku minutach w panelu Azure powinna być widoczny, włączony nowy serwer wirtualny.