Я использую chef
для создания установочных файлов для локальной сборки в Windows 10 (например, использую ChefDK с chef-client -z -o win10-setup
).
Я хочу использовать cookbook_file
или remote_directory
для копирования файлов *.dll
которые у меня есть локально в моей кулинарной книге. Я обнаружил, что если в моей кулинарной книге есть .dll, шеф-повар пожалуется, что не видит файл и выдает команду Chef::Exceptions::FileNotFound
.
Например, если у меня есть [cookbook]\files\default\notepadplusplus\plugins\someplugin.dll
и попробовать:
cookbook_file "#{ENV["USERPROFILE"]}\\AppData\\Roaming\\Notepad++\\plugins\\someplugin.dll" do
source 'notepadplusplus/plugins/someplugin.dll'
action :create_if_missing
only_if { ::File.exist?("#{ENV["PROGRAMFILES"]}/Notepad++/notepad++.exe") }
end
она не будет работать. Однако, если переименовать someplugin.dll
в someplugin.dll.plugin
, а затем изменить свой код к следующему, где я обновить source
соответственно
cookbook_file "#{ENV["USERPROFILE"]}\\AppData\\Roaming\\Notepad++\\plugins\\someplugin.dll" do
source 'notepadplusplus/plugins/someplugin.dll.plugin'
action :create_if_missing
only_if { ::File.exist?("#{ENV["PROGRAMFILES"]}/Notepad++/notepad++.exe") }
end
это будет работать.
Тем не менее, это не идеальное решение, потому что я не хочу делать cookbook_file
для каждого файла отдельно, а вместо этого использую remote_directory
чтобы скопировать все плагины в папке одновременно.
Я запустил тест с remote_directory
и обнаружил, что он скопирует другие файлы, которые не являются *.dll
но пропустит файлы *.dll
Я не хочу использовать много сценариев для переименования файлов после копирования, так как это может привести к ошибкам.
Есть ли какая-то особая причина, по которой шеф, кажется, не считает, что файлы .dll
не существуют или каким-то образом настроен на игнорирование этих файлов? Кажется, что он фильтрует по фактическому расширению файла, а не по данным в файле, так как трюк переименования работает выше.