Infrastruktur als Code
Wer bin ich?
● Jan Gehring
● System Architekt
● Bei inovex seit 2008
Um was geht’s?
● Von der Turnschuh-Administration
● Zur automatisierten Umgebung
Turnschuh-Administration
● Der unglückliche Umstand, sämtliche Rechner
im Netzwerk zu Fuß abklappern zu müssen,
um vor Ort...
Turnschuh-Administration
● Funktioniert bei wenigen Servern
● Kann funktionieren wenn jeder Server
unterschiedlich ist
● S...
Turnschuh-Administration
Oft gehört...
● Wirklich?
● Was ist mit
– ntp
– Benutzer und Gruppen
– ssh
– logrotate
– resolv.conf
– profile
– Apache Security Einstel...
● Wieviele Server kann eine Person
administrieren?
– 10
– 25
– 50
● Krankheit oder Urlaub?
Skaliert?
● Der Tag hat 24 Stunden
● Naja, eigentlich nur 8 …
Zeit ist knapp
● Mails lesen und beantworten
Zeit ist knapp
● Mails lesen und beantworten (1-2h)
● Mailinglisten verfolgen (Security, ...)
Zeit ist knapp
Sicherheitsproblem im Apache...
auch bei uns.
Infrastruktur als Code
Muss heute mittag gepatched
werden!
Infrastruktur als Code
● Mails lesen und beantworten (1-2h)
● Mailinglisten verfolgen (1h)
● Updates aus der IT Welt (heise, golem, ...)
Zeit ist...
● Mails lesen und beantworten (1-2h)
● Mailinglisten verfolgen (1h)
● Updates aus der IT Welt (1h)
Zeit ist knapp
Vormittag ist rum
Zeit ist knapp
Bleiben noch 4 Stunden
Zeit ist knapp
Ein Kollege von der Entwicklung
schaut rein, hat ein Problem...
Zeit ist knapp
3 Stunden
Zeit ist knapp
Neue Softwarerelease soll deployed
werden...
Zeit ist knapp
Funktioniert nicht!
Zeit ist knapp
Hotfix 1...
Zeit ist knapp
Hotfix 2...
Zeit ist knapp
-2 Stunden
Zeit ist knapp
Feierabend!
Zeit ist knapp
Security Update kommt morgen...
Zeit ist knapp
.oO( Vielleicht )
Zeit ist knapp
Kommt das bekannt vor?
Infrastruktur als Code
Wenn ja, dann seid ihr hier richtig!
Infrastruktur als Code
Was braucht man um zu
Automatisieren?
Infrastruktur als Code
Tools!
Infrastruktur als Code
Infrastruktur als Code
http://www.immobilienwirtschaft360.de/
Continuous Integration Tool
Infrastruktur als Code
Infrastruktur als Code
http://jenkins-ci.org/
http://travisci.com/
Bild von: https://www.openshift.com
Configuration/Deployment
Management Tool
Infrastruktur als Code
Infrastruktur als Code
http://www.opscode.com/
Bild von: http://developer.rackspace.com/
Source Control Management
Infrastruktur als Code
Infrastruktur als Code
http://git-scm.com/
http://mercurial.selenic.com/
http://subversion.tigris.org/
Infrastruktur als Code
Was bedeutet das?
Infrastruktur als Code
● Das Wissen über die Infrastruktur ist nicht in
eurem Kopf sondern in einem Script.
● Wenn ihr mal krank seid kann ein Ko...
Außerdem macht es sich gut bei
einem Bewerbungsgespräch...
Inovex sucht übrigens Linux System
Engineers!
● Wenn es nur von einem verwendet /
upgedatet wird?
● Wenn es nur auf einer Plattform läuft?
Was bringt uns ein Script?
● Dezentrale Versionsverwaltung
● Funktioniert auch offline
● Schöne Oberflächen
Git – und jeder macht mit
Git – und jeder macht mit
http://gitlab.org/
● Dezentrale Versionsverwaltung
● Funktioniert auch offline
● Schöne Oberflächen
● Scripte sind versioniert
● Vielleicht m...
● Unterschiedliche Entwicklungszweige
● Für Testsysteme ein Entwicklungszweig
(branch)
● Für Livesysteme ein „Production“ ...
Git – und jeder macht mit
http://erickryski.com/
● Standard Aufgaben kann man hier hinterlegen
– Testen des Development Branchs
– Automatische Prüfung von Backup/Restore
–...
Jenkins – Ein-Klick Administration
http://devcentral.f5.com/
● Keine selbst geschriebenen Scripte
– Auf die Arbeit von anderen aufbauen
● Ganz einfaches Perl
– Kennt eigentlich jeder
...
● Wird entwickelt seid 2010
● Genau für dieses Einsatzgebiet
● Bruch der Kompatibilität = Bug
● Aktive Community
● Profess...
Bis hier hin Fragen?
Weiter geht’s mit: Rex
● Begrifflichkeiten
● Rex Interna
● Aus der Praxis
● Installation
● 1. Schritt...
Begrifflichkeiten
Was ist was?
Infrastruktur als Code
WKS
Rex
Workstation
WKS
Rex
SSH
Workstation
SRV02SRV01 SRV03 SRV04 SRV05 SRV06
WKS
Rex
SSH
Workstation & Server
Gruppen
LB01 LB02
FE01 FE03FE02
MW01 MW02
DBS01 DBS02
DBM01
Gruppen
DB Write
DB Read
Middleware
Frontend
Loadbalancer LB01 LB02
FE01 FE03FE02
MW01 MW02
DBS01 DBS02
DBM01
Funktions-Gruppen
group “ourgroup“ => “server1“, “server2“, “server3“;
Funktions-Gruppen
group “ourgroup“ => “server1“, “server2“, “server3“;
Funktions-Gruppen
group “ourgroup“ => “server1“, “server2“, “server3“;
Funktions-Gruppen
group “ourgroup“ => “server[1..3]“;
Funktions-Gruppen
group “ourgroup“ => “server[01..03]“;
Funktions-Gruppen
group “ourgroup“ => get_servers_from_db();
Funktions-Gruppen
Environments
LIVE STAGE TEST
Loadbalancer
Frontend
Middleware
DB Read
DB Write
LB01 LB02
FE01 FE03FE02
MW01 MW02
DBS01 DBS02
DBM01
LB01...
environment “live“ => sub {
group “frontend“ => “fe01[01..03].live“;
};
environment “stage“ => sub {
group “frontend“ => “...
environment “live“ => sub {
group “frontend“ => “fe01[01..03].live“;
};
environment “stage“ => sub {
group “frontend“ => “...
environment “live“ => sub {
group “frontend“ => “fe01[01..03].live“;
};
environment “stage“ => sub {
group “frontend“ => “...
Tasks
task “mytask“, group => “ourgroup“, make {
};
Tasks
task “mytask“, group => “ourgroup“, make {
};
Tasks
task “mytask“, group => “ourgroup“, make {
};
Tasks
task “mytask“, group => “ourgroup“, make {
};
Tasks
task “mytask“, group => “ourgroup“, make {
};
Tasks
task “mytask“, group => “ourgroup“, make {
};
Tasks
task “mytask“, group => “ourgroup“, make {
run “unzip -q /tmp/my.zip“;
};
Tasks
task “mytask“, group => “ourgroup“, make {
run “unzip -q /tmp/my.zip“;
};
Tasks
task “mytask“, group => “ourgroup“, make {
run “unzip -q /tmp/my.zip“;
};
Tasks
Bis hier hin Fragen?
Weiter geht’s mit: Rex
● Begrifflichkeiten
● Rex Interna
● Aus der Praxis
● Installation
● 1. Schritt...
Aufteilung in Module und Services
● Unabhängig
● Wiederverwendbar
● Für einen Einsatzzweck gemacht
Module sind
... ein spezieller Dienst
Services sind ...
z.b.: der Intranet-Server
Services sind ...
oder: der Proxy-Server
Services sind ...
oder: das Frontend
Services sind ...
Bis hier hin Fragen?
Weiter geht’s mit: Rex
● Begrifflichkeiten
● Rex Interna
● Aus der Praxis
● Installation
● 1. Schritt...
Installation
echo 'deb http://rex.linux-files.org/ubuntu/ precise rex' >> 
/etc/apt/sources.list
wget -O - 
http://rex.linux-files.org/...
Installation / CentOS
rpm –import 
http://rex.linux-files.org/RPM-GPG-KEY-REXIFY-REPO.CENTOS6
cat >/etc/yum.repos.d/rex.re...
Installation / Windows
● Strawberry-Perl (http://strawberryperl.com/)
● cmd> cpanm Rex
curl -L get.rexify.org 
| perl - --sudo -n Rex
Installation / Source
Bis hier hin Fragen?
Weiter geht’s mit: Rex
● Installation
● 1. Schritte
● Templates
● 1. Modul
● Verzeichnisstruktur
● Da...
Ausgangspunkt: das Rexfile
user “root“;
password “box“;
Das Rexfile
user “root“;
password “box“;
pass_auth;
Das Rexfile
user “root“;
password “box“;
private_key “/home/jan/.ssh/id_rsa_root“;
public_key “/home/jan/.ssh/id_rsa_root.pub“;
key_au...
user “root“;
password “box“;
group “frontend“ => “fe[01..03]";
task “install_ntpd“, group => “frontend“, make {
install “n...
bash# rex install_ntpd
group “frontend“ => “fe[01..03]";
task “install_ntpd“, group => “frontend“, make {
install “ntpd“;
file “/etc/ntp.conf“,
s...
bash# rex install_ntpd
Das Rexfile
group “frontend“ => “fe[01..03]";
task “install_ntpd“, group => “frontend“, make {
install “ntpd“;
file “/etc/ntp.conf“,
s...
bash# rex install_ntpd
group “frontend“ => “fe[01..03]";
task “install_ntpd“, group => “frontend“, make {
install “ntpd“;
file “/etc/ntp.conf“,
s...
bash# rex install_ntpd
● Benutzer & Gruppen
● Cron
● Filesystem Funktionen
– mkdir, rmdir, ls, ln, rm, chown, chgrp, chmod
– is_file, is_dir, mv,...
http://rexify.org/api/
Mehr Funktionen
Bis hier hin Fragen?
Weiter geht’s mit: Rex
● Installation
● 1. Schritte
● Templates
● 1. Modul
● Verzeichnisstruktur
● Da...
Templates
group “frontend“ => “fe[01..03]";
task “install_ntpd“, group => “frontend“, make {
install “ntpd“;
file “/etc/ntp.conf“,
s...
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enabl...
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enabl...
group “frontend“ => “fe[01..03]";
my $servers = [“ntp01.company.lan“, “ntp02.company.lan“];
task “install_ntpd“, group => ...
Templates
● $eth0_ip
● $eth0_netmask
● $hostname
● $domain
● $architecture
● $kernel
● ...
Bis hier hin Fragen?
Weiter geht’s mit: Rex
● 1. Schritte
● Templates
● 1. Modul
● Verzeichnisstruktur
● Das Modul
● Ein S...
Module
bash# rexify NTP --create-module
├── lib
│ └── NTP
│ ├── meta.yml
│ └── __module__.pm
└── Rexfile
Verzeichnisstruktur
bash# rexify Common::NTP 
--create-module
├── lib
│ └── Common
│ └── NTP
│ ├── meta.yml
│ └── __module__.pm
└── Rexfile
Verzeichnisstruktur
├── lib
│ └── Common
│ └── NTP
│ ├── meta.yml
│ └── __module__.pm
└── Rexfile
Verzeichnisstruktur
> cat lib/NTP/meta.yml
Name: NTP
Description: {{ DESCRIPTION }}
Author: {{ your name <your.name@email.com> }}
License: {{ ...
Bis hier hin Fragen?
Weiter geht’s mit: Rex
● 1. Schritte
● Templates
● 1. Modul
● Verzeichnisstruktur
● Das Modul
● Ein S...
group “frontend“ => “fe[01..03]";
my $servers = [“ntp01.company.lan“, “ntp02.company.lan“];
task “install_ntpd“, group => ...
group “frontend“ => “fe[01..03]";
my $servers = [“ntp01.company.lan“, “ntp02.company.lan“];
task “install_ntpd“, group => ...
package Common::NTP;
use Rex -base;
task example => sub {
my $output = run "uptime";
say $output;
};
1;
Das Modul
package Common::NTP;
use Rex -base;
task “setup“ => make {
my $params = shift;
install “ntpd“;
file “/etc/ntp.conf“,
conte...
├── lib
│ └── NTP
│ ├── files
│ │ └── etc
│ │ └── ntp.conf.tpl
│ ├── meta.yml
│ └── __module__.pm
└── Rexfile
Das Modul
├── files
│ └── etc
│ └── ntp.conf.tpl
├── lib
│ └── NTP
│ ├── files
│ │ └── etc
│ │ └── ntp.conf.tpl
│ ├── meta.yml
│ └──...
├── files
│ └── etc
│ └── ntp.conf.tpl
├── lib
│ └── NTP
│ ├── files
│ │ └── etc
│ │ └── ntp.conf.tpl
│ ├── meta.yml
│ └──...
├── files
│ └── etc
│ └── ntp.conf.tpl
├── lib
│ └── NTP
│ ├── files
│ │ └── etc
│ │ └── ntp.conf.tpl
│ ├── meta.yml
│ └──...
include “NTP“;
group “frontend“ => “fe[01..03]";
my $servers = [“ntp01.company.lan“, “ntp02.company.lan“];
task “prepare“,...
include “NTP“;
group “frontend“ => “fe[01..03]";
my $servers = [“ntp01.company.lan“, “ntp02.company.lan“];
task “prepare“,...
Vielen Dank für Eure Aufmerksamkeit!
Kontakt
Jan Gehring
Systems Architecture
inovex GmbH
Office Pforzheim
Karlsruhe Straß...
Fragen?
http://rexify.org/
irc: freenode / #rex
Nächste SlideShare
Wird geladen in ...5
×

Rex - Infrastruktur als Code

1,594

Published on

Vortrag auf den Kieler Linuxtagen 2013

Published in: Technologie
0 Kommentare
1 Gefällt mir
Statistiken
Notizen
  • Hinterlassen Sie den ersten Kommentar

Keine Downloads
Views
Gesamtviews
1,594
Bei Slideshare
0
Aus Einbettungen
0
Anzahl an Einbettungen
1
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
1
Einbettungen 0
No embeds

No notes for slide
  • Und mit Administrieren meine ich nicht nur mal einen Virtuellen Host anlegen oder einen neuen Benutzer ausrollen. Da gehöhrt auch so sachen dazu wie - Backup prüfen (= würde ein Restore funktionieren) - Updates testen und einspielen
  • Es gibt verschiedene Tools die einem dabei behilflich sind seine tägliche Arbeit zu tun. Wie z.b. Jenkins
  • Es gibt verschiedene Tools die einem dabei behilflich sind seine tägliche Arbeit zu tun. Wie z.b. Jenkins
  • Es gibt verschiedene Tools die einem dabei behilflich sind seine tägliche Arbeit zu tun. Wie z.b. Jenkins
  • Es gibt verschiedene Tools die einem dabei behilflich sind seine tägliche Arbeit zu tun. Wie z.b. Jenkins
  • Ant oder Maven für die Entwickler um Software Releases zu bauen (oder ähnliche Tools für Perl, PHP, Ruby, …) Und Rex, Ansible, Puppet und andere für uns Sys-Admins.
  • Ant oder Maven für die Entwickler um Software Releases zu bauen (oder ähnliche Tools für Perl, PHP, Ruby, …) Und Rex, Ansible, Puppet und andere für uns Sys-Admins.
  • Und noch mehr Tools, wie z.b. Git oder Subversion um unsere Scripte zu verwalten und zu Versionieren.
  • Und noch mehr Tools, wie z.b. Git oder Subversion um unsere Scripte zu verwalten und zu Versionieren.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • z.b. wenn man abteilungsspezifisch trennen will. Fuer NTP ist vielleicht eine zentrale Stelle verantwortlich.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Git Submodule
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Ihr erinnert euch an den ntp task
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Ihr erinnert euch an den ntp task
  • Ihr erinnert euch an den ntp task
  • Ihr erinnert euch an den ntp task
  • Ihr erinnert euch an den ntp task
  • Ihr erinnert euch an den ntp task
  • Ihr erinnert euch an den ntp task
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Wer schreibt, der bleibt... Vergessen war gestern. Wenn wir jetzt nicht mehr genau wissen wie wir etwas vor einem Jahr aufgebaut haben, das Script weiss es noch.
  • Rex - Infrastruktur als Code

    1. 1. Infrastruktur als Code
    2. 2. Wer bin ich? ● Jan Gehring ● System Architekt ● Bei inovex seit 2008
    3. 3. Um was geht’s? ● Von der Turnschuh-Administration ● Zur automatisierten Umgebung
    4. 4. Turnschuh-Administration ● Der unglückliche Umstand, sämtliche Rechner im Netzwerk zu Fuß abklappern zu müssen, um vor Ort administrative Tätigkeiten durchzuführen. http://www.wikiservice.at
    5. 5. Turnschuh-Administration ● Funktioniert bei wenigen Servern ● Kann funktionieren wenn jeder Server unterschiedlich ist ● Skaliert nur durch mehr Mitarbeiter
    6. 6. Turnschuh-Administration Oft gehört...
    7. 7. ● Wirklich? ● Was ist mit – ntp – Benutzer und Gruppen – ssh – logrotate – resolv.conf – profile – Apache Security Einstellungen – ... Jeder Server ist unterschiedlich
    8. 8. ● Wieviele Server kann eine Person administrieren? – 10 – 25 – 50 ● Krankheit oder Urlaub? Skaliert?
    9. 9. ● Der Tag hat 24 Stunden ● Naja, eigentlich nur 8 … Zeit ist knapp
    10. 10. ● Mails lesen und beantworten Zeit ist knapp
    11. 11. ● Mails lesen und beantworten (1-2h) ● Mailinglisten verfolgen (Security, ...) Zeit ist knapp
    12. 12. Sicherheitsproblem im Apache... auch bei uns. Infrastruktur als Code
    13. 13. Muss heute mittag gepatched werden! Infrastruktur als Code
    14. 14. ● Mails lesen und beantworten (1-2h) ● Mailinglisten verfolgen (1h) ● Updates aus der IT Welt (heise, golem, ...) Zeit ist knapp
    15. 15. ● Mails lesen und beantworten (1-2h) ● Mailinglisten verfolgen (1h) ● Updates aus der IT Welt (1h) Zeit ist knapp
    16. 16. Vormittag ist rum Zeit ist knapp
    17. 17. Bleiben noch 4 Stunden Zeit ist knapp
    18. 18. Ein Kollege von der Entwicklung schaut rein, hat ein Problem... Zeit ist knapp
    19. 19. 3 Stunden Zeit ist knapp
    20. 20. Neue Softwarerelease soll deployed werden... Zeit ist knapp
    21. 21. Funktioniert nicht! Zeit ist knapp
    22. 22. Hotfix 1... Zeit ist knapp
    23. 23. Hotfix 2... Zeit ist knapp
    24. 24. -2 Stunden Zeit ist knapp
    25. 25. Feierabend! Zeit ist knapp
    26. 26. Security Update kommt morgen... Zeit ist knapp
    27. 27. .oO( Vielleicht ) Zeit ist knapp
    28. 28. Kommt das bekannt vor? Infrastruktur als Code
    29. 29. Wenn ja, dann seid ihr hier richtig! Infrastruktur als Code
    30. 30. Was braucht man um zu Automatisieren? Infrastruktur als Code
    31. 31. Tools! Infrastruktur als Code
    32. 32. Infrastruktur als Code http://www.immobilienwirtschaft360.de/
    33. 33. Continuous Integration Tool Infrastruktur als Code
    34. 34. Infrastruktur als Code http://jenkins-ci.org/ http://travisci.com/ Bild von: https://www.openshift.com
    35. 35. Configuration/Deployment Management Tool Infrastruktur als Code
    36. 36. Infrastruktur als Code http://www.opscode.com/ Bild von: http://developer.rackspace.com/
    37. 37. Source Control Management Infrastruktur als Code
    38. 38. Infrastruktur als Code http://git-scm.com/ http://mercurial.selenic.com/ http://subversion.tigris.org/
    39. 39. Infrastruktur als Code
    40. 40. Was bedeutet das? Infrastruktur als Code
    41. 41. ● Das Wissen über die Infrastruktur ist nicht in eurem Kopf sondern in einem Script. ● Wenn ihr mal krank seid kann ein Kollege kucken wie es funktioniert und muss nicht stören. ● Das gilt auch für den Urlaub. ● Oder wenn ihr mal die Firma gewechselt habt. Was bedeutet das?
    42. 42. Außerdem macht es sich gut bei einem Bewerbungsgespräch...
    43. 43. Inovex sucht übrigens Linux System Engineers!
    44. 44. ● Wenn es nur von einem verwendet / upgedatet wird? ● Wenn es nur auf einer Plattform läuft? Was bringt uns ein Script?
    45. 45. ● Dezentrale Versionsverwaltung ● Funktioniert auch offline ● Schöne Oberflächen Git – und jeder macht mit
    46. 46. Git – und jeder macht mit http://gitlab.org/
    47. 47. ● Dezentrale Versionsverwaltung ● Funktioniert auch offline ● Schöne Oberflächen ● Scripte sind versioniert ● Vielleicht machen auch die Entwickler mit ● Man lernt dazu Git – und jeder macht mit
    48. 48. ● Unterschiedliche Entwicklungszweige ● Für Testsysteme ein Entwicklungszweig (branch) ● Für Livesysteme ein „Production“ Branch Git – und jeder macht mit
    49. 49. Git – und jeder macht mit http://erickryski.com/
    50. 50. ● Standard Aufgaben kann man hier hinterlegen – Testen des Development Branchs – Automatische Prüfung von Backup/Restore – Deployment von neuen Software-Releases – Erstellen von Test-VMs – … ● Gibt auch eine Android / iPhone App Jenkins – Ein-Klick Administration
    51. 51. Jenkins – Ein-Klick Administration
    52. 52. http://devcentral.f5.com/
    53. 53. ● Keine selbst geschriebenen Scripte – Auf die Arbeit von anderen aufbauen ● Ganz einfaches Perl – Kennt eigentlich jeder – Lesbar ● Benötigt (fast) nichts auf dem Zielsystem ● Kein Agent nötig ● Verwendet SSH ● Logik läuft auf dem lokalen Rechner Rex – Remote Execution
    54. 54. ● Wird entwickelt seid 2010 ● Genau für dieses Einsatzgebiet ● Bruch der Kompatibilität = Bug ● Aktive Community ● Professioneller Support verfügbar Rex – Remote Execution
    55. 55. Bis hier hin Fragen? Weiter geht’s mit: Rex ● Begrifflichkeiten ● Rex Interna ● Aus der Praxis ● Installation ● 1. Schritte ● ... Infrastruktur als Code
    56. 56. Begrifflichkeiten Was ist was? Infrastruktur als Code
    57. 57. WKS Rex Workstation
    58. 58. WKS Rex SSH Workstation
    59. 59. SRV02SRV01 SRV03 SRV04 SRV05 SRV06 WKS Rex SSH Workstation & Server
    60. 60. Gruppen
    61. 61. LB01 LB02 FE01 FE03FE02 MW01 MW02 DBS01 DBS02 DBM01 Gruppen
    62. 62. DB Write DB Read Middleware Frontend Loadbalancer LB01 LB02 FE01 FE03FE02 MW01 MW02 DBS01 DBS02 DBM01 Funktions-Gruppen
    63. 63. group “ourgroup“ => “server1“, “server2“, “server3“; Funktions-Gruppen
    64. 64. group “ourgroup“ => “server1“, “server2“, “server3“; Funktions-Gruppen
    65. 65. group “ourgroup“ => “server1“, “server2“, “server3“; Funktions-Gruppen
    66. 66. group “ourgroup“ => “server[1..3]“; Funktions-Gruppen
    67. 67. group “ourgroup“ => “server[01..03]“; Funktions-Gruppen
    68. 68. group “ourgroup“ => get_servers_from_db(); Funktions-Gruppen
    69. 69. Environments
    70. 70. LIVE STAGE TEST Loadbalancer Frontend Middleware DB Read DB Write LB01 LB02 FE01 FE03FE02 MW01 MW02 DBS01 DBS02 DBM01 LB01 FE01 MW01 DBS01 DBM01 FE01 MW01 DBM01
    71. 71. environment “live“ => sub { group “frontend“ => “fe01[01..03].live“; }; environment “stage“ => sub { group “frontend“ => “fe01.stage“; }; environment “test“ => sub { group “frontend“ => “fe01.test“; }; Environments
    72. 72. environment “live“ => sub { group “frontend“ => “fe01[01..03].live“; }; environment “stage“ => sub { group “frontend“ => “fe01.stage“; }; environment “test“ => sub { group “frontend“ => “fe01.test“; }; Environments
    73. 73. environment “live“ => sub { group “frontend“ => “fe01[01..03].live“; }; environment “stage“ => sub { group “frontend“ => “fe01.stage“; }; environment “test“ => sub { group “frontend“ => “fe01.test“; }; Environments
    74. 74. Tasks
    75. 75. task “mytask“, group => “ourgroup“, make { }; Tasks
    76. 76. task “mytask“, group => “ourgroup“, make { }; Tasks
    77. 77. task “mytask“, group => “ourgroup“, make { }; Tasks
    78. 78. task “mytask“, group => “ourgroup“, make { }; Tasks
    79. 79. task “mytask“, group => “ourgroup“, make { }; Tasks
    80. 80. task “mytask“, group => “ourgroup“, make { }; Tasks
    81. 81. task “mytask“, group => “ourgroup“, make { run “unzip -q /tmp/my.zip“; }; Tasks
    82. 82. task “mytask“, group => “ourgroup“, make { run “unzip -q /tmp/my.zip“; }; Tasks
    83. 83. task “mytask“, group => “ourgroup“, make { run “unzip -q /tmp/my.zip“; }; Tasks
    84. 84. Bis hier hin Fragen? Weiter geht’s mit: Rex ● Begrifflichkeiten ● Rex Interna ● Aus der Praxis ● Installation ● 1. Schritte ● ...
    85. 85. Aufteilung in Module und Services
    86. 86. ● Unabhängig ● Wiederverwendbar ● Für einen Einsatzzweck gemacht Module sind
    87. 87. ... ein spezieller Dienst Services sind ...
    88. 88. z.b.: der Intranet-Server Services sind ...
    89. 89. oder: der Proxy-Server Services sind ...
    90. 90. oder: das Frontend Services sind ...
    91. 91. Bis hier hin Fragen? Weiter geht’s mit: Rex ● Begrifflichkeiten ● Rex Interna ● Aus der Praxis ● Installation ● 1. Schritte ● ...
    92. 92. Installation
    93. 93. echo 'deb http://rex.linux-files.org/ubuntu/ precise rex' >> /etc/apt/sources.list wget -O - http://rex.linux-files.org/DPKG-GPG-KEY-REXIFY-REPO | apt-key add - apt-get update apt-get install rex Installation / Ubuntu
    94. 94. Installation / CentOS rpm –import http://rex.linux-files.org/RPM-GPG-KEY-REXIFY-REPO.CENTOS6 cat >/etc/yum.repos.d/rex.repo <<EOF [rex] name=Fedora $releasever - $basearch - Rex Repository baseurl=http://rex.linux-files.org/CentOS/$releasever/rex/ $basearch/ enabled=1 EOF yum install rex
    95. 95. Installation / Windows ● Strawberry-Perl (http://strawberryperl.com/) ● cmd> cpanm Rex
    96. 96. curl -L get.rexify.org | perl - --sudo -n Rex Installation / Source
    97. 97. Bis hier hin Fragen? Weiter geht’s mit: Rex ● Installation ● 1. Schritte ● Templates ● 1. Modul ● Verzeichnisstruktur ● Das Modul ● Ein Service
    98. 98. Ausgangspunkt: das Rexfile
    99. 99. user “root“; password “box“; Das Rexfile
    100. 100. user “root“; password “box“; pass_auth; Das Rexfile
    101. 101. user “root“; password “box“; private_key “/home/jan/.ssh/id_rsa_root“; public_key “/home/jan/.ssh/id_rsa_root.pub“; key_auth; Das Rexfile
    102. 102. user “root“; password “box“; group “frontend“ => “fe[01..03]"; task “install_ntpd“, group => “frontend“, make { install “ntpd“; }; Das Rexfile
    103. 103. bash# rex install_ntpd
    104. 104. group “frontend“ => “fe[01..03]"; task “install_ntpd“, group => “frontend“, make { install “ntpd“; file “/etc/ntp.conf“, source => “files/etc/ntp.conf“, owner => “root“, group => “root“, mode => 644; }; Das Rexfile
    105. 105. bash# rex install_ntpd Das Rexfile
    106. 106. group “frontend“ => “fe[01..03]"; task “install_ntpd“, group => “frontend“, make { install “ntpd“; file “/etc/ntp.conf“, source => “files/etc/ntp.conf“, owner => “root“, group => “root“, mode => 644; service ntpd => ensure => “started“; }; Das Rexfile
    107. 107. bash# rex install_ntpd
    108. 108. group “frontend“ => “fe[01..03]"; task “install_ntpd“, group => “frontend“, make { install “ntpd“; file “/etc/ntp.conf“, source => “files/etc/ntp.conf“, owner => “root“, group => “root“, mode => 644, on_change => make { service ntpd => “restart“ }; service ntpd => ensure => “started“; }; Das Rexfile
    109. 109. bash# rex install_ntpd
    110. 110. ● Benutzer & Gruppen ● Cron ● Filesystem Funktionen – mkdir, rmdir, ls, ln, rm, chown, chgrp, chmod – is_file, is_dir, mv, cp, mount, umount, ... ● LVM ● Kernel ● Process-Management ● Virtualization (KVM, Xen) ● Cloud (Amazon, Jiffybox, OpenNebula, ...) Mehr Funktionen
    111. 111. http://rexify.org/api/ Mehr Funktionen
    112. 112. Bis hier hin Fragen? Weiter geht’s mit: Rex ● Installation ● 1. Schritte ● Templates ● 1. Modul ● Verzeichnisstruktur ● Das Modul ● Ein Service
    113. 113. Templates
    114. 114. group “frontend“ => “fe[01..03]"; task “install_ntpd“, group => “frontend“, make { install “ntpd“; file “/etc/ntp.conf“, source => “files/etc/ntp.conf“, owner => “root“, group => “root“, mode => 644, on_change => make { service ntpd => “restart“ }; service ntpd => ensure => “started“; }; Templates
    115. 115. driftfile /var/lib/ntp/ntp.drift statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable server ntp01.intern.lan server ntp02.intern.lan restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery restrict 127.0.0.1 restrict ::1 Templates
    116. 116. driftfile /var/lib/ntp/ntp.drift statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable <% for my $server (@{ $servers }) { %> server <%= $server %> <% } %> restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery restrict 127.0.0.1 restrict ::1 Templates
    117. 117. group “frontend“ => “fe[01..03]"; my $servers = [“ntp01.company.lan“, “ntp02.company.lan“]; task “install_ntpd“, group => “frontend“, make { install “ntpd“; file “/etc/ntp.conf“, content => template(“files/etc/ntp.conf.tpl“, servers => $servers), owner => “root“, group => “root“, mode => 644, on_change => make { service ntpd => “restart“ }; service ntpd => ensure => “started“; }; Templates
    118. 118. Templates ● $eth0_ip ● $eth0_netmask ● $hostname ● $domain ● $architecture ● $kernel ● ...
    119. 119. Bis hier hin Fragen? Weiter geht’s mit: Rex ● 1. Schritte ● Templates ● 1. Modul ● Verzeichnisstruktur ● Das Modul ● Ein Service
    120. 120. Module
    121. 121. bash# rexify NTP --create-module
    122. 122. ├── lib │ └── NTP │ ├── meta.yml │ └── __module__.pm └── Rexfile Verzeichnisstruktur
    123. 123. bash# rexify Common::NTP --create-module
    124. 124. ├── lib │ └── Common │ └── NTP │ ├── meta.yml │ └── __module__.pm └── Rexfile Verzeichnisstruktur
    125. 125. ├── lib │ └── Common │ └── NTP │ ├── meta.yml │ └── __module__.pm └── Rexfile Verzeichnisstruktur
    126. 126. > cat lib/NTP/meta.yml Name: NTP Description: {{ DESCRIPTION }} Author: {{ your name <your.name@email.com> }} License: {{ THE LICENSE }} # If you have dependencies to other Rex Modules. Require: - Other::Rex::Module - 2nd::Rex::Module Verzeichnisstruktur
    127. 127. Bis hier hin Fragen? Weiter geht’s mit: Rex ● 1. Schritte ● Templates ● 1. Modul ● Verzeichnisstruktur ● Das Modul ● Ein Service
    128. 128. group “frontend“ => “fe[01..03]"; my $servers = [“ntp01.company.lan“, “ntp02.company.lan“]; task “install_ntpd“, group => “frontend“, make { install “ntpd“; file “/etc/ntp.conf“, content => template(“files/etc/ntp.conf.tpl“, servers => $servers), owner => “root“, group => “root“, mode => 644, on_change => make { service ntpd => “restart“ }; service ntpd => ensure => “started“; }; Das Modul
    129. 129. group “frontend“ => “fe[01..03]"; my $servers = [“ntp01.company.lan“, “ntp02.company.lan“]; task “install_ntpd“, group => “frontend“, make { install “ntpd“; file “/etc/ntp.conf“, content => template(“files/etc/ntp.conf.tpl“, servers => $servers), owner => “root“, group => “root“, mode => 644, on_change => make { service ntpd => “restart“ }; service ntpd => ensure => “started“; }; Das Modul
    130. 130. package Common::NTP; use Rex -base; task example => sub { my $output = run "uptime"; say $output; }; 1; Das Modul
    131. 131. package Common::NTP; use Rex -base; task “setup“ => make { my $params = shift; install “ntpd“; file “/etc/ntp.conf“, content => template(“files/etc/ntp.conf.tpl“, %{ $params }), owner => “root“, group => “root“, mode => 644, on_change => make { service ntpd => “restart“ }; service ntpd => ensure => “started“; }; 1; Das Modul
    132. 132. ├── lib │ └── NTP │ ├── files │ │ └── etc │ │ └── ntp.conf.tpl │ ├── meta.yml │ └── __module__.pm └── Rexfile Das Modul
    133. 133. ├── files │ └── etc │ └── ntp.conf.tpl ├── lib │ └── NTP │ ├── files │ │ └── etc │ │ └── ntp.conf.tpl │ ├── meta.yml │ └── __module__.pm └── Rexfile Das Modul
    134. 134. ├── files │ └── etc │ └── ntp.conf.tpl ├── lib │ └── NTP │ ├── files │ │ └── etc │ │ └── ntp.conf.tpl │ ├── meta.yml │ └── __module__.pm └── Rexfile Das Modul
    135. 135. ├── files │ └── etc │ └── ntp.conf.tpl ├── lib │ └── NTP │ ├── files │ │ └── etc │ │ └── ntp.conf.tpl │ ├── meta.yml │ └── __module__.pm └── Rexfile Das Modul
    136. 136. include “NTP“; group “frontend“ => “fe[01..03]"; my $servers = [“ntp01.company.lan“, “ntp02.company.lan“]; task “prepare“, group => “frontend“, make { NTP::setup(servers => $servers); }; Das Modul / der Service
    137. 137. include “NTP“; group “frontend“ => “fe[01..03]"; my $servers = [“ntp01.company.lan“, “ntp02.company.lan“]; task “prepare“, group => “frontend“, make { NTP::setup(servers => $servers); }; Das Modul / der Service
    138. 138. Vielen Dank für Eure Aufmerksamkeit! Kontakt Jan Gehring Systems Architecture inovex GmbH Office Pforzheim Karlsruhe Straße 71 75179 Pforzheim +49 (0)173 3181 133 jan.gehring@inovex.de
    139. 139. Fragen? http://rexify.org/ irc: freenode / #rex
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×