如何避免将环境变量传递给puppet代理

时间:2016-12-19 16:25:30

标签: environment-variables puppet agent

我正在尝试使用第三方木偶模块,该模块依赖于将运行的木偶代理正确设置JAVA_HOME的事实。

JAVA_HOME是必需的,因为在提供程序中定义了一个命令(请参阅here)。

我现在可以使用2个选项:

  • 执行木偶代理时传递变量(但仅在交互式中工作)
  • 使用cron(由木偶自行管理)执行木偶的用户获取文件

我的问题是:是否可以将环境传递给提供商?

可能的解决方案

从以下post

中获取灵感

我为它创建了一个新类型和一个提供者,里面设置了ENV [myvar] = myvalue。请注意,该类型不可保证。 变量将“泄漏”并允许依赖它的其他模块正常工作。

E.g。

### ... Provider code
def ensure
  if value = ENV[resource[:name]]
    value
  else
    :absent
  end
end

def ensure=(new_value)
  if new_value == :absent
    ENV.delete(resource[:name])
  else
    ENV[resource[:name]] = new_value
  end
end

### Usage in puppet code

mytype { 'MYVAR':
  ensure => 'MYVAL',
}

请注意,puppet会在每次运行时报告值已从缺席值更改为特定值。为了避免这种情况,我认为总是回归是足够的:缺席(我必须验证)。

1 个答案:

答案 0 :(得分:1)

  

是否可以将环境传递给提供者?

不,Puppet没有为每个提供商自定义外部命令环境的机制。不过,我认为你有比你所列举的更多的选择。其中:

  • remove命令包装在设置所需环境变量的shell脚本中

  • 如果您确实使用puppet来安排代理运行,请使用 cron 的内置支持来设置环境变量命令它运行。

后者似乎是一个很有前途的选择。