如何使用 Chef 菜谱来设置环境变量?

发布于 2024-11-14 10:09:19 字数 75 浏览 6 评论 0原文

如何使用 Chef 菜谱来设置环境变量?

我需要使用 Chef 食谱设置环境变量。您能提供一个如何实现这一目标的示例吗?

How can you use a Chef recipe to set an environment variable?

I need to set an environment variable using a Chef recipe. Can you provide an example of how to accomplish this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

佼人 2024-11-21 10:09:19

如果您需要严格在 Chef 进程内设置环境变量,则可以使用 ENV['foo'] = 'bar',因为它是一个 ruby​​ 进程。

如果您需要为 执行提供程序 设置一个,Chef 会公开一个环境哈希:

execute 'Bootstrap the database' do 
  cwd "#{app_dir}/current"
  command "#{env_cmd} rake db:drop db:create db:schema:load RAILS_ENV=#{rails_env}"
  environment 'HOME' => "/home/#{app_user}"
  user app_user
  action :run
  not_if %[psql -U postgres -c "\\l" | grep #{db_name}]
end

如果您'如果您想设置一个持久的环境变量,那么您可能需要让 Chef 编辑 /etc/profile.d/chef.sh/etc/environment、用户的配置文件, ETC。

If you need an env var set strictly within the Chef process, you can use ENV['foo'] = 'bar' since it's a ruby process.

If you need to set one for an execute provider, Chef exposes an environment hash:

execute 'Bootstrap the database' do 
  cwd "#{app_dir}/current"
  command "#{env_cmd} rake db:drop db:create db:schema:load RAILS_ENV=#{rails_env}"
  environment 'HOME' => "/home/#{app_user}"
  user app_user
  action :run
  not_if %[psql -U postgres -c "\\l" | grep #{db_name}]
end

If you're looking to set a persistent environment variable then you may want to have Chef edit /etc/profile.d/chef.sh, /etc/environment, a users' profile, etc.

赢得她心 2024-11-21 10:09:19

如果您想使用 Chef 在系统上进行设置,请查看magic_shell 食谱。

magic_shell_environment 'RAILS_ENV' do
  value 'production'
end

If you want to set it on the system with Chef, checkout the magic_shell cookbook.

magic_shell_environment 'RAILS_ENV' do
  value 'production'
end
悲欢浪云 2024-11-21 10:09:19

如果您想在 /etc/environment 中的系统级别进行设置,您可以直接按照以下示例进行设置,而无需添加额外的配方(这会为 Java 添加两个环境变量):

sys_env_file = Chef::Util::FileEdit.new('/etc/environment')
{
  'JAVA_HOME' => '/usr/lib/jvm/java-1.7.0-openjdk-amd64',
  'LD_LIBRARY_PATH' => '/usr/lib/jvm/java-1.7.0-openjdk-amd64/lib'
}.each do |name, val|
  sys_env_file.insert_line_if_no_match /^#{name}\=/, "#{name}=\"#{val}\""
  sys_env_file.write_file
end

If you want to set it at the system level in /etc/environment, you can do so directly per the following example without adding an additional recipe (this adds two env variables for Java):

sys_env_file = Chef::Util::FileEdit.new('/etc/environment')
{
  'JAVA_HOME' => '/usr/lib/jvm/java-1.7.0-openjdk-amd64',
  'LD_LIBRARY_PATH' => '/usr/lib/jvm/java-1.7.0-openjdk-amd64/lib'
}.each do |name, val|
  sys_env_file.insert_line_if_no_match /^#{name}\=/, "#{name}=\"#{val}\""
  sys_env_file.write_file
end
奈何桥上唱咆哮 2024-11-21 10:09:19

Windows 和 Linux 之间执行此操作的方法有所不同。最简单的方法是:

Windows

使用 windows_env 资源创建系统环境变量:

windows_env 'CHEF_LICENSE' do
  value 'accept'
end

Linux

如果您只需要它来运行说明书及其子项,那么使用 Ruby ENV 资源。这不会是永久性的:

ENV['CHEF_LICENSE'] = 'accept'

如果您需要它是永久性的(并使用bash):

在/etc/profile.d中创建一个脚本:

  1. 创建一个模板脚本(例如chef.sh.erb)
  2. 填写模板脚本:

    <代码>#!/bin/bash
    export CHEF_LICENSE='accept' # Chef Infra Client 15 需要

  3. 将模板资源放入您的菜谱中(您可能需要设置属性和所有者/组设置,我想让这个示例保持简单)

    模板'/etc/profile.d/chef.sh'做
    来源“chef.sh.erb”
    end

这里有一些额外的资源供您阅读此处引用的不同资源:

模板资源
windows_env 资源

The way to do this is different between Windows and Linux. The easiest way would be:

Windows

Use the windows_env resource to create a System environment variable:

windows_env 'CHEF_LICENSE' do
  value 'accept'
end

Linux

If you only need it for the cookbook run and its children, then use the Ruby ENV resource. This will NOT be permanent:

ENV['CHEF_LICENSE'] = 'accept'

If you need it to be permanent (and use bash):

Create a script in /etc/profile.d:

  1. Create a template script (such as chef.sh.erb)
  2. Fill out the template script:

    #!/bin/bash
    export CHEF_LICENSE='accept' # Needed for Chef Infra Client 15

  3. Put the template resource in your recipe (You may want to set attributes and owner/group settings, I wanted to keep this example simple)

    template '/etc/profile.d/chef.sh' do
    source 'chef.sh.erb'
    end

Here are some additional resources to read up on the different resources referenced here:

template resource
windows_env resource

予囚 2024-11-21 10:09:19

对于 Linux,最好的方法是使用

ENV['Var'] = 'Value'

当您使用此命令时,配方旋转的每个子进程都将使用此 ENV 值。您可以使用 bash 资源并回显 Var 的值来验证它。

For Linux, the best way to it is by using

ENV['Var'] = 'Value'

When you use this command, every sub process spun by the recipe will be using this ENV value. You can verify it using a bash resource and echoing the value of Var.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文