在Puppet中使用Bash变量

时间:2017-01-10 20:46:29

标签: bash puppet

是否可以在puppet清单文件中使用sh / bash变量? 例如我正在使用(是的,它很难看,我知道):

var=$(curl -s http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html | grep 'linux-x64.tar.gz' | awk '{print $7}' | sed 's#MB","filepath":"##g#' | sed 's#"};###' | sort -V  | tail -1 | rev | cut -c 3- | rev)
echo $var

这将给我最新的Oracle java ver。 8个确切的下载链接。 我的愿望是在tomcat.pp清单文件中使用它。像这样:

tomcat::install { '/opt/tomcat8':
  source_url => '$var'
}

我是否必须创建自定义facts或者是否有简单的方法来实现此目标?

1 个答案:

答案 0 :(得分:2)

  

是否可以在puppet清单文件中使用sh / bash变量?

基本上没有。 Puppet不依赖于环境变量来解释清单文件。此外,它通常在受控和最小的环境中运行外部命令,并且通常不通过外壳。你的建议几乎没有机会工作,如果它碰巧工作,那么我将其描述为一个错误,而不是一个特征。

  

我是否必须创建自定义事实或是否有简单的方法来实现这一目标?

如果有问题的数据特定于目标节点(在您的示例中不一定是这种情况),那么这确实是事实所服务的角色。但是,实现自己的事实并不难。看起来您已经完成了external fact的近乎完整的实施。把它放在一个文件中,稍微装饰一下,然后将它放在主人的合适目录中,你就得到了一个事实。

另一方面,如果数据不是特定于节点,那么您应该考虑将其存储在您的站点数据中(即在Hiera数据存储中),或让主机自己确定它在目录编译期间,可以通过the generate() function