仅为配置程序

时间:2016-02-22 18:52:17

标签: vagrant puppet

我需要在$PATH的前面添加一个环境变量:

  1. 不会超出配置运行。
  2. 是依赖的,即在的运行中早些时候会安装某些内容,然后可通过$PATH使用,因此我无法全局设置as this cookbook says to
  3. 我尝试了the answer here

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

    但我收到错误Error: All resource specifications require names。当我添加一个名字时,我得到了关于语法的其他错误,为此我正在摆弄修复只会给我带来其他错误(错误Syntax error at '}'; expected '}'是我最喜欢的!)

    我已尝试使用export进行设置,但我看到:Error: Could not find command 'export'

    我也尝试过使用setsetenv,结果相似。必须有一种直截了当的方法来做到这一点,但我找不到它。

    非常感谢任何帮助或见解。

    编辑:只需添加,这些是可用的shell:

    $ cat /etc/shells
    # /etc/shells: valid login shells
    /bin/sh
    /bin/dash
    /bin/bash
    /bin/rbash
    /bin/zsh
    /usr/bin/zsh
    

    zsh是配置的一部分,但如果需要,它可能是答案的要求。

2 个答案:

答案 0 :(得分:1)

添加到您的路径前面,您想要添加您的资源默认值,我相信:

Exec { environment => "PATH=value:$PATH", }

这可能不正确,但我知道它会替换你设置的变量,默认情况下不附加到它们。更多详情请见https://docs.puppetlabs.com/puppet/latest/reference/type.html#exec-attribute-environment

答案 1 :(得分:0)

我为此尝试了几种方法,但我找到的最好的方法是使用Hiera。我读了很多关于如何用Vagrant设置这个内容的博客,但this was the best我找到了。

我的项目目录布局

Vagrantfile
pp/
  manifests/
  modules/
  data/
    hiera.yml
    common.yml

Vagrantfile

Vagrantfile的相关部分:

  config.vm.provision "puppet" do |puppet|
    puppet.manifests_path = "pp/manifests"
    puppet.module_path = "pp/modules/custom"
    puppet.manifest_file  = "default.pp"
    puppet.hiera_config_path = "pp/data/hiera.yaml"
  end

我还不知道为什么需要hiera.yaml指向common.yaml,但这就是它的方式。

hiera.yaml

---
:backends:
  - yaml

:hierarchy:
  - "common"

:yaml:
  :datadir: '/vagrant/pp/data'

common.yaml

---
ruby_version: "2.3.0"
ruby_prefix: "/opt/rubies"
...

然后在清单

$ruby_version = hiera("ruby_version")
$ruby_prefix = hiera("ruby_prefix")
$ruby_dir_fullpath = "${ruby_prefix}/ruby-${ruby_version}"

对我来说似乎付出了很多努力,但同样,这就是它的方式。