SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Wer bin ich?
• Susann Sgorzaly, 29
• Statistikerin und Softwareentwicklerin
• PHP Entwicklerin seit ca. 3 Jahren
• derzeit: Entwicklerin bei ITEXIA GmbH
@susgo
@susann_sg
Motivation: Mein Weg zu Ansible
• Szenario:
• Kunde bestellt Software
• möchte einen eigenen Server dafür
• kein Admin zur Stelle, um diesen Server einzurichten
Was ist Ansible?
Ansible ist eine sehr einfach benutzbare
IT Automatisierungsengine.
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
Installation
siehe auch: http://docs.ansible.com/ansible/latest/intro_installation.html
sudo pip install ansible
Installation
ansible --version
Inventory-Dateien
Inventory-Dateien sind einfache Textdateien, die eine
Beschreibung und Gruppierung der Server über die
IP oder DNS enthalten.
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
Inventory: Gruppen
Jeder Host kann mehreren Gruppen angehören.
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.
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
Inventory: Gruppen von Gruppen
Gruppen können mehrere Eltern und mehrere Kinder haben,
aber keine zirkulären Abhängigkeiten.
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
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
Inventory: Gruppenvariablen
Gruppenvariablen werden vor jeder Ausführung auf Host-
Level übertragen.
Gruppenvariablen von Kindergruppen überschreiben die
Gruppenvariablen der Elterngruppe(n).
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.
Erster Ansible Ad-hoc Befehl
ansible prod-server –m ping
Playbooks
Ein Playbook ist eine Liste von Kommandos (Tasks), die auf
der remote oder lokalen Maschine ausgeführt werden.
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
Playbooks: Aufbau
1 ---
Ø Markiert, dass der Rest des Dokumentes YAML formatiert
sein wird.
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
Playbooks: Aufbau
4 tasks:
Ø Alle Kommandos unterhalb dieser Zeile werden auf allen
Hosts ausgeführt.
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.
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.
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
Module
Ansible Module sind wiederverwendbare, eigenständige
Skripte, welche von der
Ansible API, von ansible oder von ansible-playbook
genutzt werden können.
Module
Sie können in einer beliebigen Programmiersprache
geschrieben sein.
Module
Sie liefern ihren Status in Form von JSON-Objekten im
stdout an Ansible zurück.
Playbook ausführen
ansible-playbook path/to/playbook.yml
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.
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
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
Roles
Eine Ansible Rolle ist eine saubere, wiederverwendbare
Abstraktion einzelner Tasks.
Die Rolle erfüllt eine bestimmte Funktionalität.
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
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
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') }}"
Ansible Roles von ITEXIA
@itexia
Ansible Roles von ITEXIA
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
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
IT – Automatisierung: Alternativen
Puppet Chef SaltStack
DANKE!
Fragen?

Weitere ähnliche Inhalte

Was ist angesagt?

Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012
Florian Holzhauer
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
Frank Schmittlein
 

Was ist angesagt? (20)

Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 
Einführung React Native
Einführung React NativeEinführung React Native
Einführung React Native
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012
 
Node.js
Node.jsNode.js
Node.js
 
Einführung in Laravel und GulpJS
Einführung in Laravel und GulpJSEinführung in Laravel und GulpJS
Einführung in Laravel und GulpJS
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
 
Mehrserver Lösungen
Mehrserver LösungenMehrserver Lösungen
Mehrserver Lösungen
 
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
 
yeoman
yeoman yeoman
yeoman
 
Reaktive Applikationen mit Scala, Play und Akka
Reaktive Applikationen mit Scala, Play und AkkaReaktive Applikationen mit Scala, Play und Akka
Reaktive Applikationen mit Scala, Play und Akka
 
Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit Juju
 
Vorlesung - Cloud Infrastrukturen - Clusterbau | anynines
Vorlesung - Cloud Infrastrukturen - Clusterbau  | anyninesVorlesung - Cloud Infrastrukturen - Clusterbau  | anynines
Vorlesung - Cloud Infrastrukturen - Clusterbau | anynines
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
 
Nagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo LatschnerNagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo Latschner
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 

Ähnlich wie Automation with Ansible

Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
inovex GmbH
 

Ähnlich wie Automation with Ansible (20)

Infra coders meetup
Infra coders meetupInfra coders meetup
Infra coders meetup
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 
Devops ohne root
Devops ohne rootDevops ohne root
Devops ohne root
 
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet
 
200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
 
SLAC 2008 Mit SUSE Linux glücklich werden
SLAC 2008 Mit SUSE Linux glücklich werdenSLAC 2008 Mit SUSE Linux glücklich werden
SLAC 2008 Mit SUSE Linux glücklich werden
 
Agorum core-installation-linux-6 4-0a
Agorum core-installation-linux-6 4-0aAgorum core-installation-linux-6 4-0a
Agorum core-installation-linux-6 4-0a
 
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas LangeOSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
 
Azure Notebooks
Azure NotebooksAzure Notebooks
Azure Notebooks
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
 
SLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauenSLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauen
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 

Automation with Ansible