Ich wollte abseits von Puppet und Ansible mal eine andere Automatisierungssprache anreißen. Wieso also nicht mal Chef!
Wie fängt man am einfachsten mit Chef als Automatisierungssprache an?
Chef besteht simpel gesagt aus ruby Skripten welche sequentiell abgearbeitet werden. (Loops gehen schon, würden aber den Blog Artikel sprengen)
Wir fangen mit einem Ruby file an welches wir Notice.rb nennen.
Als praxisnahes Beispiel legen wir eine “Textdatei” in /etc/ an. Dies könnte somit eine prekonfigurierte Konfigdatei eines Programmes sein.
[ruby]file ‘/etc/motd’ do
content ‘Next maintenance window is Fri from 10 pm to Sat 3 am’
end[/ruby]
Woraus besteht Recipe Codeblock ?
File als erstes gibt den Ressourcen Typ an. dieser kann auch Package sein oder Service sein.
Es gibt noch viele mehr auf der Chef Seite in der dortigen Doku können Sie erforscht werden 🙂
Danach folgt der Pfad inklusive des Dateinamens hier in diesem Fall ‘/etc/motd’ es könnte aber auch z.B. ‘/home/User_xy/.bashrc’ sein.
Gefolgt von dem Loopblock welcher mit do eingeleitet wird und mit end geschlossen.
Dazwischen sind die Anweisungen was abgearbeitet werden soll bzw. welche Attribute geändert oder modifiziert werden sollen.
Da wir in diesen Fall die Datei erstellen haben wir ein content Attribut welches den Inhalt der Datei definiert.
Darin eine simple Benachrichtigung plain Text.
Wie erreichen wir nun mit diesem Ruby file unseren gewünschten Zustand ?
Ähnlich wie bei Ansible oder Puppet benötigen wir einen Agent-Daemon der für uns die Anweisungen umsetzt. Dieser ist chef-apply welches als Kommando duch das Chef DK (Development Kit installiert wird)
Dies findet man unter: https://www.chef.io/downloads/tools/chefdk
Da ich doch leider sehr CentOS affin bin nehme ich mir das RHEL Package.
https://packages.chef.io/files/stable/chefdk/3.3.23/el/7/chefdk-3.3.23-1.el7.x86_64.rpm
mit einem simplen & fixen
[bash]rpm -ivh chefdk-3.3.23-1.el7.x86_64.rpm[/bash]
wird das Paket installiert und bietet uns nun die Chef Kommandos an.
Ordentliche Mensche erstellen einen Ordner in dem wir unsere Ruby Recipes unterbringen.
Chef bietet aber auch ein Standard Template an welches wir nutzen können aber zu erst erstellen wir uns einen Ordner.
[shell]mkdir ~/cookbooks && cd cookbooks
chef generate cookbook motd_notify_downtime[/shell]
Nun kreiert uns Chef ein Standard cookbook ohne spezifischen Inhalt.
Hier die Baumstruktur eines solchen Ordners.
[shell]
tree ~/cookbooks/motd_notify_downtime/
motd_notify_downtime/
├── Berksfile
├── CHANGELOG.md
├── chefignore
├── LICENSE
├── metadata.rb
├── README.md
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
[/shell]
In den unter Ordner namens recipes sollen wir unsere notice.rb bewegen.
[bash]
mv notice.rb ~/cookbooks/motd_notify_downtime/recipes
rm default.rb
mv notice.rb default.rb
[/bash]
Ob unser Automatismus auch funktioniert prüfen wir mit einem Aufruf.
Wir haben folgende möglichkeiten:
[shell]chef-apply notice.rb[/shell]
für das einzelne Rezept oder für das ganze cookbook welches wir gerade erstellt haben
[shell]cd cookbooks && chef-client –local-mode –runlist ‘recipe[motd_notify_downtime]'[/shell]
Dies sollte von dem folgenden Output begleitet werden
[shell]
chef-client –local-mode –runlist ‘recipe[motd_notify_downtime]’
[2018-10-25T16:14:05+00:00] WARN: No config file found or specified on command line, using command line options.
Starting Chef Client, version 14.5.33
resolving cookbooks for run list: ["motd_notify_downtime"]
Synchronizing Cookbooks:
– motd_notify_downtime (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks…
Converging 1 resources
Recipe: motd_notify_downtime::default
* file[/etc/motd] action create
– create new file /etc/motd
– update content in file /etc/motd from none to b564d0
— /etc/motd 2018-10-25 16:14:08.249701189 +0000
+++ /etc/.chef-motd20181025-9251-18htv9n 2018-10-25 16:14:08.249701189 +0000
@@ -1 +1,2 @@
+To All Users who Login into this Machine next maintenance window is Friday from 10 pm to Saturday 3 am
– restore selinux security context
Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 02 seconds[/shell]
Mit einem
[bash]cat /etc/motd[/bash]
erhalten wir das folgende Ergebnis
[shell]Next maintenance window is Fri from 10 pm to Sat 3 am[/shell]
Auch ein weiterer Lauf des Chef-clients würde nichts an dem Inhalte ändern. (Idempotent)
[shell]chef-client –local-mode –runlist ‘recipe[motd_notify_downtime]’
[2018-10-25T16:18:28+00:00] WARN: No config file found or specified on command line, using command line options.
Starting Chef Client, version 14.5.33
resolving cookbooks for run list: ["motd_notify_downtime"]
Synchronizing Cookbooks:
– motd_notify_downtime (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks…
Converging 1 resources
Recipe: motd_notify_downtime::default
* file[/etc/motd] action create (up to date)
Running handlers:
Running handlers complete
Chef Client finished, 0/1 resources updated in 02 seconds[/shell]
Ich hoffe ich hab euch am Beispiel Chef etwas über den Tellerrand hinaus schauen lassen und vielleicht hat der ein oder andere Lust bekommen etwas mit Chef zu automatisieren.
Servus !
Kritischer Fehler in Puppet Version 7.29.0 und 8.5.0
Eine Warnung an alle Nutzer von Puppet, aber auch Foreman oder dem Icinga-Installer, die Version 7.29.0 und 8.5.0 von Puppet enthält einen kritischen Fehler, der die Erstellung eines Katalogs und somit die Anwendung der Konfiguration verhindert. Daher stellt bitte...
0 Comments