【问题标题】:How to use a class from a module immediately after installing it with Puppet?如何在使用 Puppet 安装模块后立即使用模块中的类?
【发布时间】: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


【解决方案1】:

不,你不能这样做。编译目录后,Puppet 将在适当的目录中搜索所有必需的代码和数据。由于java 模块在目录应用程序之前不存在,因此依赖于它的目录编译(在应用程序之前发生)将失败。您在这里绝对是在处理“鸡和蛋”的情况。我强烈建议不要使用 Puppet 代码来安装 Puppet 代码。

另外,安装和管理 Puppet 模块的推荐方法是使用以下解决方案之一:

如果您使用 agent 配置器并将 Vagrant 实例订阅到 Puppet Master,这些也将为您在 Vagrant 中解决问题。

如果您在 Vagrant 内部使用 apply 供应商,那么您将需要走不同的路线。最简单的解决方案是在 Puppet 安装后使用shell 配置器通过module install 安装 Puppet 模块(除非您使用的是带有 Puppet 的 Vagrant 盒子,在这种情况下您可能没有在其上安装 Puppet)。或者,您可以与安装模块的主机共享一个目录,或者将librarian-puppetr10k gem 安装到 Vagrant 框,然后使用它们安装到适当的路径中。我可以根据要求详细介绍这些内容。

【讨论】:

  • 这里值得一提的是github.com/xorpaul/g10k,这是 Go 中闪电般快速的 r10k 替代品。我做出了改变,不会回头。
  • @AlexHarvey 尽管我讨厌在 go 中进行开发,但我已经看到了 Goss 和 Serverspec 之间的性能比较,所以我猜想这里正在发生类似的事情。我需要确定 Puppet 是否知道这一点并希望将其内部化,或者至少使用代码管理器使其成为 r10k 的可交换后端;要么让我把它推销给企业组织。无论如何,在那里找到很好。
  • 好吧,我在 Puppet Community Slack 上告诉了他们这件事,一些人似乎印象深刻。他们应该内化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 2020-01-17
  • 2015-02-12
  • 1970-01-01
相关资源
最近更新 更多