Om niet telkens het spreekwoordelijke wiel opnieuw uit te (hoeven) vinden, is er de Ansible Galaxy hub, een verzameling rollen die je kunt gebruiken in je Ansible projecten. Zo’n rol kun je zelf ook toevoegen in je eigen namespace in Ansible Galaxy en dan beschikbaar stellen aan de ‘community’.
Een account binnen Ansible Galaxy is gekoppeld aan een SCM account (op dit moment alleen GitHub) via een ‘OAuth Authorization‘ en daarom gaan we eerst toestemming geven aan de ‘Galaxy Application‘ binnen GitHub.
Zorg er dus voor dat je een GitHub account hebt!
Ga naar Ansible Galaxy en kies voor LogIn. Er wordt een SCM getoond en klik op het GitHub icoon.
Vervolgens zal GitHub je vragen om toestemming. Geef toestemming middels ‘Grant‘ en bevestig dit met de groene ‘Authorize‘ button. Nadat dit gedaan is wordt de Ansible Galaxy pagina getoond, inclusief de opties My Content en My Imports.
Via ‘My Content‘ wordt je namespace vanuit GitHub getoond, in mijn geval ‘NicoOosterwijk’, en hierin kan vervolgens content toegevoegd worden vanuit je GitHub repo’s via de button ‘+ Add Content‘
Ter illustratie maak ik twee Ansible rollen aan in GitHub:
– vagrant-mail_my_ip
– ansible-mail_my_ip
Ansible-mail_my_ip
Te vinden in mijn Ansible Galaxy namespace. Het playbook zal een aantal packages installeren om E-Mail te kunnen versturen middels een template. Een bash-script haalt de IP addressen op uit eth0, eth1 en wlan0 en plaatst deze in de mail-template die vervolgens verstuurd wordt. In feite kan deze rol ook los gebruikt worden als tenminste een inventory file gebruikt wordt naar een reeds bestaande host.
Wij gaan deze rol echter gebruiken via de Anible Galaxy hub. Om het als ‘content’ toe te kunnen voegen dienen we allereerst wat metadata aan te maken in de meta-directory. De main.yml file ziet er zo uit:
galaxy_info:
author: "Nico Oosterwijk"
description: Mail IP address of a host
license: BSD
min_ansible_version: 2.0
platforms:
- name: EL
versions:
- 7
galaxy_tags:
- mail-me-your-ip
Deze metadata wordt door Ansible Galaxy ingelezen waarna de rol in je namespace wordt geplaatst met de naam van de repo uit GitHub.
Klik op de naam voor de details:
Hiermee is deze repository gereed en we gaan het later, in de Vagrant repo, ophalen via de installatie-instructie.
Vagrant-mail_my_ip
Deze rol kun je clonen vanuit mijn GitHub omgeving. Hiermee zal via een Vagrantfile een virtuele machine aangemaakt worden op je lokale VirtualBox omgeving en we laten deze dan provisionen via het Ansible playbook dat dan de content vanuit de Ansible Galaxy zal gebruiken. De Vagrantfile ziet er alsvolgt uit:
# -*- mode: ruby -*-
# vi: set ft=ruby :
#
# Required modules
require 'yaml' # for reading yaml files
Vagrant.require_version ">= 2.0.0"
Vagrant.configure(2) do |config|
config.vm.box = 'centos/7'
config.vm.define host do |machine|
machine.vm.hostname = "centos"
machine.vm.network "private_network", ip:"172.17.177.121"
machine.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "2048"
vb.cpus = "2"
end
end
config.vm.provision "ansible" do |ansible|
ansible.inventory_path = "provisioning/inventory"
ansible.playbook = "provisioning/playbook.yml"
ansible.become = true
end
end
Het Ansible Playbook dat aangeroepen wordt in het ‘provision’ deel, ziet er zo uit:
# Ansible playbook to mail the IP address of a VM
#
@author Nico Oosterwijk
hosts: centos
gather_facts: False
become: yes
vars:
from_address: mymail@address.com
to_address: yourmail@address.com
roles:
nicooosterwijk.ansible_mail_my_ip
Hierin dienen de juiste E-mail adressen ingevuld te worden. Bij de roles wordt nu de Ansible rol aangeroepen. Deze halen we eerst op via de meegeleverde requirements.yml file:
ansible-galaxy install -r requirements.yml
downloading role 'ansible_mail_my_ip', owned by nicooosterwijk
downloading role from https://github.com/NicoOosterwijk/ansible-mail_my_ip/archive/master.tar.gz
extracting nicooosterwijk.ansible_mail_my_ip to /Users/nico/Documents/.ansible/roles/nicooosterwijk.ansible_mail_my_ip
nicooosterwijk.ansible_mail_my_ip (master) was installed successfully
Hierna kan de Vagrantfile aangeroepen worden met het commando:
vagrant up
Er worden nu een aantal taken uitgevoerd:
- een virtuele machine wordt aangemaakt in VirtualBox met CentOS7 als OS.
- de VM wordt m.b.v. een Ansible-playbook voorzien van variables voor de mail.
- Het Ansible-playbook roept een ‘externe’ rol aan die de mail-functionaliteit installeert en middels een template een E-mail verstuurd met daarin de IP adres(sen) van de host.
Cleaning up
Om de VM weer op te ruimen en de Ansible rol te verwijderen kun je de volgende commando’s gebruiken:
vagrant destroy -f
ansible-galaxy remove nicooosterwijk.ansible_mail_my_ip