【问题标题】:How can I lazily set an environment variable using env in Chef?如何在 Chef 中使用 env 懒惰地设置环境变量?
【发布时间】:2016-05-23 00:50:01
【问题描述】:

我将凭据放入 s3 存储桶中,然后使用 ruby​​ 块来获取它们。然后我想设置一个环境变量,以便当新贵启动一个进程时它使用这个变量。然而,红宝石块在属性设置后运行,所以我认为使用lazy 是合适的,但我不清楚如何使用lazy 设置env

会不会是这样的:

ruby_block "get-credentials" do
  block do
    Chef::Log.info 'Getting sdk.'
    require 'aws-sdk'

    Chef::Log.info 'Getting making aws s3 instance.'
    s3 = AWS::S3.new


    Chef::Log.info 'Getting credentials from s3.'
    bar = s3.buckets['bucket-name'].objects['bar'].read
    Chef::Log.info 'Got bar with length #{bar.length}'

    node.set['foo']['bar'] = bar

  end
  action :run
end

env lazy BAR=node.set['foo']['bar']

service 'foo' do
    provider Chef::Provider::Service::Upstart
    action [ :enable, :start ]
end

我不确定。我仍在查看文档并进行试验,但也许有人知道。测试不同变体的转变需要很长时间。

【问题讨论】:

  • 为什么不在块内使用 'env BAR=bar'

标签: ruby environment-variables chef-infra


【解决方案1】:

env 资源仅适用于 Windows,与 Linux 无关。如果你想为 upstart 服务定义环境变量,它必须进入 upstart 配置,因为 Chef 中的环境对 upstart 产生的东西没有影响。

【讨论】:

  • 是的,文档让我很困惑。关于在 upstart 中使用 env 的那一行是在 upstart 模板中,而不是 ruby​​ 配方文件!这行得通。谢谢!
猜你喜欢
  • 2014-01-04
  • 2013-06-30
  • 2012-10-08
  • 2011-09-11
  • 2021-11-16
  • 1970-01-01
  • 2018-07-14
  • 2015-10-21
  • 2021-08-23
相关资源
最近更新 更多