2013-08-23 92 views
16

我使用vagrant与puppet为开发环境设置虚拟机。我想简单地在.pp文件中设置一些环境变量。为Ubuntu 64位使用虚拟盒子和流浪基座盒。使用Puppet设置环境变量

我目前有这个。

$bar = 'bar' 

class foobar { 
    exec { 'foobar': 
    command => "export Foo=${bar}", 
    } 
} 

但配置时出现错误:无法找到命令“导出”。

这似乎应该是很简单的我缺少某种要求或路径,exec类?我注意到在文档中有一个环境选项来设置环境变量,我应该使用它吗?

回答

3

你可以尝试:以acomplish这个

class foobar { 
    exec { 'foobar' : 
    command => "/bin/bash -c \"export Foo=${bar}\"", 
    } 
} 
+0

感谢您的答复,我实际上找到了解决方案。虽然它消除了关于命令未找到的错误,但不幸的是,它不会产生预期的结果。当我进入虚拟机时,环境变量Foo没有设置。 – bgrantdev

+3

这是一个noop。它修改了专门为这个'exec'资源分支的shell的环境。这个shell然后立即终止。出口没有效果。 –

15

简单的方法就是把你的ENV在/ etc /环境乏,这可以确保它们可用于一切(或几乎一切)。

事情是这样的:

class example($somevar) { 
    file { "/etc/environment": 
     content => inline_template("SOMEVAR=${somevar}") 
    } 
} 

原因有参数化的类是这样你就可以从hiera自动变量查找(http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup)目标吧...如果你在/ etc /环境坚持的东西,通常情况下,如果你真的使其具体环境最好。

注:我只在Ubuntu

+0

我喜欢简单和简洁的修复,比我不喜欢这会污染我的'/ etc/environment'。谢谢。 – 7yl4r

17

测试这个,如果你只需要在木偶运行中可用的变量,什么不妥:

Exec { environment => [ "foo=$bar" ] } 

+1

exec语句不会在登录到服务器时导出变量。 – ptierno

+6

我知道 - 那就是为什么我说'如果你只需要傀儡运行中可用的变量'。这个问题没有说明需要在用户shell中设置变量 – John

4

我得到它周围也使用/etc/profile.d中的方式:

$bar = 'bar' 
file { "/etc/profile.d/my_test.sh": 
    content => "export Foo=${bar}", 
    mode => 755 
} 

这将确保每次你登录(如SSH),变量$ MYVAR被出口到您的环境。通过木偶和登录(前Ssh本地主机)申请后,回声$美元将返回吧

0

我知道这是一个老问题,但我能够设置PS1提示值,并将其添加到我的.bashrc这样的文件:

$PS1 = '\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \$ ' 

和一个类中:

exec {"vagrant-prompt": 
    unless => "grep -F 'export PS1=\"${PS1}\"' ${HOME_DIR}/.bashrc", 
    command => "echo 'export PS1=\"${PS1}\"' >> ${HOME_DIR}/.bashrc", 
    user => "${APP_USER}", 
} 

-F使得grep它把它解释为固定字符串。否则它不会找到它并继续添加到.bashrc文件。