So stellen Sie eine Vagrant-VM mit Chef und einer .rb-Datei mit Anweisungen bereit

So stellen Sie eine Vagrant-VM mit Chef und einer .rb-Datei mit Anweisungen bereit

Ich habe das ganze Konzept wahrscheinlich falsch verstanden: Ich habe eine funktionierende Vagrant-VM mit Ubuntu 12.04, auf der ich einige Pakete und Konfigurationsdateien installieren möchte. Ich habe sie in Chef eingerichtet, im Pfad cookbooks/my_project/recipes habe ich eine vagrant-dev.rb-Datei mit allen Anweisungen. Jetzt muss meine Vagrant-Konfiguration in Vagrantfile hier das Problem sein:

config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks/my_project/recipes"
    chef.add_recipe "vagrant-dev.rb"
end

und wenn ich die VM lade bekomme ich

FATAL: Chef::Exceptions::CookbookNotFound: Cookbook vagrant-dev.rb not found.

Ich habe es ohne die .rb-Endung am Ende versucht. Ich vermute, das ist eine ganz andere Sache und ich verwende es nicht richtig. Aber nach der Suche konnte ich nichts finden, das erklärt, wie man es richtig macht.

Antwort1

Bei Verwendung von Chef, alle Rezeptemussin Kochbüchern stehen. Es sieht so aus, als ob es bereits in einem Kochbuch steht und Sie es nur falsch benennen, aber ich werde alles behandeln, damit Sie es noch einmal überprüfen können.

Kochbücher sind im wahrsten Sinne des Wortes nur eine Sammlung von Rezept-RB-Dateien, ein paar Metadaten und optional einige andere Dateien (wie Vorlagen oder Databags). Sie können die .rb-Datei also nicht direkt einbinden, sondern müssen auf das Kochbuch verweisen und dann den Namen der Datei (ohne .rb), um sie auszuführen.

Die Struktur eines einfachen Kochbuchs sollte wie folgt aussehen:

SomeCookbook
    readme.md # needed for the long_description in metadata to work
    metadata.rb # contains the actual information for the cookbook
    recipes # Holds all the cookbook's recipies
        default.rb # This is the default recipe, run if one isn't specified
        otherRecipe.rb
    templates # Templates that can be called by the cookbook
        default
            some-erb-style-template.erb

Der Name des Hauptverzeichnisses spielt keine Rolle und das Vorlagenverzeichnis ist optional.

metadata.rb

name             "SomeCookbook"
maintainer       "Me"
maintainer_email "[email protected]"
license          "None"
description      "Does something cool"
long_description IO.read(File.join(File.dirname(__FILE__), 'readme.md'))
version          "0.0.1"

supports "centos"

Folgen Sie der obigen Struktur und stellen Sie sicher, dass Sie Ihr Rezept in den Ordner „recipes“ kopieren.
Fügen Sie dann Folgendes zu Ihrer Vagrant-Datei hinzu:

chef.add_recipe "SomeCookbook::vagrant-dev"

Ich hoffe, das oben Gesagte klärt die Sache ein wenig auf.

verwandte Informationen