Angenommen, ich habe einen Host, bei dem es sich unter anderem um einen Webserver handelt, auf dem die zugehörige Ansible-Rolle installiert wird nginx
, der einige wichtige Konfigurationsschritte ausführt /etc/nginx
und die Ports 80 und 443 in der Firewall öffnet.
Irgendwann möchte ich, dass dieser bestimmte Host kein Webserver mehr ist, weil ich diesen Service aus irgendeinem Grund an einen anderen Ort verlegt habe. Wenn Sie den Server nur aus [webservers]
dem Inventar entfernen, verbleibt Müll auf dem Server. Im Idealfall möchte ich deinstallieren nginx
, das /etc/nginx
Verzeichnis (und einige andere Verzeichnisse) entfernen und die Ports 80 und 443 in der Firewall schließen.
In Puppet kann ich das machen. Ein Host, der ein Webserver ist, hat in seiner Konfiguration etwa Folgendes:
class { 'nginx':
ensure => present,
}
und alles, was ich tun muss, ist, "Gegenwart" durch "Abwesend" zu ersetzen. Wenn die nginx
Klasse gut geschrieben ist, werden die vorgenommenen Änderungen rückgängig gemacht. (In der Regel ersetzt ein Administrator "Vorhanden" durch "Abwesend". Wenn er später sicher ist, dass alle betroffenen Hosts die Konfiguration rückgängig gemacht haben, entfernt er das Element aus dem Manifest.)
Außerdem werden vom Puppet-Firewall-Modul automatisch Firewall-Regeln entfernt, die nicht mehr im Manifest enthalten sind. Daher denke ich, dass Sie für die Firewall nicht einmal das "fehlende" oben tun müssen, da die Firewall sowieso automatisch geschlossen wird.
Wie kann ich diese Dinge mit Ansible erreichen?
ensure => present
ensure => absent
ändern und Nginx deinstallieren, das zuvor installiert wurde, indem ich zu dem wechsle , der auch ... Wie man dasselbe mit Ansible macht" usw. Idealerweise mit einem Beispiel für alles, was Sie bereits versucht haben.Antworten:
Mit Ansible würden Sie das nicht wirklich anders machen als mit Puppet.
In deinem Beispiel, wo du setzen würdest
Sie verlassen sich darauf, dass der Autor dieses Marionettenmoduls den erforderlichen Code geschrieben hat, um alles zu entfernen. Nicht jedes Puppenmodul hat dies.
In ähnlicher Weise verfügen Sie bei Ansible möglicherweise über Rollen, die sowohl die erforderlichen Schritte zum Installieren als auch zum Entfernen enthalten. Der Unterschied besteht nur darin, wie man die beiden aufruft.
Ein Ansatz könnte ein Ansatz sein, bei dem die betreffende Rolle eine Variable zum Umschalten des Verhaltens verfügbar macht. Beispielsweise kann diese Nginx-Rolle eine Variable annehmen,
nginx_state
die die Werteinstalled
und annimmtabsent
.In den Rollen
tasks/main.yml
könnte der Rollenautor etwas in der Art von ... haben...mit der jeweiligen Installations- / Deinstallationslogik, die auf diese beiden bedingten Dateien aufgeteilt wird.
Ansible Rollen können auch verschachtelt werden. Als eine andere Möglichkeit, das Gleiche zu tun, könnte ein Rollenautor beispielsweise eine Rolle
nginx
mit einer anderen Rolle in sich bereitstellen, die als "Rolle" bezeichnet wirduninstalled
. Sie könnten dann tun:Ansible hat im Vergleich zu Puppet vermutlich weniger Regeln und Richtlinien, wie Dinge zu tun sind, so dass die Praktiken in der Natur ein bisschen mehr variieren, aber die gleichen Konzepte gelten.
quelle
- { role: nginx, state: absent }
) zu übergeben, aber es scheint mir äußerst ausführlich zu sein. Der einzige Nachteil der verschachtelten Rolle, die ich gesehen habe, war, dass ich die Standardvariablen vom übergeordneten Objekt verknüpfen musste.roles: -nginx/uninstalled
funktioniert? Ich habe überall nachgesehen, kann aber keine Dokumentation zu Sammelrollen finden, die mir dies ermöglicht.Da Sie Ihre Konfiguration / Bereitstellung in Ansible haben, können Sie einfach den gesamten Server wegblasen, einen neuen Server neu installieren / bereitstellen und einen guten, sauberen und bekannten Status haben, um damit zu arbeiten.
Wenn Sie es tatsächlich für andere Zwecke "neu konfigurieren" möchten, müssen Sie ein neues Playbook erstellen, das die erforderlichen Bereinigungsaufgaben ausführt.
Soweit mir bekannt ist, unterstützen alle Ansible- Paketmodule, um
state=absent
sicherzustellen, dass ein bestimmtes Paket nicht auf Ihrem Server installiert ist. Darüber hinaus verfügt dasapt
Modul überpurge=yes
Parameter, die alle verbleibenden benutzerdefinierten Konfigurationsdateien bereinigen.Sie können auch Aufgaben erstellen, um zu bestätigen, dass Port 80 durch eine Firewall geschützt ist. Da auf diesem Port jedoch keine Prozesse ausgeführt werden, hat die Firewalling-Funktion keinen Einfluss auf die Sicherheit Ihres Servers.
quelle
state=absent
hinzugefügt werden können. Es besteht eine gute Chance, dass ein Großteil der von Ihnen vorgenommenen Konfigurationsänderungen gelöscht oder rückgängig gemacht wird. Je nachdem, wie groß die Rolle ist, kann dies eine echte PITA sein, die getestet werden muss.