INFRASTRUKTUR MITANSIBLE
( ) 15. Januar 2014 bei der .Stephan Hochhaus @yauh OpenTechSchool Dortmund
WIE SIEHT EURE IT-INFRASTRUKTUR AUS?Wer hat einen eigenen (Web-)Server?Welches Betriebssystem?Wie viele Server sind es?Wie oft setzt ihr sie neu auf?Wie lange dauert das Aufsetzen?Wer hat schonmal ein Tutorial verfasst?
MEIN LEBEN VOR ANSIBLE1. Grundsystem per Hand installieren2. Ggf. ausgefeilte shell-Skripte für Pakete ausführen3. Manuelles Anpassen von Konfigurationsdateien4. Fertiges System5. Ausprobieren von neuer Software/Konfiguration,
andere Entwickler auf dem Server/Tests6. Zerschießen des funktionierenden Systems
GEEKS SIND GEWINNERTYPEN
VORTEILE VON AUTOMATISIERUNGBeliebige (und leichte) WiederholbarkeitHohe Geschwindigkeit von DeploymentsWiederherstellen von bekannten ZuständenKeine tiefen Systemkenntnisse notwendig
UND GANZ KONKRETSchneller Aufbau von TestsystemenLeichter ProviderwechselContinuous-Integration-Workflows realisieren"Zerschossene" Systeme wiederherstellen
WIESO NICHT SHELL/PERL-SKRIPTE?Skripte werden schnell extrem komplexIdempotenz - Unabhängig vom Ausgangszustand wird eindefinierter Endzustand hergestellt(mehrfache Ausführung möglich)Bessere Übersichtlichkeit und Struktur durch AbstraktionPortabilität (z.B. verschiedene Linux Distros)Deklarativer Ansatz erlaubt höhere Produktivität alsimperatives Vorgehen(wie soll das Ergebnis aussehen vs. was soll getan werden)Teilen von Playbooks mit Community
CONFIGURATION MANAGEMENT 2014
Stand: 13. Januar 2014 auf github
Leistungsfähige automation engine aus Basis von PlaybooksKeine Agents auf Zielsystemen notwendig(SSH-Zugriff reicht)Standardmäßig push-Architektur, pull möglichKeine Programmierkenntnisse notwendig(statt dessen YAML und Jinja2)Aber funktional erweiterbar in beliebigenProgrammiersprachenKein Management von Windows oder Mac OS XIntegration in Amazon EC2, Rackspace, OpenStack, VMWare,Vagrant, u.a.AWX (Web-GUI)
ARCHITEKTURÜBERBLICK
KERNBESTANDTEILE VON ANSIBLEInventory - Beschreibt die InfrastrukturModule - Stellen Funktionen zur VerfügungPlaybooks - Führen Aktionen in Infrastruktur durch
INVENTORYHosts - Zielsysteme (Linux)Gruppen Organisatorische Zuordnung (z.B. geografisch, nachFunktion oder als Mischung)
BEISPIEL HOSTS-DATEI[webserver]apache.example.orglamp.example.org
[dbserver]db.example.orglamp.example.org
[test]lamp.example.org
[production]apache.example.orgdb.example.org
INI-Format
ES GIBT MODULE FÜRMonitoring Net Infrastructure NetworkNotification Packaging Source ControlSystem Utilities Web InfrastructureCloud Commands DatabaseFiles Internal InventoryMessaging
SYSTEM: PING
EIGENE MODULEEigene Module können in Python oder einer beliebigen anderen
Programmiersprache(!) verfasst sein.
PLAYBOOKSPlaybooks sind deklarative Beschreibungen in YAML(Leerzeichen sind wichtig!)Tasks beschreiben den gewünschten ZustandKönnen Variablen und Schleifen verwendenTemplates und Dateien lassen sich nutzen
NUTZER ANLEGEN UND LÖSCHEN---- hosts: all user: root
tasks: # Add the user 'kaylee' with a primary group of 'admin' - user: name=kaylee comment="Kaywinnet Lee Frye" group=user
# Create a 2048-bit SSH key for user kaylee - user: name=kaylee generate_ssh_key=yes ssh_key_bits=2048
# Remove the user 'kaylee' - user: name=kaylee state=absent remove=yes
PLAY IT!
VARIABLEN FÜR TASKSTasks können Variablen nutzen
---- hosts: all user: root
vars: user: stephan user_pwd: $1$$$UMYDU6b06auQqgJWoSx2.1
tasks: - name: "Init | Set up an account" user: name={{ user }} password={{ user_pwd }} shell=/bin/bash
SCHLEIFEN MIT ITEMtasks: - name: "Init | Some software should be installed" action: apt pkg={{ item }} state=latest with_items: - sudo - openssh-server - ssh
TEMPLATES UND DATEIENDas Template-Modul erlaubt dynamische Anpassungen anKonfig-DateienMit Copy lassen sich Dateien 1:1 kopierentemplate: src=templates/msmtprc.j2 dest=/etc/msmtprccopy: src=templates/backup.sh dest=/usr/local/bin/backup.sh
VARIABLEN IN TEMPLATESJinja2 als Template-Sprache
my.cnf.j2
[client]user=rootpassword={{ mysql.root_password }}
HANDLERSVerhalten sich ähnlich zu Tasks
handlers: - name: restart mysql action: service name=mysql state=restarted
TAGS UND ROLESTags bündeln Tasks und lassen sich gezielt ausführenRoles erlauben höhere Modularität in Playbooks
tasks: - name: LAMP should be installed action: apt pkg={{ item }} state=latest with_items: - apache2 - mysql - php5 tags: lamp
ANSIBLE INSTALLIERENMAC OS X
LINUX$ brew install ansible
$ pip install pyyaml jinja2 paramiko$ pip install ansible
BEI BEDARF AUCH MIT GUI
Bis zu 10 Hosts lassen sich kostenlos mit managen.AWX
WEITERE RESSOURCEN - Die Webseite von Ansible
- Plattform für AnsiblePlaybooks/Roles
- Generelle Infos
ansibleworks.comgalaxy.ansibleworks.com
Configuration Management 101
ALTERNATIVENEs gibt eine Vielzahl von Tools für
automatisiertes Configuration Management:
AnsiblePuppetChefcfenginesalt
AUTOMATE ALL THE THINGS
Ich blogge unter ,tweete als ,
+1 als und pushe als .
FORK ME!yauh.de
@yauhStephanHochhaus
perlmonkey
Top Related