如何在 Chef 中使用 env 延迟设置环境变量?
How can I lazily set an environment variable using env in Chef?
我将凭据放入 s3 存储桶中,然后使用 ruby 块来获取它们。然后我想设置一个环境变量,以便当 upstart 启动一个进程时它使用这个变量。但是 ruby 块在设置属性后运行,所以我认为使用 lazy
是合适的,但我不清楚如何使用 lazy
.[= 设置 env
14=]
会不会像这样:
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
资源仅对Windows有效,与Linux无关。如果你想为 upstart 服务定义环境变量,它必须进入 upstart 配置,因为 Chef 中的环境对 upstart 产生的东西没有影响。
我将凭据放入 s3 存储桶中,然后使用 ruby 块来获取它们。然后我想设置一个环境变量,以便当 upstart 启动一个进程时它使用这个变量。但是 ruby 块在设置属性后运行,所以我认为使用 lazy
是合适的,但我不清楚如何使用 lazy
.[= 设置 env
14=]
会不会像这样:
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
资源仅对Windows有效,与Linux无关。如果你想为 upstart 服务定义环境变量,它必须进入 upstart 配置,因为 Chef 中的环境对 upstart 产生的东西没有影响。