DevOps ohne root
Anwendungen reproduzierbar für 

Managed Server konfigurieren
Peter Hormanns
cusy GmbH
Vortrag auf dem Linuxday Dornbirn am 21. Nov. 2015
Kapitel
Thanks for coming
you + me + cusy
Peter Hormanns
• Freiberufler, Software-Consultant
• Technologie-Stack: Java und Linux
• heute nennt man „DevOps", 

was ich seit 20 Jahren tue ;-)
• tätig für die cusy GmbH
you + me + cusy
you + me + cusy
Agenda
• you + me + cusy
• Cloud + Managed Server
• Configuration Management mit Ansible
• praktische Beispiele
• Zusammenfassung und Diskussion
you + me + cusy
Angebot der cusy GmbH

»Gute« Anwendungen zu einer gehosteten*
Arbeitsumgebung

für Teams kombinieren.
*) nach deutschen Datenschutzstandards in einem zertifizierten Rechenzentrum 

in Deutschland
!
TextTextText
Referenzkunde
Kapitelyou + me + cusy
Alternative zur Cloud
Kapitelyou + me + cusy
SaaS
PaaS
IaaS
cusy-Dienste
Managed-Server
(root-Server)
»Cloud« Datenschutz konformes
Hosting
Managed Server
• Bootstrap neuer Virtueller Maschinen
• Backup
• Sicherheits-Updates für das Betriebssystem
• Storage
• Vorhalten von Ressourcen
Cloud + Managed Server
Arbeitsteilung – Hoster
• Managed Plattform
• Betriebssystem
• Hardware
• Netzwerk
• Backup
Cloud + Managed Server
Arbeitsteilung – cusy
• cusy Dienste
• Gitblit – Git-Hosting mit Browser-Oberfläche, wie Github
• OpenProject – Multiprojekt-Management, Redmine-Fork
• Jenkins – Continuous Integration Server
• Sentry – zentrale Log-Auswertung
• Jira – Atlassian Projekt-Verwaltung / Issue Tracking
• Confluence – Enterprise Wiki
Cloud + Managed Server
Motivation
Unsere höchste Priorität ist es, den Kunden durch
frühe und kontinuierliche Auslieferung wertvoller
Software zufriedenzustellen.
(Erstes Prinzip des agilen Manifests)
Cloud + Managed Server
»
«
Motivation
Einfachheit – die Kunst, die Menge nicht getaner 

Arbeit zu maximieren – ist essenziell.
(Achtes Prinzip des agilen Manifests)
Cloud + Managed Server
» «
Ansible-Steckbrief
• Automatisierung
• Configuration Management
• Service Orchestration
• Dokumentation
Configuration Management mit Ansible
Configuration Management mit Ansible
Ansible-Eigenschaften
• Push über ssh (kein Agent)
• YAML Syntax für Playbooks
• Jinja Template Engine
• Idempotenz
• Deklarativ
Configuration Management mit Ansible
Für unseren Anwendungsfall ist Ansible die naheliegende Lösung.
vs vs vs vs
Configuration Management mit Ansible
Einfaches Playbook
1 ---
2 - hosts: wordpress
3 vars:
4 version: 4.0
5 tasks:
6 - name: extract tarball
7 sudo: yes
8 sudo_user: "{{user}}"
9 unarchive: >
10 copy=no src="/tmp/wordpress.tgz"
11 dest="/home/{{user}}/wordpress/"
… ↓
Praktische Beispiele
Einfaches Playbook
…
12 - name: move to www
13 sudo: yes
14 sudo_user: "{{pac}}-{{user}}"
15 command: >
16 rm -rf www && mv wordpress www
17 chdir="/home/{{user}}/wordpress"
18 - name: upload wp-config.php config
19 sudo: yes
20 sudo_user: "{{pac}}"
21 template: >
22 src="templates/wordpress/wp-config.php"
23 mode=0600
24 dest="/home/{{user}}/wordpress/www/wp-config.php"
Praktische Beispiele
Ansible-Begriffe: Playbook
• Beschreibung eines Soll-Zustands der Infrastruktur
Praktische Beispiele
Ansible-Begriffe: Playbook
• Beschreibung eines Soll-Zustands der Infrastruktur
• User anlegen
• Domain aufschalten
• Datenbank anlegen
eigene Module
!
siehe Repository auf Github
Praktische Beispiele
Ansible-Begriffe: Module
• ca. 130 Module in Core
• ca. 270 "Extra" Module
• eigene Module in jeder Programmier- oder Skript-
Sprache möglich
Praktische Beispiele
Ansible-Begriffe: Inventory
[appserver]
apps01.example.com
apps02.example.com
apps03.example.com
!
[frontend]
www.example.com ansible_sudo_user=haproxy
!
[appserver:vars]
frontend=www.example.com
ansible_sudo_user=tomcat7
Praktische Beispiele
Ansible-Begriffe: Inventory
Dynamisches Inventory
./dyn-inv --list
!
1 {
2 "appserver" : [ "apps01.example.com" , "apps02.example.com" ],
3 "frontend" : [ "www.example.com" ]
4 }
Praktische Beispiele
Ansible-Begriffe: Inventory
Dynamisches Inventory
./dyn-inv --host apps01.example.com
!
1 {
2 "frontend" : "www.example.com",
3 "ansible_sudo_user" : "tomcat7"
4 }
Praktische Beispiele
Praktische Beispiele
Ansible-Begriffe: Variablen
• im Inventory
• in Playbooks
• aus inkludierten Dateien
• von der Kommandozeile
Praktische Beispiele
Ansible-Begriffe: 

Rollen und Handler
roles/gitblit/
roles/gitblit/files
roles/gitblit/files/cusy120x45.png
roles/gitblit/handlers
roles/gitblit/handlers/main.yml
roles/gitblit/meta
roles/gitblit/meta/main.yml
roles/gitblit/tasks
roles/gitblit/tasks/main.yml
roles/gitblit/templates
roles/gitblit/templates/context.xml
roles/gitblit/vars
roles/gitblit/vars/main.yml
Praktische Beispiele
Ansible-Begriffe:
Orchestrierung
Delegation
!
1 - name: Configure proxy server for service
2 delegate_to: "{{fe_host_name}}"
3 sudo_user: "{{fe_sudo_user}}"
4 template: >
5 dest=/etc/nginx/local/{{customer}}/{{tenant}}-{{service}}.conf
6 src=nginx-service.conf
7 mode=0644
8 notify:
9 - Apply proxy configuration
Praktische Beispiele
Ansible-Begriffe:
Orchestrierung
Abhängige Rollen
!
Praktische Beispiele
Ansible-Begriffe
Praktische Beispiele
• Playbook - Beschreibung eines Soll-Zustands
• Modul - Soll-Zustand für eine einzelnes Objekt
• Inventory - Aufzählung der Instrastruktur
• Variablen - Parametrisierung von Plays und Templates
• Orchestrierung über
• Rollen
• Delegation
• abhängige Rollen
Lessons learned
• Der Einstieg ist schnell
Praktische Beispiele
Lessons learned
• Der Einstieg ist schnell
• Module und ein dynamische Repository sind einfach
implementiert
Praktische Beispiele
Lessons learned
• Der Einstieg ist schnell
• Module und ein dynamische Repository sind einfach
implementiert
• Das Thema Variablen ist unübersichtlich
Praktische Beispiele
Lessons learned
• Der Einstieg ist schnell
• Module und ein dynamische Repository sind einfach
implementiert
• Das Thema Variablen ist unübersichtlich
• Nutze Rollen, abhängige Rollen
Praktische Beispiele
Lessons learned
• Der Einstieg ist schnell
• Module und ein dynamische Repository sind einfach
implementiert
• Das Thema Variablen ist unübersichtlich
• Nutze Rollen, abhängige Rollen
• Idempotenz kostet Aufwand
Praktische Beispiele
Lessons learned
• Der Einstieg ist schnell
• Module und ein dynamische Repository sind einfach
implementiert
• Das Thema Variablen ist unübersichtlich
• Nutze Rollen, abhängige Rollen
• Idempotenz kostet Aufwand
• Playbooks haben deklarative und imperative Aspekte
Praktische Beispiele
Zusammenfassung
Ansible ermöglicht uns die Installation und Konfiguration
von Services in eine Managed Server Umgebung.
Es gibt Verbessungspotential.
Ansible 2 bringt einige Verbesserungen:
• Verbessertes Handling von Fehlermeldungen
• Execution Strategy Plugins
• Verbessertes Variablenmanagement
Praktische Beispiele
Fragen?

Diskussion.
Kontakt
Vertiefen
• Prinzipien hinter dem agilen Manifest
• Offizielle Ansible Website
• Ansible Dokumentation
• cusy Slides bei http://de.slideshare.net/cusyio/devops-ohne-root
!
Weiterführende Literatur
Bildnachweise
• Bild: Soccer game at the Azteca Stadium; cc BY-SA 4.0: Jlfdz
• Bild: Peter Hormanns;
• Bild: cusy-Messestand; Veit Schiele
• Michael Gernhardt in space during STS-69 in 1995; PUBLIC DOMAIN: NASA
• Supermassive Black Holes with Relativistic Jets; CC BY 2.0: NASA

Devops ohne root