【问题标题】:How to create temporary file from Chef template for use only during chef run如何从厨师模板创建临时文件,仅在厨师运行期间使用
【发布时间】:2015-01-31 22:02:49
【问题描述】:

我有一个 Chef 配方,可以在 Microsoft Azure 中为我的 Windows VM 启用扩展。这是通过 powershell_script 资源完成的。 PowerShell 脚本上传一个 JSON 配置文件。我想做的是为这个配置文件创建一个模板,并在文件系统上临时创建这个文件,然后从 PowerShell 脚本中调用那个 JSON 文件。厨师运行完成后,删除该文件。当然,我可以将所有逻辑写入脚本(创建文件,然后删除它),但我的问题是,Chef 中是否有内置机制可以做到这一点?我将如何从我的 powershell 脚本中引用该临时位置?我相信我可以使用:

Chef::Config[:file_cache_path]

设置暂存位置,但我不知道如何,或者如果可以,在该位置创建我的 erb。这是一个 Windows 盒子,虽然它可能没什么区别。

【问题讨论】:

    标签: json powershell chef-infra erb


    【解决方案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 运行时都被执行,这不是一件好事。

    【讨论】:

      猜你喜欢
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多