.DLL-Dateien können nicht mit cookbook_file in chef unter Windows kopiert werden

434
Eric G

Ich verwende chefzum Erstellen von Setup-Dateien für ein lokales Build unter Windows 10 (z. B. mit ChefDK mit chef-client -z -o win10-setup).

Ich möchte Dateien verwenden cookbook_fileoder remote_directorykopieren *.dll, die sich lokal in meinem Kochbuch befinden. Ich habe festgestellt, dass, wenn ich eine .dll in meinem Kochbuch habe, sich der Koch beschweren wird, dass er die Datei nicht sieht und wirft Chef::Exceptions::FileNotFound.

Zum Beispiel, wenn ich habe [cookbook]\files\default\notepadplusplus\plugins\someplugin.dll

und versuche:

cookbook_file "#\\AppData\\Roaming\\Notepad++\\plugins\\someplugin.dll" do source 'notepadplusplus/plugins/someplugin.dll' action :create_if_missing only_if { ::File.exist?("#/Notepad++/notepad++.exe") } end 

es wird nicht funktionieren. Wenn ich jedoch den Code umbenenne und dann den folgenden Code nehme someplugin.dll, someplugin.dll.pluginändere ich den Code sourceentsprechend

cookbook_file "#\\AppData\\Roaming\\Notepad++\\plugins\\someplugin.dll" do source 'notepadplusplus/plugins/someplugin.dll.plugin' action :create_if_missing only_if { ::File.exist?("#/Notepad++/notepad++.exe") } end 

es wird klappen.

Dies ist jedoch keine ideale Lösung, da ich nicht cookbook_filefür jede Datei einzeln vorgehen möchte, sondern remote_directoryalle Plugins gleichzeitig in den Ordner kopiere.

Ich habe einen Test mit durchgeführt remote_directoryund festgestellt, dass andere Dateien kopiert werden, die nicht sind, *.dllaber die *.dllDateien überspringen

Ich möchte nicht viele Skripts verwenden, um Dateien nach dem Kopieren umzubenennen, da dies scheinbar fehleranfällig ist.

Gibt es einen bestimmten Grund, warum der Chef nicht der Meinung ist, dass .dllDateien nicht existieren, oder ist er so konfiguriert, dass er diese Dateien ignoriert? Es scheint, nach der tatsächlichen Dateierweiterung und nicht nach Daten in der Datei zu filtern, da der oben beschriebene Umbenennungstrick funktioniert.

0

1 Antwort auf die Frage

0
Joshua Riojas

Während diese Frage vor einem Jahr gestellt wurde, bin ich kürzlich auf dieses Problem gestoßen und konnte eine Lösung für meine Situation finden. Antworten, damit andere, die auf diesen Posten stoßen, eine Chance auf Erleichterung haben.


Stellen Sie sicher, dass Ihre chefignoreDatei im Stammverzeichnis Ihres Kochbuchs keinen Eintrag für DLL-Dateien enthält. Wenn Sie Ihr Kochbuch mit dem chef generate cookbook [cookbook_name]Befehl (oder möglicherweise dem entsprechenden Messer-Befehl) erstellt haben, können Sie davon ausgehen, dass Ihre chefignoreDatei über diesen Eintrag verfügt.

Ein Beispiel für den Abschnitt in der chefignoreDatei, den Sie ändern möchten:

## COMPILED ## ############## a.out *.o *.pyc *.so *.com *.class *.dll *.exe */rdoc/ 

Sie können die betreffende Zeile entweder kommentieren oder vollständig entfernen.


In meiner speziellen Situation wollte ich die DLL nur in einem geschachtelten Kochbuch verwenden, das zum Testen verwendet wurde. Meine Lösung bestand darin, die chefignoreDatei in das Stammverzeichnis meines verschachtelten Kochbuchs zu kopieren und die Datei dort zu ändern.

Beispielpfad für die chefignoreDatei des inneren Kochbuchs :

[outer_cookbook]\test\cookbooks\[inner_cookbook]\chefignore

Beachten Sie, dass das innere Kochbuch für sich allein in meiner Runlist war. Ich bin mir nicht sicher, was passiert, wenn chefignoreDateien in derselben Runlist miteinander in Konflikt stehen.

Viel Glück.