Release und Patch Management mit SUSE Manager 3

Das SUSE Manager 3 beta Programm ist Ende Dezember 2015 gestartet worden. Diese Gelegenheit wollten wir nutzen, um uns einen ersten Überblick zu verschaffen, was die kommende Version beinhalten wird. Vorneweg, die wichtigste Änderung ist die Integration von SaltSack als Remote Execution und Configuration Management Framework.
Für diesen Blog Post haben wir uns folgenden Anwendungsfall ausgesucht und ein kurze Anleitung, wie es in der Praxis umgesetzt würde, verfasst.

Szenario

Damit in grösseren IT-Systemlandschaften ein vernünftiges Release und Patch Management durchgeführt werden kann, werden oft identische Systeme in unterschiedlichen Umgebungen (phases oder stages) betrieben. Steht ein neuer Release oder ein Patch zur Verfügung, werden diese zuerst auf den Entwicklungssystemen eingespielt und durchlaufen dann einige Tests und eventuelle Anpassungen, bevor sie auf den produktiven Systemen ausgerollt werden.

Der SUSE Manager liefert für dieses Szenario eine einfache Lösung. Damit einzelne Patches und Pakete von einer Umgebung in die nächste weitergereicht werden können. Zudem ist es möglich einen gesamten Stand oder ein Snapshot eines definierten Zeitpunkts von einer Umgebung in die nächste zu synchronisieren.

Voraussetzungen

Die beschriebenen Konfigurationen setzen voraus, dass ein SUSE Manger 3 installiert und mindestens ein Client System mit SLES11 oder SLES12 als Salt Minion angebunden ist.

Konfiguration

Damit das komplette Setup in der Shell durchgeführt werden kann, müssen die Pakete spacewalk-utils und spacecmd installiert werden.

suma3:~ # zypper in -y spacewalk-utils spacecmd

Dann lassen wir uns die bestehenden Software Channels anzeigen.

suma3:~ # spacewalk-manage-channel-lifecycle \
-u admin -p $PASSWORD -l

Zum jetzigen Zeitpunkt ist nur ein Channel zu sehen. Im sogenannte Vendor Channel liegen alle Pakete und Patches die vom SCC heruntergeladen werden.
Also ein Mirror der aktuellsten Paketen von SUSE.

Nun werden die vier Umgebungen (phases) erstellt.

suma3:~ # spacewalk-manage-channel-lifecycle \
-u admin -p $PASSWORD \
--channel sles12-sp1-pool-x86_64 --init \
-P devl,test,inte,prod
suma3:~ # for PHASE in devl test inte prod ; do
> spacewalk-manage-channel-lifecycle \
> -u admin -p $PASSWORD \
> --channel $PHASE-sles12-sp1-pool-x86_64 \
> --promote -P devl,test,inte,prod
> done

Werden die Umgebungen (phases) nicht explizit mit-P angegeben, wird als Standard (dev, test, prod) verwendet. Wird der Channel tree jetzt noch einmal mit dem oben genannten Befehl angezeigt, sind die fünf Base Channels zu sehen. Der Vendor- und die vier erstellten Umgebungs-Channels (devl, test, inte, prod).

Damit wir die Konfiguration testen können, weisen wir ein SUSE Manager Client System einer Umgebung zu, in unserem Beispiel der Test-Umgebung.

suma3:~ # spacecmd -u admin -p $PASSWORD -y \
system_setbasechannel suma3-client1.example \
test-sles12-sp1-pool-x86_64

Auf dem Client System kann mit folgendem Befehl überprüft werden, ob die Zuweisung funktioniert hat.

suma3-client1:~ # zypper lr

Es erscheinen nur Repositories der zugeteilten Umgebung.

Ab jetzt ist es möglich, über das WebUI oder das CLI einzelne Pakete oder Patches in eine Umgebung zu importieren, oder eine Umgebung mit einer anderen zu synchronisieren.

Hinter den Kulissen

Sobald ein Client System einem Base Channel zugewiesen ist, wird auf dem SUSE Manager, welcher als Salt Master läuft, eine Datei mit den entsprechenden Repositories erstellt.

suma3:~ # cd /srv/susemanager/salt/channels ; \
> cat channels.repo.044625baad3d49889f067f14d7cae86f
[susemanager:test-sles12-sp1-pool-x86_64]
name=test-sles12-sp1-pool-x86_64
enabled=1
autorefresh=1
baseurl=https://suma3.example/rhn/manager/download/test-sles12-sp1-pool-x86_64?eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0ODc4MzU1NDgsImlhdCI6MTQ1NjI5OTU0OCwibmJmIjoxNDU2Mjk5NDI4LCJvcmciOjEsImp0aSI6IlRrYldFQWUwaHZGdzNZUklQQk1aWmcifQ.cmGZyuMU_SJT_fHRmj9X0zP7vM1A2KwWgNRp6m4BDcI
[...]

Das Suffix des Dateinamens entspricht der Salt Minion ID des jeweiligen Client, in unserem Falle der ID von suma3-client1.example.

Anschliessend führt der SUSE Manager den folgenden Befehl aus, welcher die Datei /etc/zypp/repos.d/susemanager:channels.repo auf dem Zielsystem suma3-client1.example neu schreibt, falls es Abweichungen zur lokalen Version gibt.

suma3:~ # salt 'suma3-client1.example' state.apply

Interaktion Spacewalk / SaltStack

Spacewalk übergibt dem Salt Master seine Befehle über dessen Rest API, und als Client Library wird die von SUSE entwickelte salt-netapi-client verwendet.

Fazit

Dieses Setup liess sich dank dem Configuration Management von SaltStack sehr einfach durchführen. Im Vergleich zu Vorgängerversionen des SUSE Manager, die als Client Stack rhns verwendeten, war die Konfiguration um einiges schlanker und die Repository-Quellen wurden schneller den Clients zugeteilt.
Die Integration von SaltStack ist eine Bereicherung für den SUSE Manager, welche nicht nur im beschriebenen Anwendungsfall erhebliche Vorteile mit sich bringt.