Enterprise Hosting
    Workshop
   Einführung in Opscode Chef




               Julian Fischer
        fischer@enterprise-rails.de
      http://www.enterprise-rails.de
Chef
Chef
Installationsautomatisierung
Chef
Architektur
Chef Basics
Chef Basics
Begriffe und Konzepte
Begriffe und Konzepte
        Nodes
Nodes




        @railshoster
Nodes


‣ Auf Nodes wird der chef-client
  ausgeführt.




                  @railshoster
Nodes


‣ Auf Nodes wird der chef-client
  ausgeführt.

‣ Ein Node hat eine runlist.




                  @railshoster
Nodes


‣ Auf Nodes wird der chef-client
  ausgeführt.

‣ Ein Node hat eine runlist.
‣ Ein Node hat Attributes.




                  @railshoster
Nodes


‣ Auf Nodes wird der chef-client
  ausgeführt.

‣ Ein Node hat eine runlist.
‣ Ein Node hat Attributes.
 ‣ Verschachtelte key/value Paare.


                  @railshoster
Nodes


‣ Auf Nodes wird der chef-client
  ausgeführt.

‣ Ein Node hat eine runlist.
‣ Ein Node hat Attributes.
 ‣ Verschachtelte key/value Paare.
 ‣ z.B. Versionsnummern, Pfade, ...
                  @railshoster
Begriffe und Konzepte
      Die Runlist
Die Runlist




              @railshoster
Die Runlist


‣ Zählt auszuführende Rezepte (Recipes)
 auf.




                @railshoster
Die Runlist


‣ Zählt auszuführende Rezepte (Recipes)
 auf.

 ‣ Achtung: die Reihenfolge ist wichtig.




                  @railshoster
Die Runlist


‣ Zählt auszuführende Rezepte (Recipes)
 auf.

 ‣ Achtung: die Reihenfolge ist wichtig.
 ‣ Rezeptabhängigkeiten werden
   automatisch aufgelöst.




                  @railshoster
Die Runlist




              @railshoster
Die Runlist


‣ Eine Runlist kann Rollen (Roles)
 enthalten.




                 @railshoster
Die Runlist


‣ Eine Runlist kann Rollen (Roles)
  enthalten.

‣ Rollen werden zu einer Liste von
  Rezepten expandiert.




                  @railshoster
Begriffe und Konzepte
        Roles
Roles




        @railshoster
Roles


‣ Rollen werden verwendet, um
 gleichartige Nodes zu verwalten.




                @railshoster
Roles


‣ Rollen werden verwendet, um
 gleichartige Nodes zu verwalten.

 ‣ App Server




                @railshoster
Roles


‣ Rollen werden verwendet, um
 gleichartige Nodes zu verwalten.

 ‣ App Server
 ‣ DB Slave Server




                @railshoster
Roles


‣ Rollen werden verwendet, um
 gleichartige Nodes zu verwalten.

 ‣ App Server
 ‣ DB Slave Server
 ‣ Worker Nodes


                  @railshoster
Roles




        @railshoster
Roles


‣ Rollen haben eine Node-artige Struktur.




                  @railshoster
Roles


‣ Rollen haben eine Node-artige Struktur.
 ‣ Haben eine Runlist.




                  @railshoster
Roles


‣ Rollen haben eine Node-artige Struktur.
 ‣ Haben eine Runlist.
 ‣ Haben Attribute.




                  @railshoster
Roles


‣ Rollen haben eine Node-artige Struktur.
 ‣ Haben eine Runlist.
 ‣ Haben Attribute.
‣ Jede Rolle wird in eine Liste von
  auszuführenden Rezepten aufgelöst.



                   @railshoster
Node Konfiguration
Node Konfiguration
     Cookbooks
„Most of the time
    you are using Chef,
you are writing cookbooks.“



     http://wiki.opscode.com/display/chef/Chef+Basics
Cookbooks




            @railshoster
Cookbooks


‣ Ein Kochbuch kann bestehen aus:




              @railshoster
Cookbooks


‣ Ein Kochbuch kann bestehen aus:
 ‣ Recipes




              @railshoster
Cookbooks


‣ Ein Kochbuch kann bestehen aus:
 ‣ Recipes

 ‣ Resource Definitions




                     @railshoster
Cookbooks


‣ Ein Kochbuch kann bestehen aus:
 ‣ Recipes

 ‣ Resource Definitions

 ‣ Attributes




                     @railshoster
Cookbooks


‣ Ein Kochbuch kann bestehen aus:
 ‣ Recipes

 ‣ Resource Definitions

 ‣ Attributes

 ‣ Libraries



                     @railshoster
Cookbooks


‣ Ein Kochbuch kann bestehen aus:
 ‣ Recipes

 ‣ Resource Definitions

 ‣ Attributes

 ‣ Libraries

 ‣ Templates

                     @railshoster
Cookbooks


‣ Ein Kochbuch kann bestehen aus:
 ‣ Recipes

 ‣ Resource Definitions

 ‣ Attributes

 ‣ Libraries

 ‣ Templates

 ‣ Cookbook Files
                     @railshoster
Cookbooks




            @railshoster
Cookbooks


‣ Syntaktisch gesehen ist ein Cookbook
 eine Sammlung von Dateien und
 Verzeichnissen.




                 @railshoster
Cookbooks


‣ Syntaktisch gesehen ist ein Cookbook
  eine Sammlung von Dateien und
  Verzeichnissen.

‣ Für gewöhnlichen beschreibt ein
  Cookbook einen einzelnen Dienst.




                 @railshoster
Cookbooks


‣ Syntaktisch gesehen ist ein Cookbook
  eine Sammlung von Dateien und
  Verzeichnissen.

‣ Für gewöhnlichen beschreibt ein
  Cookbook einen einzelnen Dienst.

 ‣ Ruby on Rails Application


                 @railshoster
Cookbooks


‣ Syntaktisch gesehen ist ein Cookbook
  eine Sammlung von Dateien und
  Verzeichnissen.

‣ Für gewöhnlichen beschreibt ein
  Cookbook einen einzelnen Dienst.

 ‣ Ruby on Rails Application
 ‣ MySQL Service, Redis Service
                 @railshoster
Cookbooks


‣ Syntaktisch gesehen ist ein Cookbook
  eine Sammlung von Dateien und
  Verzeichnissen.

‣ Für gewöhnlichen beschreibt ein
  Cookbook einen einzelnen Dienst.

 ‣ Ruby on Rails Application
 ‣ MySQL Service, Redis Service
 ‣ ...           @railshoster
Cookbooks sind das Werkzeug
zur Wiederverwendung Ihres
       Chef-Quellcodes.
Node Konfiguration
      Recipes
Recipes




          @railshoster
Recipes


‣ Ein Rezept beschreibt eine
 Ressource (Resource).




                @railshoster
Recipes


‣ Ein Rezept beschreibt eine
 Ressource (Resource).

 ‣ In den Rezepten befindet sich der
   Großteil des Verhaltens eines
   Cookbooks.




                 @railshoster
Recipes


‣ Ein Rezept beschreibt eine
 Ressource (Resource).

 ‣ In den Rezepten befindet sich der
   Großteil des Verhaltens eines
   Cookbooks.

 ‣ Ein Rezept kann beliebigen Ruby
   Code enthalten.


                 @railshoster
Node Konfiguration
  Cookbook Metadata
Cookbook Metadaten berschreiben
   die Abhängigkeiten eines
          Cookbooks.
Cookbook Metadata




             @railshoster
Cookbook Metadata


‣ Abhängigkeiten zu anderen Cookbooks




               @railshoster
Cookbook Metadata


‣ Abhängigkeiten zu anderen Cookbooks
‣ Maintainer




               @railshoster
Cookbook Metadata


‣ Abhängigkeiten zu anderen Cookbooks
‣ Maintainer
‣ Maintainer‘s email




                  @railshoster
Cookbook Metadata


‣ Abhängigkeiten zu anderen Cookbooks
‣ Maintainer
‣ Maintainer‘s email
‣ License



                  @railshoster
Cookbook Metadata


‣ Abhängigkeiten zu anderen Cookbooks
‣ Maintainer
‣ Maintainer‘s email
‣ License
‣ Version

                  @railshoster
Cookbook Metadata


‣ Abhängigkeiten zu anderen Cookbooks
‣ Maintainer
‣ Maintainer‘s email
‣ License
‣ Version
‣ ...
                  @railshoster
Node Konfiguration
     Resources
Resources




            @railshoster
Resources


‣ Repräsentier die zu konfigurierende
  Entität.




                  @railshoster
Resources


‣ Repräsentier die zu konfigurierende
  Entität.

‣ Abstrahiert vom eingesetzten
  Betriebsystem.




                   @railshoster
Resources


‣ Repräsentier die zu konfigurierende
  Entität.

‣ Abstrahiert vom eingesetzten
  Betriebsystem.

‣ Werden in Recipes und Definitions
  deklariert.



                   @railshoster
Resources


‣ Repräsentier die zu konfigurierende
  Entität.

‣ Abstrahiert vom eingesetzten
  Betriebsystem.

‣ Werden in Recipes und Definitions
  deklariert.

‣ Sind die elementaren Einheiten in Chef.
                   @railshoster
Resources




            @railshoster
Resources


‣ Bespiele




             @railshoster
Resources


‣ Bespiele
 ‣ Resource „Package“




                @railshoster
Resources


‣ Bespiele
 ‣ Resource „Package“
   ‣ Ubuntu: apt-get




                 @railshoster
Resources


‣ Bespiele
 ‣ Resource „Package“
   ‣ Ubuntu: apt-get
   ‣ CentOS: YUM



                 @railshoster
Node Konfiguration
      Provider
Providers




            @railshoster
Providers


‣ Provider sind plattformspezifische
 Implementierungen einer
 Ressource.




                @railshoster
Providers


‣ Provider sind plattformspezifische
 Implementierungen einer
 Ressource.

 ‣ Package Resource on CentOS
   > YUM Package Provider




                @railshoster
Providers




            @railshoster
Providers


‣ Sichern die Idempotenz der Chef-
  Aktionen ab.




                 @railshoster
Providers


‣ Sichern die Idempotenz der Chef-
  Aktionen ab.

 ‣ Zweimaliges Aufrufen einer Aktion
   > Einmaliges Ausführen




                 @railshoster
Providers


‣ Sichern die Idempotenz der Chef-
  Aktionen ab.

 ‣ Zweimaliges Aufrufen einer Aktion
   > Einmaliges Ausführen

 ‣ 2 x Installiere Paket „git-core“
   > Das Paket wird nur 1x installiert



                  @railshoster
Providers




            @railshoster
Providers


‣ Ein Node wählt einen Provider für
 eine bestimmte Ressource per Default.




                @railshoster
Providers


‣ Ein Node wählt einen Provider für
  eine bestimmte Ressource per Default.

‣ Eine Resource kann ihren Provider aber
  auch explizit festlegen.




                   @railshoster
Meistens macht man sich keine
  Gedanken über Provider.

       Sie sind einfach da.
Data Bags
„Data bags provide an
       arbitrary store of
globally available JSON data.“



      http://wiki.opscode.com/display/chef/Data+Bags
Data Bags




            @railshoster
Data Bags


‣ Sind nicht direkt mit Node oder Role
  Attributen verbunden.




                  @railshoster
Data Bags


‣ Sind nicht direkt mit Node oder Role
  Attributen verbunden.

‣ Data Bags werden auf dem Chef-
  Server gespeichert. Bei Chef-Solo auf dem Node.




                       @railshoster
Data Bags


‣ Sind nicht direkt mit Node oder Role
  Attributen verbunden.

‣ Data Bags werden auf dem Chef-
  Server gespeichert. Bei Chef-Solo auf dem Node.

‣ Data Bags werden von der Chef-Suche
  indiziert.



                       @railshoster
Data Bags




            @railshoster
Data Bags


‣ Rezepte können auf Daten aus den Data
 Bags zugreifen.




                   @railshoster
Data Bags


‣ Rezepte können auf Daten aus den Data
 Bags zugreifen.

‣ Rezepte können über die Chef-Suche
 Data Bags durchsuchen
 ->Service Discovery in der
 Installationsautomatisierung.




                   @railshoster
Speichern Sie keine sensiblen
Daten in gewöhnlichen Data Bags!
Verwenden Sie
verschlüsselte
   Data Bags!
Encrypted Data Bags




              @railshoster
Encrypted Data Bags


‣ Gut zur Speicherung sensibler
  Informationen, wie z.B.




                  @railshoster
Encrypted Data Bags


‣ Gut zur Speicherung sensibler
  Informationen, wie z.B.

 ‣ Passwords




                  @railshoster
Encrypted Data Bags


‣ Gut zur Speicherung sensibler
  Informationen, wie z.B.

 ‣ Passwords
 ‣ Access Keys




                  @railshoster
Encrypted Data Bags


‣ Gut zur Speicherung sensibler
  Informationen, wie z.B.

 ‣ Passwords
 ‣ Access Keys
 ‣ Andere Credentials


                  @railshoster
Encrypted Data Bags




              @railshoster
Encrypted Data Bags


‣ Wenn Chef kompromitiert würde
 > Bleibt so der Schaden gering.




                 @railshoster
Encrypted Data Bags


‣ Wenn Chef kompromitiert würde
  > Bleibt so der Schaden gering.

‣ Isolieren unterschiedlicher „Groups of
  Trust“ durch getrennte encr. Data Bags.
  z.B. in dem unterschiedliche Dienste unterschiedlicher Teams
  unterschiedliche Data Bags erhalten.




                              @railshoster
Encrypted Data Bags




              @railshoster
Encrypted Data Bags


‣ Data Bag keys werden. unverschlüsselt. So
  kann nach ihnen gesucht
                          bleiben




                  @railshoster
Encrypted Data Bags


‣ Data Bag keys werden. unverschlüsselt. So
  kann nach ihnen gesucht
                          bleiben


‣ Values werden verschlüsselt und sind somit sicher.




                      @railshoster
Encrypted Data Bags


‣ Data Bag keys werden. unverschlüsselt. So
  kann nach ihnen gesucht
                          bleiben


‣ Values werden verschlüsselt und sind somit sicher.
‣ Shared Schlüssel. Eine Kopie liegt aufFür jedes encrypted Data Bag
  gibt es einen
                Key Encryption.
                                         dem Server, eine auf dem
   Rechner, der die Daten entschlüsseln möchte.




                               @railshoster
Encrypted Data Bags


‣ Data Bag keys werden. unverschlüsselt. So
  kann nach ihnen gesucht
                          bleiben


‣ Values werden verschlüsselt und sind somit sicher.
‣ Shared Schlüssel. Eine Kopie liegt aufFür jedes encrypted Data Bag
  gibt es einen
                Key Encryption.
                                         dem Server, eine auf dem
   Rechner, der die Daten entschlüsseln möchte.



‣ Der shared Key wird als Datei auf die
   Nodes gelegt. Die Entschlüsselung erfolgt dann transparent
   durch Chef.


                               @railshoster
Encrypted Data Bags




              @railshoster
Encrypted Data Bags


‣ Rezepte können also transparent auf
  verschlüsselte Data Bags zugreifen. Sie
  merken nichts von der Verschlüsselung.




                             @railshoster
Encrypted Data Bags


‣ Rezepte können also transparent auf
  verschlüsselte Data Bags zugreifen. Sie
  merken nichts von der Verschlüsselung.



‣ Knife kan verschlüsselte Data Bags
  verwenden, in dem die --secret und --secret-file Optionen
  angegeben werden.




                             @railshoster
Chef Suche
Chef Suche




             @railshoster
Chef Suche


‣ Nur in Verbindung mit Chef-Server.




                @railshoster
Chef Suche


‣ Nur in Verbindung mit Chef-Server.
 ‣ Nicht im Kontext von Chef-Solo.




                @railshoster
Chef Suche


‣ Nur in Verbindung mit Chef-Server.
 ‣ Nicht im Kontext von Chef-Solo.
‣ Liefert eine Volltextsuche.




                   @railshoster
Chef Suche


‣ Nur in Verbindung mit Chef-Server.
 ‣ Nicht im Kontext von Chef-Solo.
‣ Liefert eine Volltextsuche.
‣ Basiert auf Apache Solr.



                   @railshoster
Chef Suche




             @railshoster
Chef Suche


‣ Daten werden in einem Solr Index
  abgelegt




                 @railshoster
Chef Suche


‣ Daten werden in einem Solr Index
  abgelegt

 ‣ Data Bags




                 @railshoster
Chef Suche


‣ Daten werden in einem Solr Index
  abgelegt

 ‣ Data Bags
 ‣ API Clients




                 @railshoster
Chef Suche


‣ Daten werden in einem Solr Index
  abgelegt

 ‣ Data Bags
 ‣ API Clients
 ‣ Nodes


                 @railshoster
Chef Suche


‣ Daten werden in einem Solr Index
  abgelegt

 ‣ Data Bags
 ‣ API Clients
 ‣ Nodes
 ‣ Roles
                 @railshoster
Chef Suche


‣ Daten werden in einem Solr Index
  abgelegt

 ‣ Data Bags
 ‣ API Clients
 ‣ Nodes
 ‣ Roles
 ‣ ...           @railshoster
Chef Search




              @railshoster
Chef Search


‣ Abfragen werden durch den Chef-Server
 erzeugt.




                 @railshoster
Chef Search


‣ Abfragen werden durch den Chef-Server
  erzeugt.

‣ Erlaubt den Abruf von Informationen
  über sämtliche Knoten sowie die restliche
  Inftrastruktur.




                  @railshoster
Chef Search




              @railshoster
Chef Search


‣ Methoden zur Verwendung der Chef-
 Suche




                @railshoster
Chef Search


‣ Methoden zur Verwendung der Chef-
 Suche

 ‣ Verwendung des search Kommandos in
   Rezepten.




                @railshoster
Chef Search


‣ Methoden zur Verwendung der Chef-
 Suche

 ‣ Verwendung des search Kommandos in
   Rezepten.

 ‣ Verwendung des knive search
   Kommandos an der Kommandozeile.



                @railshoster
Chef Suche




             @railshoster
Chef Suche


‣ Sehr wichtig für die Erstellung von
  Rezepten.




                  @railshoster
Chef Suche


‣ Sehr wichtig für die Erstellung von
  Rezepten.

 ‣ App Server Rezept kann search
    Verwenden, um die zugehörige
    Datenbank zu finden.




                  @railshoster
Chef Suche




             @railshoster
Chef Suche


‣ Knive search Beispiele




                  @railshoster
Chef Suche


‣ Knive search Beispiele
 ‣ knife search role "name:production*"




                  @railshoster
Chef Suche


‣ Knive search Beispiele
 ‣ knife search role "name:production*"

 ‣ knife search node "name:app*"




                  @railshoster
Chef Suche


‣ Knive search Beispiele
 ‣ knife search role "name:production*"

 ‣ knife search node "name:app*"

 ‣ knife search client "name:c*"




                  @railshoster
Chef Suche




             @railshoster
Chef Suche


‣ Verwendung von Databagnamen zur
 Suche von Databags:




                @railshoster
Chef Suche


‣ Verwendung von Databagnamen zur
 Suche von Databags:

 ‣ knife search my_bag "key:value"




                  @railshoster
Chef Run
Chef Run
Konvergenz
Konvergenz




             @railshoster
Konvergenz


‣ Chef Run = Konvergenz




                @railshoster
Konvergenz


‣ Chef Run = Konvergenz
‣ Das System konvergiert mit jedem Lauf
  und jeder Aktion hin zum gewünschten
  Systemzustand.




                 @railshoster
Konvergenz


‣ Chef Run = Konvergenz
‣ Das System konvergiert mit jedem Lauf
  und jeder Aktion hin zum gewünschten
  Systemzustand.

‣ Ziel ist das ein einzelner Chef-Run das
  System in seinen Zielzustand überführt!
  Das ist das Designziel bei der Erstellung von Cookbooks und Runlists.




                              @railshoster
Konvergenz




             @railshoster
Konvergenz


‣ Chef erneut zu starten, nach dem Chef-
  Lauf fehlgeshclagen ist, sollte das System
  näher zu seinem Zielzustand bringen
  > Konvergenz




                   @railshoster
Chef Run
Der Run Prozess
Der Run Prozess




              @railshoster
Der Run Prozess

1. Erstelle, registere, authentifizere den
   Node




                    @railshoster
Der Run Prozess

1. Erstelle, registere, authentifizere den
   Node

2. Synchronisiere die Cookbooks




                    @railshoster
Der Run Prozess

1. Erstelle, registere, authentifizere den
   Node

2. Synchronisiere die Cookbooks

3. Kompiliere die Resource Collection




                    @railshoster
Der Run Prozess

1. Erstelle, registere, authentifizere den
   Node

2. Synchronisiere die Cookbooks

3. Kompiliere die Resource Collection

4. Konfigure die Nodes



                    @railshoster
Der Run Prozess

1. Erstelle, registere, authentifizere den
   Node

2. Synchronisiere die Cookbooks

3. Kompiliere die Resource Collection

4. Konfigure die Nodes

5. Führe notification Handler aus

                    @railshoster
Der Run Prozess
1/5 Build, Register,
Authenticate Node
Build the Node
Build the Node




                 @railshoster
Build the Node


‣ Zuerst erzeugt Chef einen Node




                 @railshoster
Build the Node


‣ Zuerst erzeugt Chef einen Node
 ‣ Ohai discovery der OS Details.




                      @railshoster
Build the Node


‣ Zuerst erzeugt Chef einen Node
 ‣ Ohai discovery der OS Details.
 ‣ Hole Infos über den Node vom Chef-Server (!
   Solo).




                      @railshoster
Build the Node


‣ Zuerst erzeugt Chef einen Node
 ‣ Ohai discovery der OS Details.
 ‣ Hole Infos über den Node vom Chef-Server (!
   Solo).



 ‣ Füge JSON Attributes oder Recipes
   hinzu



                      @railshoster
Build the Node


‣ Zuerst erzeugt Chef einen Node
 ‣ Ohai discovery der OS Details.
 ‣ Hole Infos über den Node vom Chef-Server (!
   Solo).



 ‣ Füge JSON Attributes oder Recipes
   hinzu

 ‣ Füge Ohai Attributes hinzu
                      @railshoster
Register @ Chef-Server
Register @ Chef-Server




               @railshoster
Register @ Chef-Server


‣ Überprüfe die private key Datei in /etc/chef/
  client.pem




                     @railshoster
Register @ Chef-Server


‣ Überprüfe die private key Datei in /etc/chef/
  client.pem



‣ Gehe von einem neuen Knoten aus,
  falls nicht.




                     @railshoster
Register @ Chef-Server


‣ Überprüfe die private key Datei in /etc/chef/
  client.pem



‣ Gehe von einem neuen Knoten aus,
  falls nicht.

  ‣ Verwende die chef-validator-client
    identity um einen neuen Knoten zu
    registrieren.
    > Generiert eine client.pem


                     @railshoster
Register @ Chef-Server


‣ Überprüfe die private key Datei in /etc/chef/
  client.pem



‣ Gehe von einem neuen Knoten aus,
  falls nicht.

  ‣ Verwende die chef-validator-client
    identity um einen neuen Knoten zu
    registrieren.
    > Generiert eine client.pem

‣ Register @ Chef-Server using client.pem
                     @railshoster
The run process
2/5 Synchronize Cookbooks
Synchronize Cookbooks




             @railshoster
Synchronize Cookbooks


‣ Chef-Client > Chef-Server > Abrufen von:




                     @railshoster
Synchronize Cookbooks


‣ Chef-Client > Chef-Server > Abrufen von:
  ‣ Libraries




                     @railshoster
Synchronize Cookbooks


‣ Chef-Client > Chef-Server > Abrufen von:
  ‣ Libraries
  ‣ Attributes




                     @railshoster
Synchronize Cookbooks


‣ Chef-Client > Chef-Server > Abrufen von:
  ‣ Libraries
  ‣ Attributes
  ‣ Definitions



                     @railshoster
Synchronize Cookbooks


‣ Chef-Client > Chef-Server > Abrufen von:
  ‣ Libraries
  ‣ Attributes
  ‣ Definitions
  ‣ Recipes in all Cookbooks

                     @railshoster
Synchronize Cookbooks


‣ Chef-Client > Chef-Server > Abrufen von:
  ‣ Libraries
  ‣ Attributes
  ‣ Definitions
  ‣ Recipes in all Cookbooks
‣ Lokales Caching!
                     @railshoster
The run process
3/5 Compile Resource Collection
Compile Res. Collection




               @railshoster
Compile Res. Collection


‣ Zusammensetzen der Ressourcen für den
 Knoten




                @railshoster
Compile Res. Collection


‣ Zusammensetzen der Ressourcen für den
 Knoten

 ‣ Load Libraries




                    @railshoster
Compile Res. Collection


‣ Zusammensetzen der Ressourcen für den
 Knoten

 ‣ Load Libraries
 ‣ Load Attributes




                    @railshoster
Compile Res. Collection


‣ Zusammensetzen der Ressourcen für den
 Knoten

 ‣ Load Libraries
 ‣ Load Attributes
 ‣ Load Definitions


                    @railshoster
Compile Res. Collection




               @railshoster
Compile Res. Collection


‣ Assemble resources for the Node




                 @railshoster
Compile Res. Collection


‣ Assemble resources for the Node
 ‣ Lade Rezepte




                  @railshoster
Compile Res. Collection


‣ Assemble resources for the Node
 ‣ Lade Rezepte
   ‣ Erzeuge eine Resource Collection




                  @railshoster
Compile Res. Collection


‣ Assemble resources for the Node
 ‣ Lade Rezepte
   ‣ Erzeuge eine Resource Collection
   ‣ Evaluiere Ruby Code (außerhalb von Resources)



                     @railshoster
Der Run Prozess
4/5 Configure Node
Configure Node




                 @railshoster
Configure Node


‣ Bereit zur Systemkonfiguration




                  @railshoster
Configure Node


‣ Bereit zur Systemkonfiguration
‣ Konvergenz Pseudo Code:
  resource_collection.map do |resource|
    find_provider(resource)
  end




                       @railshoster
Configure Node


‣ Bereit zur Systemkonfiguration
‣ Konvergenz Pseudo Code:
  resource_collection.map do |resource|
    find_provider(resource)
  end



‣ Speichere den Node state auf die Platte oder auf dem
  chef-server (=> index)




                       @railshoster
The run process
5/5 Run Notification Handlers
Execute Exeption Handlers
Talk Resources




                 @railshoster
Talk Resources


 ‣ Article about Chef Basics
   http://wiki.opscode.com/display/chef/
   Chef+Basics




                 @railshoster
Talk Resources


 ‣ Article about Chef Basics
   http://wiki.opscode.com/display/chef/
   Chef+Basics

 ‣ Opscode Hosted Chef
   http://www.opscode.com/hosted-chef/




                 @railshoster

Opscode Chef - Grundlagen

Hinweis der Redaktion