【问题标题】:puppet - How do I append to path variable?puppet - 如何附加到路径变量?
【发布时间】:2016-09-01 08:31:52
【问题描述】:

我只能访问我们团队的一个模块,其中全局清单由基础架构团队维护。 PATH 变量在全局清单中设置。

我想追加到 PATH 变量,但 puppet 忽略了我的 exec 块。

file { "/etc/profile.d/set_java_home.sh":
    ensure => file,
    source => "puppet:///modules/teamXXX/set_java_home.sh",
    mode => "u=rw,go=r"
}

Exec { path => [ "\${PATH}", "\${JAVA_HOME}/bin" ] }

如何附加到PATH 变量?

编辑

我应该提到,我希望为用户的 shell 环境而不是 puppet 的执行环境增强 PATH 变量。

【问题讨论】:

    标签: puppet


    【解决方案1】:

    Puppet 不能改变运行 shell 的环境。没有子进程可以 - 环境被复制到每个子进程,然后只能访问其单独的副本。

    要将某些内容附加到所有新登录 shell 的 PATH,您需要更改 profile 配置文件。如果您使用的是最新版本的bash,则应该有一个/etc/profile.d。您可以使用这样的资源:

    file { '/etc/profile.d/append-java-path.sh':
        mode    => '644',
        content => 'PATH=$PATH:/my/java/home/bin',
    }
    

    【讨论】:

    • 谢谢..这解决了我的问题。我的印象是 puppet 可能有一个声明性资源类型来设置路径
    • @manish 显然有这种类型的 Windows (windows_path)。对于 *NIX,这是行不通的,因为没有系统范围的路径设置。
    【解决方案2】:

    三个问题:

    1) 您无法访问本地客户端环境变量,例如 PATH 和 JAVA_HOME,除非您有一个因子脚本将它们注入您的 Puppet 客户端环境。我猜你没有。

    2) Exec 块建立自己的本地环境,该环境在 Exec 块结束时被销毁。因此,您可以根据需要在 Exec 块中设置路径,而它不会对其余块执行任何操作。请参阅 Puppet 源代码中的 provider/exec.rb。

    3) 除非某个其他块在其中包含 before => Exec["my_exec_block"],否则 Exec 块将以任意半随机顺序运行,可能不是您希望它运行的时候。

    最好的办法是将动作作为脚本运行并在实际脚本中设置 PATH。因此:

    file { "/opt/myapp/install_java_app":
          notify => Exec["install_java_app"],
          mode => 755,
          source => "puppet:///modules/myapp/install_java_app",
          before => Exec["install_java_app"]
        }
    exec { "install_java_app" :
          path => "/usr/bin:/usr/sbin:/bin:/sbin:/opt/myapp",
          command => "install_java_app",
          refreshonly => true
        }
    

    然后 /opt/myapp/install_java_app 将在其中包含您需要的任何 PATH 分配。

    这有点笨拙,但那是 Puppet。

    【讨论】:

    • 等等,你的意思是改变环境的事实?所以代理使用它来代替? - 如果可行,它应该被认为是一个可怕的黑客。干得好:-)
    【解决方案3】:

    以下是如何附加到路径的示例:

    Exec { path => [ '/bin' ] }
    
    exec { [ 'ls', 'who' ]: returns => 0; }
    
    Exec[who] { path +> [ '/usr/bin' ] }
    

    遗憾的是,无法绕过资源覆盖 - +> 语法是 only valid there

    我没有仔细检查这是否会导致附加路径或附加(我假设是后者),所以如果这对您很重要,您需要仔细检查。

    【讨论】:

    • 我应该提到,我希望为用户的 shell 环境而不是 puppet 的执行环境增强 PATH 变量。
    • 是的。是的,你应该有。在此上下文中添加了另一个答案。
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2013-09-07
    相关资源
    最近更新 更多