问题描述
我将vagrant和puppet一起使用来为开发环境设置虚拟机。我只想在.pp文件中设置一些环境变量。为Ubuntu 64位使用虚拟盒和无所事事的基本盒。
我现在有这个。
$bar = 'bar'
class foobar {
exec { 'foobar':
command => "export Foo=${bar}",
}
}
但是供应时出现错误:找不到命令’export’。
这似乎应该足够简单,我是否缺少某种exec类型的需求或路径?我在文档中注意到有一个环境选项可以设置环境变量,我应该使用它吗?
最佳方案
如果您只需要Puppet(木偶)运行中可用的变量,那么:
Exec { environment => [ "foo=$bar" ] }
?
次佳方案
完成此操作的最简单方法是将env vars放在/etc /environment中,以确保它们可用于所有内容(或几乎所有内容)。
像这样:
class example($somevar) {
file { "/etc/environment":
content => inline_template("SOMEVAR=${somevar}")
}
}
将类参数化的原因是,您可以使用自动变量查找(http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup)从hiera中将其作为目标…如果您将某些内容粘贴在/etc /environment中,通常最好是使它特定于环境。
注意:我只在ubuntu上测试过
第三种方案
我解决的方法是也使用/etc/profile.d:
$bar = 'bar'
file { "/etc/profile.d/my_test.sh":
content => "export Foo=${bar}",
mode => 755
}
这样可以确保每次登录(例如ssh)时,变量$ MYVAR都将导出到您的环境中。通过puppet申请并登录(例如ssh localhost)后,echo $ Foo将返回bar
第四种方案
您可以通过在/etc/environment
中的一行上定义环境变量来设置环境变量,并且可以使用puppet中的file_line
确保文件内的一行。将这两个合并为以下解决方案:
file_line { "foo_env_var":
ensure => present,
line => "Foo=${bar}",
path => "/etc/environment",
}
第五种方案
您可以尝试以下操作,该操作为此exec
设置环境变量:
class foobar {
exec { 'foobar' :
command => "/bin/bash -c \"export Foo=${bar}\"",
}
}