Der vielleicht interessanteste Teil des Nix-Projekts baut auf den bisher beschriebenen Komponenten auf und bringt sie in einem Kontext zur Anwendung, für den sich die Prinzipien des Projekts am besten eignen: Virtualisierung und Cloud Computing. Wenn es darum geht, eine mehr oder weniger große Anzahl virtueller Maschinen bereitzustellen, bietet sich zumindest die deklarative Festlegung ihrer Konfiguration schon einmal an. Umso besser, wenn sich das, wie im Fall von NixOS, damit verbinden lässt, die Funktionalität der VMs sicherzustellen und zu testen.
Die Basis für NixOps ist das gleichnamige Tools, das sich sehr leicht installieren lässt, wenn man schon den Nix-Paketmanager verwendet. Am einfachsten geht das Ganze in jedem Fall mit NixOS. NixOps ist dann mit einem Aufruf von
»nix-env -i nixops
«
im Handumdrehen installiert. Die Beschreibung einer einfachen VM, die anschließend in Virtualbox laufen soll, ist in
Listing 3
zu sehen. Das Beispiel stammt aus dem NixOps-Manual
[2]
und demonstriert, wie wenig Information für eine virtuelle Maschine nötig ist. Neben der Beschreibung genügen wenige Zeilen, um einen Webserver zu starten und das Document-Root auf ein bestimmtes Verzeichnis – in diesem Fall die Valgrind-Dokumentation – einzustellen. Eine weitere Datei, in
Listing 4
zu sehen, legt die Deployment-Variablen fest, also Virtualbox als Target-Umgebung sowie die Größe des Hauptspeichers.
Listing 4
trivial-vbox.nix
Listing 3
trivial.nix
Der folgender Aufruf erzeugt aus den Beschreibungen schließlich eine virtuelle Maschine mit dem Namen
»test
«
:
nixops create ./trivial.nix ./trivial-vbox.nix -d test
Inspiziert man den Zustand der neuen VM mit
»nixops info -d test
«
, wird man feststellen, dass dieser derzeit beim Status
»New
«
verharrt. Das bedeutet, im Wesentlichen ist noch gar nichts passiert, es gibt noch keine VM, sie wurde bisher praktisch nur reserviert. Erst das Kommando
»nixops deploy -d test
«
sucht sich die nötigen Dateien, setzt die VM zusammen und startet sie auf der Deployment-Plattform, hier Virtualbox. Wie das NixOps-Manual demonstriert, lassen sich auf die gleiche Art auch Multi-Machine-Setups aufbauen, etwa für Loadbalancer.
In der Praxis wird man vermutlich seltener Virtualbox als Deployment-Plattform einsetzen, sondern seine VMs beispielsweise in der Amazon-Cloud betreiben, die NixOps ebenso unterstützt. Support bietet NixOps dabei insbesondere für die Dienste EC2, S3-Storage und den Simple Queue Service (SQS) sowie Authentifizierung über den IAM (Identity and Access Management) und SSH-Schlüsselpaare.
Obwohl sich NixOps schwerpunktmäßig auf virtualisierte Systeme konzentriert, bietet es interessanterweise auch die Möglichkeit, physische Systeme für den Hosting-Provider Hetzner [4] zu installieren, also sogenanntes Bare Metal Deployment. Hierbei greift NixOps zum Deployment nicht wie bei Amazon auf eine Storage-API zurück, um eine VM zu installieren, sondern verwendet die von Hetzner bereitgestellte Rettungs-Console, um das neue System zu bootstrappen. Prinzipiell spricht nichts dagegen, diese Methode auch auf andere Hoster und Cloud-Anbieter anzuwenden und ähnliche Backends dafür zu schreiben. Solche Unterstützung wäre in der NixOps-Community sicher willkommen.