当前位置: 首页>>技术教程>>正文


shell – 使用P设置环境变量

, , ,

问题描述

我将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}\"",
   }
}

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9598.html,未经允许,请勿转载。