Удаленный_файл в Linux с использованием Windows Share

Я пытаюсь использовать Windows Share для копирования файлов. Он отлично работает в Windows, где он дает ошибку, когда я использую его Linux.

remote_file 'download' do 
source 'file:////server/repo/client.zip' 
path "/etc/chef/client.zip" 
end

Журнал ошибок

Errno::ENOENT ------------- Нет такого файла или каталога @ rb_sysopen - /server/repo/client.zip

Resource Declaration: --------------------- 
# In 52: remote_file 'download' do 
53: source 'file:////server/repo/client.zip' 
54: path "/etc/chef/client.zip" 
56: end 
57: #end

2 ответа

Тот факт, что это работает вообще на UNC-путях, был отчасти случайным (хотя, чтобы никто не понял, что это неправильно, он не будет удален AFAIK). Для Linux не существует аналогичной схемы. Вы можете использовать execute ресурс и cp охватить основной вариант использования.

execute 'cp /from /to' do
  creates '/to'
end

Ты можешь попробовать:

remote_file 'download' do 
  source '\\server\repo\client.zip' 
  path "/etc/chef/client.zip" 
end

Ресурс remote_file поддерживает сетевые пути Windows через Chef::Provider::RemoteFile::NetworkFile класс (если кто-то хочет покопаться в источнике для получения дополнительной информации).

Диспетчер под ключом remote_file отключает ведущие двойные зазоры '\\', поэтому эти символы должны быть засыпками, а не косыми чертами. Также обратите внимание, что я использую одинарные кавычки, а не двойные кавычки - если используются двойные кавычки (для интерполяции или просто стиля), то обратные удары необходимо экранировать самим, и это становится source "\\\\server\\repo\\client.zip", Я вполне уверен, что сам рубин будет терпеть, когда остальная часть backwhacks изменяется на слэши (так source '\\server/repo/client.zip' может быть законно?), но это выглядит неловко.

Эта функция была впервые выпущена в 12.4.0 на https://github.com/chef/chef/pull/3336

Другие вопросы по тегам