Não é possível copiar arquivos .DLL usando cookbook_file no chef no windows

0

Estou usando chef para criar arquivos de configuração para uma compilação local no Windows 10 (por exemplo, usando o ChefDK com chef-client -z -o win10-setup ).

Eu quero usar cookbook_file ou remote_directory para copiar os arquivos *.dll que eu tenho localmente no meu livro de receitas. Eu descobri que se eu tiver um .dll no meu livro de receitas, o chef irá reclamar se ele não visualizar o arquivo e lançar Chef::Exceptions::FileNotFound .

Por exemplo, se eu tiver [cookbook]\files\default\notepadplusplus\plugins\someplugin.dll

e tente:

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

não funcionará. No entanto, se eu renomear someplugin.dll para someplugin.dll.plugin e, em seguida, alterar meu código para o seguinte, onde atualizo o source de acordo

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

funcionará.

No entanto, essa não é uma solução ideal porque não quero fazer cookbook_file para cada arquivo individualmente, mas em vez disso, use remote_directory para copiar todos os plug-ins da pasta de uma só vez.

Eu executei um teste com remote_directory e descobri que ele copiará outros arquivos que não são *.dll , mas ignorará os arquivos *.dll

Eu não quero ter que usar muitos scripts para renomear os arquivos, uma vez copiados, já que isso pode parecer propenso a erros.

Existe algum motivo em particular para o qual o chef não parece achar que .dll arquivos não existe ou está de alguma forma configurado para ignorar esses arquivos? Parece filtrar a extensão real do arquivo e não os dados do arquivo, já que o truque de renomear acima funciona.

    
por Eric G 30.10.2017 / 03:51

1 resposta

0

Embora essa pergunta tenha sido feita há um ano, eu mesmo me deparei com essa questão e consegui produzir uma solução para minha situação. Respondendo para que outros que tropeçam neste post tenham uma chance de alívio.

Verifique se o seu arquivo chefignore na raiz do seu livro de receitas não contém uma entrada para os arquivos .dll. Se você criou seu livro de receitas com o comando chef generate cookbook [cookbook_name] (ou talvez o comando knife equivalente), pode esperar que o arquivo chefignore tenha essa entrada.

Um exemplo da seção no arquivo chefignore que você deseja modificar:

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

Você pode comentar a linha ofensiva ou removê-la completamente.

Na minha situação particular, eu só queria usar o .dll em um livro de receitas aninhado que estava sendo usado para testes. Minha solução foi copiar o arquivo chefignore para a raiz do meu livro de receitas aninhado e modificar o arquivo lá.

Exemplo de caminho para o arquivo chefignore do livro de receitas interno:

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

Observe que o livro de receitas interno estava sozinho na minha lista de execução, não sei ao certo o que acontece quando você está em conflito com chefignore arquivos na mesma lista de execução.

Boa sorte.

    
por 13.09.2018 / 21:03