【发布时间】:2017-11-22 11:30:40
【问题描述】:
我正在使用 Vagrant 对 Puppet 进行实验。我是 Puppet 的新手。
我正在使用以下建议的方法在我的 Puppet 清单中安装模块:Can I install puppet modules through puppet manifest?
我的 default.pp 包含如下内容:
$dsesterojava = 'dsestero-java'
exec { 'dsestero-java':
command => "puppet module install ${dsesterojava}",
unless => "puppet module list | grep ${dsesterojava}",
path => ['/usr/bin', '/bin']
}
include java::java_7
我正在尝试导入一个模块,然后立即使用其中定义的类。
目前,我得到:
Error: Could not find class java::java_7
如果我注释掉包含行并重新运行它。模块安装。如果我随后删除了评论并再次运行配置,那么它就可以工作了。
这里有某种“鸡和蛋”的情况。我可以在安装它的同一 Puppet 清单中使用模块吗?
我该如何解决?
【问题讨论】:
-
不,你不能这样做。编译目录后,Puppet 将搜索所有必需的代码和数据。由于
java模块在目录应用程序之前不存在,因此依赖于它的目录编译将失败。您在这里绝对是在处理“鸡和蛋”的情况。我强烈建议不要使用 Puppet 代码来安装 Puppet 代码。 -
此外,您提供的链接不建议使用这种方法,而是使用图书馆员木偶。强烈建议使用这种方法(或其继任者 r10k 和代码管理器)。
-
感谢@MattSchuchard。我只是在学习 Puppet,但我们在本地有 Puppet Enterprise,我刚刚发现它使用 r10k - 所以我会试一试。
-
安装 Puppet 模块以在 Vagrant 中使用也是一种完全不同的野兽,当您将它们与 Vagrant 的内部 Puppet 配置器一起使用时。我希望 Frederic Henri 迟早会来并解释执行此操作的最佳方法,因为每当我 Puppet+Vagrant 时,我都是出于测试目的而这样做,因此永远不必处理这个问题。此外,如果您有 Puppet Enterprise,则可以使用“r10k++”(代码管理器),但这适用于代理供应商而不是应用供应商。
-
那么,根据要求,我已将 cmets 转换并扩展为答案。
标签: vagrant puppet vagrantfile