Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Automation with Ansible

247 views

Published on

Automatisierung? ANSIBLE - Einfach. Sicher. Zuverlässig.

Ansible ist ein Open-Source Werkzeug zur Automatisierung von Deployment-, Konfigurations- und Administrationsprozessen. Die Beschreibung der Aufgaben basiert auf YAML und Jinja Templates. Es lässt sich zudem in Verbindung mit Vagrant und Docker nutzen.

Published in: Software
  • Be the first to comment

Automation with Ansible

  1. 1. Wer bin ich? • Susann Sgorzaly, 29 • Statistikerin und Softwareentwicklerin • PHP Entwicklerin seit ca. 3 Jahren • derzeit: Entwicklerin bei ITEXIA GmbH @susgo @susann_sg
  2. 2. Motivation: Mein Weg zu Ansible • Szenario: • Kunde bestellt Software • möchte einen eigenen Server dafür • kein Admin zur Stelle, um diesen Server einzurichten
  3. 3. Was ist Ansible? Ansible ist eine sehr einfach benutzbare IT Automatisierungsengine.
  4. 4. Gründe für Ansible • Klare und einfache Syntax (YAML) • Schnell: • schnell aufzusetzen • schnell zu erlernen • Effizient: • kein extra Master Server • keine extra Software auf den Servern • Sicher: Kommunikation über SSH
  5. 5. Installation siehe auch: http://docs.ansible.com/ansible/latest/intro_installation.html sudo pip install ansible
  6. 6. Installation ansible --version
  7. 7. Inventory-Dateien Inventory-Dateien sind einfache Textdateien, die eine Beschreibung und Gruppierung der Server über die IP oder DNS enthalten.
  8. 8. Inventory: Gruppen [prodserver] webserver-[a-f].mycompany.com dbserver-[01-10].mycompany.com mail.mycompany.com [devserver] webserver.mycompany-dev.com dbserver.mycompany-dev.com git.mycompany-dev.com
  9. 9. Inventory: Gruppen Jeder Host kann mehreren Gruppen angehören.
  10. 10. Inventory: Gruppen Alle Hosts gehören der „Gruppe“ all an. Jeder Host der keinen weiteren, selbstdefinierten Gruppen angehört, gehört außerdem der Gruppe ungrouped an.
  11. 11. Inventory: Gruppen von Gruppen [prodserver] webserver-[a-f].mycompany.com dbserver[01-10].mycompany.com mail.mycompany.com [devserver] webserver.mycompany-dev.com dbserver.mycompany-dev.com git.mycompany-dev.com [mycompany:children] devserver prodserver
  12. 12. Inventory: Gruppen von Gruppen Gruppen können mehrere Eltern und mehrere Kinder haben, aber keine zirkulären Abhängigkeiten.
  13. 13. Inventory: Host-Variablen [targets] localhost ansible_connection=local myAlias ansible_host=192.0.2.50 ansible_connection=ssh webserver.mycompany.com ansible_port=5000 dbserver.mycompany.com ansible_user=susi mail.mycompany.com http_port=8080
  14. 14. Inventory: Gruppenvariablen [targets] localhost ansible_connection=local myAlias ansible_host=192.0.2.50 ansible_connection=ssh webserver.mycompany.com ansible_port=5000 dbserver.mycompany.com ansible_user=susi mail.mycompany.com [targets:vars] http_port=8080
  15. 15. Inventory: Gruppenvariablen Gruppenvariablen werden vor jeder Ausführung auf Host- Level übertragen. Gruppenvariablen von Kindergruppen überschreiben die Gruppenvariablen der Elterngruppe(n).
  16. 16. Inventory: Gruppenvariablen mergen Jeder Host kann mehreren Gruppen angehören, aber es gibt nur eine Instanz jedes Hosts, welche durch das Zusammenführen der Daten aller Gruppen entsteht.
  17. 17. Erster Ansible Ad-hoc Befehl ansible prod-server –m ping
  18. 18. Playbooks Ein Playbook ist eine Liste von Kommandos (Tasks), die auf der remote oder lokalen Maschine ausgeführt werden.
  19. 19. Playbooks: Aufbau 1 --- 2 - hosts: all 3 become: yes 4 tasks: 5 - name: Ensure NTP (for time sync) is installed 6 apt: pkg=ntp state=present 7 - name: Ensure NTP is running 8 service: name=ntpd state=started enabled=yes
  20. 20. Playbooks: Aufbau 1 --- Ø Markiert, dass der Rest des Dokumentes YAML formatiert sein wird.
  21. 21. Playbooks: Aufbau 2 - hosts: all Ø Definiert die Hosts / Hostgruppe, auf denen dieses Playbook ausgeführt werden soll 3 become: yes Ø Alle Tasks sollen mit erweiterten Privilegien (sudo) arbeiten
  22. 22. Playbooks: Aufbau 4 tasks: Ø Alle Kommandos unterhalb dieser Zeile werden auf allen Hosts ausgeführt.
  23. 23. Playbooks: Aufbau 5 - name: Ensure NTP (for time sync) is installed 6 apt: pkg=ntp state=present Ø Equivalent zu: apt-get install ntp Aber dieser Befehl ist viel intelligenter: Es checkt, ob NTP bereits installiert ist und installiert es, falls nicht.
  24. 24. Playbooks: Aufbau 7 - name: Ensure NTP is running 8 service: name=ntpd state=started enabled=yes Ø Checkt und stellt sicher, dass der ntpd-Service läuft.
  25. 25. Playbooks: Aufbau 1 --- 2 - hosts: all 3 become: yes 4 tasks: 5 - apt: pkg=ntp state=present 6 - service: name=ntpd state=started enabled=yes
  26. 26. Module Ansible Module sind wiederverwendbare, eigenständige Skripte, welche von der Ansible API, von ansible oder von ansible-playbook genutzt werden können.
  27. 27. Module Sie können in einer beliebigen Programmiersprache geschrieben sein.
  28. 28. Module Sie liefern ihren Status in Form von JSON-Objekten im stdout an Ansible zurück.
  29. 29. Playbook ausführen ansible-playbook path/to/playbook.yml
  30. 30. Playbooks lokal testen Vagrant ist eine freie Software zum Erstellen und Verwalten von virtuellen Maschinen. Vagrant wird über die Shell gesteuert. Die virtuelle Maschine (Box) wird über eine Konfigurationsdatei (Vagrantfile) beschrieben.
  31. 31. Playbook: Beispiel mit Vagrant config.vm.provision "ansible" do |ansible| # ansible.verbose = "v" ansible.playbook = "playbook/yii2-base-app-playbook.yml" ansible.sudo = true end
  32. 32. Playbook: Beispiel mit Docker FROM ubuntu:16.04 MAINTAINER ITEXIA GmbH RUN apt-get -y update RUN apt-get install -y python-yaml python-jinja2 git RUN git clone http://github.com/ansible/ansible.git /tmp/ansible WORKDIR /tmp/ansible ENV PATH $PATH:/tmp/ansible/bin:/sbin:/usr/sbin:/usr/bin ENV ANSIBLE_LIBRARY /tmp/ansible/library ENV PYTHONPATH /tmp/ansible/lib:$PYTHON_PATH ADD playbook /tmp/example WORKDIR /tmp/example RUN ansible-playbook yii2-base-app-playbook.yml -i hosts EXPOSE 80
  33. 33. Roles Eine Ansible Rolle ist eine saubere, wiederverwendbare Abstraktion einzelner Tasks. Die Rolle erfüllt eine bestimmte Funktionalität.
  34. 34. Roles Rollen folgen einer bestimmten Ordnerstruktur: • meta • main.yml (allg. Informationen zur Rolle) • defaults • main.yml (default-values für Variablen) • tasks • main.yml (Tasks) • vars • main.yml (Variablen-Definition) • templates
  35. 35. Roles: Beispiel create-mysql-db • tasks à main.yml: - name: Create a database mysql_db: db: '{{ db_name }}' state: present - name: Create a MySQL user for this db mysql_user: name: "db_user" password: "{{ db_pass }}" priv: '{{ db_name }}.*:ALL' state: present update_password: on_create
  36. 36. Roles: Beispiel • Einbindung der Rolle im Playbook: - hosts: all become: yes tasks: … - name: Create DB and DB user include_role: name: create-mysql-db vars: db_name: itexia db_user: itexia db_pass: "{{ lookup('password', 'passwords/password_db_itexia chars=ascii_letters,numbers length=16') }}"
  37. 37. Ansible Roles von ITEXIA @itexia
  38. 38. Ansible Roles von ITEXIA
  39. 39. Beispiele für den Einsatz bei ITEXIA 1. Aufsetzen von virtuellen Maschinen für den Einsatz beim Kunden: • Softwareinstallation / -update • Anlegen von Datenbank und Datenbankbenutzer • Automatisches Generieren und Setzen von Passwörtern • Einspielen von Kundendaten in die Software (MySQL + Filesystem) • Hinzufügen eines Benutzers mit sudo-Privilegien für die VM
  40. 40. Beispiele für den Einsatz bei ITEXIA 2. Aufsetzen von Cloud-Instanzen unserer Software über die Plesk-API • Anlegen einer Subdomain • Anlegen von Datenbank und Datenbankbenutzer • Automatisches Generieren und Setzen von Passwörtern • Kopieren der Software aus einem Vorlagenverzeichnis • PHP Konfigurationen
  41. 41. IT – Automatisierung: Alternativen Puppet Chef SaltStack
  42. 42. DANKE! Fragen?

×