Ein einfaches Kochbuch mit chef

Schritt 2: Ein einfaches Kochbuch mit Chef


Die Dateien zu diesem Schritt findest du als git Repository auf github:

https://github.com/timoschmidt/vagrant-chef-workshop/tree/master/step2

 

 

Ein eigenes Kochbuch mit Chef erstellen

Chef benutzt Rubycode um die Provisionierung zu beschreiben. Diese Beschreibung kommt in Form von "Kochbüchern".

 

Zum Einstieg erstellen wir ein einfaches Rezept, dass einen neuen Benutzer zum System hinzufügt. Dieses Beispiel soll uns dabei helfen, mit der Struktur von Kochbüchern vertraut zu werden.

Bevor wir jedoch starten können installieren wir zunächst Chef:

 

vagrant plugin install vagrant-librarian-chef
vagrant plugin install vagrant-omnibus

Chef als Provisioner mit Vagrant benutzen und ein eigenes Kochbuch einbinden

Nun muss das Vagrantfile angepasst werden um chef als provisioner zu verwenden und unser erstes Rezept im Kochbuch zu triggern.

 

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "trusty64"
  config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  config.vm.network :private_network, ip: "192.168.33.20"

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["cookbooks","site-cookbooks"]

    chef.add_recipe "mycookbook"
  end
end

Wie sie zuvor gesehen haben, wurde mit cookbook_path ein Array von Verzeichnissen definiert. In diesem Beispiel gibt es:

  • cookbooks: In diesem Verzechnis liegen normalerweise stabile Kochbücher, die von eine github Repository oder chef download kommen.

  • site-cookbooks: In diesem Verzeichnis befinden sich normalerweise Kochbücher die lokal entwickelt werden.

Technisch gesehen nutz chef hier einen Fallback, Kochbücher im zweiten Verzeichnis überlagern Kochbücher im ersten Verzeichnis.

Der Einstieg ins Kochbuch ist konfiguriert mit:

'<code class="plain plain">chef.add_recipe "mycookbook"'.</code>

Per Konvention wird "default.rb" aus diesem Kochbuch in der Provisionierung gestartet.

 

 

Der Aufbau eines chef Kochbuchs

Für unser Beispiel erzeugen wir die folgende Dateistruktur in unserem Vagrantverzeichnis:

site-cookbooks (folder)
|--- mycookbook (folder)
     |--- metadata.rb (file)
     |---  recipes (folder)
          |---  default.rb (file)

Metadaten zum Kochbuch hinzufügen

Dies ist ein minimal Beispiel für ein chef Kochbuch. Für ein erstes Beispiel fügen wir den folgenden Inhalt in die Datei "metadata.rb" ein:

name 'mycookbook'
description 'Just a simple test cookbook'
maintainer 'Timo Schmidt'
license 'none'
version '0.0.1'

Ein einfaches Rezept

Das eigentliche Chef Rezept "recipes/default.rb" füllen wir mit folgendem Inhalt:

 

group "users" do
  gid 5000
end

user "testuser" do
  home "/home/testuser"
  gid 5000
  shell "/bin/bash“
end

Vagrant box starten und das erste eigene Kochbuch ausführen

Nun können wir die Box mit "vagrant up" starten. Nachdem die Provisionierung fertig ist, können wir uns mittels "vagrant ssh" einloggen. Ausserdem können wir in "/etc/shadow" prüfen, ob es einen Eintrag für den neuen "testuser" gibt.

vagrant ssh
cat /etc/shadow

Mit dem oberen block haben wir "chef resource provider" benutzt. Es gibt viele eingebaute resource provider die dabei helfen Standardoperationen in der Provisionierung zu automatisieren. Eine Dokumentation der eingebauten resource provider ist auf der chef Homepage zu finden.



https://docs.chef.io/resources.htm


Wie Sie sehen stellt chef sehr hilfreiche Bausteine zur Verfügung um Ihren Server zu konfigurieren. Ausserdem ist es möglich eigene "resource provider" in eigenen Kochbüchern zu Verfügung zu stellen. Diese Konzepte machen chef zu einem sehr mächtigen Werkzeug.

Wir haben gelernt, wie eigene Kochbücher implementiert werden können und wie wir ein Rezept dass diese einbindet mit Vagrant einbinden können. Weil es schon viele Kochbücher im Internet gibt, macht es Sinn diese zu nutzen. Deshalb verwenden wir im nächsten Abschnitt das Apache Kochbuch um einen virtuellen Host anzulegen, auf dem wir eine Webanwendung benutzen können.

Hier geht es zum nächsten Schritt, in diesem legen wir mit dem Apache2 Kochbuch einen VirtualHost an.


Navigation