Warum Ansible verwenden?
Vor Ansible kannte ich drei Wege, einen Server (remote) zu verwalten:
- Shell-Skripte und SSH verwenden.
- MCollective
- Ein Konfigurationsmanagement-Tool wie Puppet oder Chef verwenden.
Während die Verwendung des ersten mit vielen Servern schnell chaotisch werden kann, sind die zweite und dritte Option für meinen Geschmack einfach zu schwergewichtig, wenn man kleinere Ad-hoc-Installationen betrachtet.
Da passt Ansible perfekt rein: einfach und schnell einzurichten und einfach zu skalieren, wenn eine Installation wächst.
In diesem Beitrag werde ich zeigen, wie man Ansible einrichtet und einige Aufgaben damit durchführt.
Den Spielplatz vorbereiten
Erstelle zwei Vagrant-Boxen, die eine feste IP haben:
# -*- mode: ruby -*-
# vi: set ft=ruby:
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos_70"
config.vm.define "foo" do |foo|
foo.vm.network "private_network", ip: "192.168.10.10"
end
config.vm.define "bar" do |bar|
bar.vm.network "private_network", ip: "192.168.10.20"
end
endIch verwende hier meine eigene Basis-Box, die ich “centos_70” genannt habe. Fühle dich frei, deine eigene zu erstellen. Du findest eine Anleitung hier.
Starte beide mit vagrant up. Du kannst auf die Vagrant-Boxen einzeln mit vagrant ssh foo bzw. vagrant ssh bar zugreifen.
Ein SSH-Schlüsselpaar wird benötigt, weil die gesamte Ansible-Kommunikation über SSH läuft.
ssh-keygen -t rsa
eval "$(ssh-agent -s)"
ssh-add /vagrant/id_rsaLege die private Schlüsseldatei in /home/vagrant/.ssh/id_rsa auf foo, und kopiere und füge auf bar den öffentlichen Schlüssel in /home/vagrant/.ssh/authorized_keys ein.
Ansible installieren und konfigurieren
Beschäftigen wir uns jetzt mit Ansible selbst.
Installiere es mit:
cd /tmp
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install epel-release-7-5.noarch.rpm
yum -y install ansibleAuf Box “foo” bearbeite die Datei /etc/ansible/hosts, sodass sie die IP-Adresse von Box bar enthält:
192.168.10.20Ein erster Test
Wenn jetzt alles korrekt ist, kannst du den folgenden Test auf foo versuchen:
ansible 192.168.10.20 -m pingDas Ergebnis sollte ungefähr so aussehen:
192.168.10.20 | success >> {
"changed": false,
"ping": "pong"
}Ein reales Beispiel (mehr oder weniger…)
Lass uns einen fiktiven Deployment-Prozess erstellen, der aus den folgenden zwei Schritten besteht:
- Kopiere das “Deployment-Artefakt” vom Deployment-Server
foozum Deployment-Zielbar. - Führe ein Skript auf dem Deployment-Ziel
baraus.
Mein kleines Deployment-Playbook deploy.yml sieht so aus:
- hosts: 192.168.10.20
tasks:
- name: copies a file from a to b
copy: src=/vagrant/hello.txt dest=/home/vagrant
- name: executes a script
command: /home/vagrant/hello_world.sh
register: hello
- debug: msg="{{hello.stdout}}"Das Einzige, was das Skript hello_world.sh macht, ist:
#!/usr/bin/bash
printf "Hello World!\n"Die Datei hello.txt ist einfach leer.
Lass uns das Deployment auf foo auslösen mit:
ansible-playbook deploy.ymlDie resultierende Ausgabe sollte sein:
PLAY [192.168.10.20] **********************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.10.20]
TASK: [copies a file from a to b] *********************************************
ok: [192.168.10.20]
TASK: [executes a script] *****************************************************
changed: [192.168.10.20]
TASK: [debug msg="{{hello.stdout}}"] ******************************************
ok: [192.168.10.20] => {
"msg": "Hello World!"
}
PLAY RECAP ********************************************************************
192.168.10.20 : ok=4 changed=1 unreachable=0 failed=0Schön, sehr schön!
Was kommt als Nächstes?
Für diejenigen, die bereits einen Haufen Skripte haben und sich von Server zu Server einloggen, ist die Verwendung von Ansible eine Offenbarung. Die Integration dieser Skripte mit Ansibles shell- oder command-Modulen ist ein Kinderspiel.
Nachdem ich eine Weile herumgespielt habe, wurde mir klar, dass es eine wichtige Seite gibt, die ich ständig besuche: den Modul-Index. Diese Seite bietet eine schöne allgemeine Einführung in Ansible-Module.
Fertig für heute!