Obwohl Linux als freie Software kostenlos verfügbar ist, setzen viele beim Unternehmenseinsatz auf Enterprise-Distributionen mit Support. Wo die Stärken der ... (mehr)

Rollenbasierte Verwaltung

In größeren Umgebungen sind oft eine ganze Reihe von Servern für bestimmte Aufgaben zuständig. Mit den von Fabric angebotenen Rollen lassen sie sich zusammenfassen und in eigenen Skripts verwenden. Dazu dient die Variable »roledefs« :

env.hosts = ['www1', 'www2']
env.roledefs = {
   'web': ['www1', 'www2']
}

Um einen Task nur für bestimmte Rollen auszuführen, gibt man ihn auf der Kommmandozeile hinter dem Schalter »-R« an.

Ein etwas komplizierteres Beispiel legt eine Django-basierte Webanwendung zugrunde, bei der typischerweise während der Entwicklung die Datenbank mit sogenannten Migrations regelmäßig zu aktualisieren ist ( Listing 2 ). Der dazu gehörige Fabric-Task aktualisiert also erst die notwendigen Python-Pakete, installiert den Code auf allen beteiligten Rechnern und führt die Datenbankoperationen einmalig auf dem Datenbank-Server aus. List 3 zeigt das Skript dafür.

Listing 2

Migration einer Django-Datenbank

01 def get_code():
02    with cd("/home/web"):
03       run("git pull -t origin master")
04
05 def update_pip():
06       run("pip install -U -r /home/web/requirements.txt")
07
08 @task
09 @runs_once
10 @roles('db')
11 def update_tables():
12    # Create new tables
13    run('./manage.py syncdb')
14    # Migrate existing tables and data
15    run('./manage.py migrate')
16
17 @task
18 @roles('web')
19 def restart_apache():
20    sudo("/etc/init.d/apache2 restart")
21
22 @task
23 def deploy():
24    get_code()
25    update_pip()
26    execute('update_tables')
27    execute('restart_apache')

Angepasst

Der mit »fab deploy« gestartete »deploy« -Task führt zuerst auf allen Rechnern »git pull« im Verzeichnis »/home/web« aus. Auch die in der Datei »/home/web/requirements.txt« aufgeführen Python-Pakete werden auf allen Rechnern aktualisiert. Der Sub-Task »update_tables« läuft dagegen nur einmal ( »@runs_once« ) und nur auf dem Datenbank-Server ( »@roles('db')« ) ab. Analog wird der Apache-Servern auf allen Rechnern der »web« -Rolle neu gestartet.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023