是否可以在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
或者是否有简单的方法来实现此目标?
答案 0 :(得分:2)
是否可以在puppet清单文件中使用sh / bash变量?
基本上没有。 Puppet不依赖于环境变量来解释清单文件。此外,它通常在受控和最小的环境中运行外部命令,并且通常不通过外壳。你的建议几乎没有机会工作,如果它碰巧工作,那么我将其描述为一个错误,而不是一个特征。
我是否必须创建自定义事实或是否有简单的方法来实现这一目标?
如果有问题的数据特定于目标节点(在您的示例中不一定是这种情况),那么这确实是事实所服务的角色。但是,实现自己的事实并不难。看起来您已经完成了external fact的近乎完整的实施。把它放在一个文件中,稍微装饰一下,然后将它放在主人的合适目录中,你就得到了一个事实。
另一方面,如果数据不是特定于节点,那么您应该考虑将其存储在您的站点数据中(即在Hiera数据存储中),或让主机自己确定它在目录编译期间,可以通过the generate()
function。