Как создать временный файл из шаблона Chef для использования только во время запуска Chef

У меня есть рецепт Chef, который позволяет расширить мою виртуальную машину Windows в Microsoft Azure. Это делается через ресурс powershell_script. Сценарий PowerShell загружает файл конфигурации JSON. Я хотел бы создать шаблон для этого файла конфигурации, временно создать этот файл в файловой системе и вызвать этот файл JSON из сценария PowerShell. После завершения повара удалите этот файл. Конечно, я могу записать всю эту логику в скрипт (создать файл, а затем удалить его), но мой вопрос в том, есть ли в Chef встроенный механизм, который это делает? Как мне сослаться на это временное местоположение из моего сценария PowerShell? Я считаю, что могу использовать:

Chef::Config[:file_cache_path]

чтобы установить место царапины, но я не знаю, как это сделать или, если могу, создать свой erb в этом месте. Это коробка Windows, хотя, вероятно, это не имеет значения.


person Progger    schedule 30.01.2015    source источник


Ответы (1)


Chef не имеет встроенного механизма для создания временных файлов. Вы уверены, что должны удалять его после каждого запуска? Почему не может остаться?

my_file_path = ::File.join( Chef::Config[:file_cache_path], 'my_file.json' )
template my_file_path do
  [...]
  notifies :run, "powershell_script[upload #{my_file_path}]"
end

powershell_script "upload #{my_file_path}" do
  action :nothing
  code "Upload #{my_file_path}" #just an example
end

Приведенный выше код создает файл из шаблона в каталоге Chef :: Config [: file_cache_path], но не удаляет его послесловия. Таким образом, вы можете настроить свой рецепт так, чтобы он не выполнял ваши сценарии PowerShell каждый раз, а только при изменении файла.

Если вы определенно хотите его удалить, просто добавьте

template my_file_path do
  action :delete
end

до конца рецепта. Но это приведет к тому, что все 3 ресурса (создать файл, запустить сценарий, удалить файл) будут выполняться при каждом запуске Chef, что не очень хорошо.

person Draco Ater    schedule 31.01.2015