Удаленный_файл в 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