在我当前的设置中,我有一个主机启动脚本,它在 DC 某处获取一个新配置的 VM,发出我需要运行的几个命令puppet apply
(确保设置了主机名,安装了该 puppet,它可以看到它的 puppet 配置)。然后puppet apply
负责其余的工作(加上部署我们软件的结构)。
一切都好,但安装所需的 puppet 模块目前发生在我的主机脚本中。在我想安装新模块之前,这非常有效,然后我必须在现有主机上手动对其进行排序。看起来puppet应该可以做到这一点,但是我没有找到正确的指令。
# If only this worked...
module { 'maestrodev-rvm':
ensure => present
}
我见过puppet librarian,但它似乎增加了比它解决我们安装的少量模块更多的复杂性。如果/当我们需要更复杂的东西时,这似乎是一个解决方案。
我错过了什么吗?
librarian-puppet
是最简单的答案。就我个人而言,我总是建议提前做一些工作并首先实施一个可扩展的解决方案,而不是不断地修改你的方法。它的工作原理与 Ruby gem 的工作原理相同
bundler
——您只需创建一个列出您Puppetfile
想要的模块的列表(即没有依赖项)。当您
librarian-puppet install
第一次在 Puppet 开发机器(通常是您的本地工作站)上运行时,它将询问所有模块并自动构建依赖关系列表(如果有问题的模块使用该metadata.json
文件来详细说明依赖关系)。它还将创建Puppetfile.lock
以记录为每个模块及其依赖项选择的确切版本。对于后续更改,您可以运行
librarian-puppet update <module>
以将特定模块更新到最新版本。这将重新计算依赖项并更新Puppetfile.lock
.重要说明 -
librarian-puppet
将完全控制您的modules
目录,因此您编写的任何自定义模块都需要在您的Puppetfile
.部署就像在您的节点上运行一样简单
librarian-puppet install
- 这将查看Puppetfile.lock
(而不是Puppetfile
)并安装您的所有模块。