Ниже приведен рецепт, который я использую для копирования и установки программного обеспечения на моем сервере Windows.
batch "Get installed software list" do
code "wmic /output:C:\\InstallList.txt product get name,version"
end
if File.read('C:/InstallList.txt', mode: 'r:BOM|UTF-16:UTF-8') =~ /.NET Framework 4/
print "Dotnet framework 4 is already installed."
else
remote_file 'c:/repo/dotNetFx40_Full_x86_x64.exe' do
source 'file:////10.132.17.53/e$/CHEFREPO/dotNetFx40_Full_x86_x64.exe'
end
batch "Install Dotnet" do
cwd 'c:/repo/'
code <<-EOH
dotNetFx40_Full_x86_x64.exe #{node['mycloud_dotnet']['passive']} #{node['mycloud_dotnet']['CEIPconsent']} #{node['mycloud_dotnet']['chainingpackage']} #{node['mycloud_dotnet']['createlayout']} #{node['mycloud_dotnet']['lcid']} #{node['mycloud_dotnet']['log']} #{node['mycloud_dotnet']['msioptions']} #{node['mycloud_dotnet']['norestart']} #{node['mycloud_dotnet']['promptrestart']} #{node['mycloud_dotnet']['quit']} #{node['mycloud_dotnet']['repair']} #{node['mycloud_dotnet']['serialdownload']} #{node['mycloud_dotnet']['uninstall']} #{node['mycloud_dotnet']['parameterfolder']} #{node['mycloud_dotnet']['NoSetUpVersionCheck']} #{node['mycloud_dotnet']['uninstallpatch']}
del dotNetFx40_Full_x86_x64.exe
EOH
not_if {File.read('c:/InstallList.txt', mode: 'r:BOM|UTF-16:UTF-8') =~ /.NET Framework 4/}
end
end
Пакетный ресурс создал текстовый файл, содержащий список уже установленного программного обеспечения. Затем я читаю этот файл, чтобы проверить, установлено ли уже программное обеспечение. Это так, я печатаю сообщение. В противном случае рецепт перемещается в мою часть else, где я загружаю установку из удаленного репозитория, а затем устанавливаю ее с помощью автоматической установки. Но при запуске клиента я получаю следующую ошибку:
[2014-08-22T05:26:38-07:00] FATAL: Errno::ENOENT: No such file or directory - C:
/InstallList.txt
Мой клиент каким-то образом выполняет код File.read
в блоке if перед выполнением первого пакета resource("Get installed Software List")
. Любые идеи, что может пойти не так, и обходной путь для того же.