主要目标是自动添加所有 puppet 模块,以便可以使用一个命令启动所有 dev-env 和 prod-env。如何通过 puppet manifest 安装 puppet 模块?
5 回答
我们一直很高兴使用librarian-puppet来同步所有 3rd 方模块,它支持设置模块的位置和版本。所以生产和开发运行完全相同的代码。用法是一个班轮
librarian-puppet install
在其他情况下,我们有一个运行 puppet 两次的 shell 脚本,一次是只负责获取所需模块的最小模块,然后是当所有模块都可用时完整的 puppet 流。
“ Puppet 模块”类型和提供者正是这样做的:
module { 'author/mymodule':
ensure => present,
}
module { 'puppetlabs/stdlib':
ensure => '2.6.0',
}
module { 'puppetlabs/stdlib':
ensure => present,
modulepath => '/etc/puppet/modules',
}
最近版本的 Puppet 还有一个puppet module
命令,允许您从Puppet forge安装任意 Puppet 模块,例如:
$ puppet module install rcoleman/puppet_module
Notice: Preparing to install into /home/anarcat/.puppet/modules ...
Notice: Created target directory /home/anarcat/.puppet/modules
Notice: Downloading from https://forgeapi.puppetlabs.com ...
Notice: Installing -- do not interrupt ...
/home/anarcat/.puppet/modules
└── rcoleman-puppet_module (v0.0.3)
其他替代方案包括:
r10k 现在是 Puppet Entreprise 2015.03 的一部分,因此它当然可以被视为最佳实践。
这是我的一个例子:
$module_stdlib = 'puppetlabs-stdlib'
exec { 'puppet_module_stdlib':
command => "puppet module install ${module_stdlib}",
unless => "puppet module list | grep ${module_stdlib}",
path => ['/bin', '/opt/puppetlabs/bin']
}
$module_stdlib 是我要安装的模块。/bin
路径是grep
来自的路径。这/opt/puppetlabs/bin
是我的安装中存在 puppet 二进制文件的路径。
似乎可以编写用于安装 puppet 模块的模块 - 它只是puppet module
工具的包装器。但是,我还没有听说过这样的模块。
我想这种安装机制并不流行,因为您经常需要修改已安装的模块,进行一些自定义。管理此类修改的实用工具是版本控制系统。例如,在我们的团队中,我们将/etc/puppetlabs/puppet
目录保存在 git 存储库中。从 Puppet Forge 安装任何模块后,我们将其文件添加到版本控制并将其推送到远程 git 服务器。我们内部开发的模块也保存在这个存储库中。这样,几个 puppet master(开发和生产环境)与这个中央存储库同步,并且始终拥有所有模块的最新版本。
我这样做了,它似乎工作
exec { 'puppet-fstab':
path => '/bin:/usr/bin',
command => 'puppet module install -i /usr/share/puppet/modules/AlexCline-fstab >>/tmp/err.log',
}