Kopieren Sie eine ganze Verzeichnisstruktur in Chef

6

Ich habe eine Verzeichnisstruktur (Beispieldaten), die ich aus einem Chef-Rezept kopieren möchte. Die einzige Möglichkeit, dies zu tun, besteht darin, jedes einzelne Verzeichnis und jede einzelne Datei explizit zu erstellen:

directory "/mnt/data/experiment1/dataset1" do
   recursive true
   only_if { node.chef_environment == "dev" }
end


directory "/mnt/data/experiment1/dataset2" do
   recursive true
   only_if { node.chef_environment == "dev" }
end

directory "/mnt/data/experiment2/dataset1" do
   recursive true
   only_if { node.chef_environment == "dev" }
end


directory "/mnt/data/experiment1/dataset2" do
   recursive true
   only_if { node.chef_environment == "dev" }
end


cookbook_file "/mnt/data/experiment1/dataset1/testfile1.txt" do
   owner "atom"
   group "atom"
   mode "0644"
   source "sampledata/experiment1/dataset1/testfile1.txt"
   only_if { node.chef_environment == "dev"}
end

...

Gibt es eine Möglichkeit, einfach eine gesamte Verzeichnisstruktur rekursiv aus dem Kochbuch zu kopieren? Die Angabe des Namens jeder Datei innerhalb des Rezepts erscheint redundant und fehleranfällig (dh wenn wir dem Baum eine Datei hinzufügen, aber vergessen, sie im Rezept zu referenzieren, wird sie nicht kopiert.)

Ich denke, eine Hack-Problemumgehung wäre, herauszufinden, wo alle Chef-Dateien auf den Zielcomputer kopiert werden, und eine, cp -raber gibt es etwas saubereres?

Oder gehe ich falsch vor?

Steve Bennett
quelle

Antworten:

10

Warum nicht remote_directoryRessourcen verwenden ? Es ist genau dafür gedacht.

Siehe: https://docs.chef.io/resource_remote_directory.html

Michael Field
quelle
2
Das sieht richtig aus - ist es zufällig neu? Auch scheint es, dass remote_fileund remote_directorysich ganz anders zu verhalten (geschweige denn cookbook_fileund file). Was für ein verwirrendes Durcheinander ...
Steve Bennett
3
Es ist verwirrend. Darüber gibt es viele Diskussionen. Wie auch immer - Sie sollten Puppet überprüfen. Das ist ein Synonym für "chaotisch" :)
Michael Field
1

file_cache_path teilt Ihnen mit, wo sich die Kochbücher auf dem Zielcomputer befinden

Daher müssen Sie nur das Verzeichnis Ihres Kochbuchs in file_cache_path mit Ihrem Zielspeicherort synchronisieren. Sie könnten das mit a cp -r, einem ruby_block mit FileUtils # cp_r oder einer anderen Klugheit tun , an die ich nicht gedacht habe.

kgilpin
quelle
Hmm. Nun, es stellt sich heraus, dass Verzeichnisse unter files / default sowieso nicht auf den Zielcomputer kopiert werden. Am einfachsten wäre es vielleicht, alle Dateien in einer Zip-Datei bereitzustellen, diese zu kopieren und dann zu entpacken.
Steve Bennett