主要目标是自动添加所有puppet模块,以便可以使用一个命令启动所有dev-env和prod-env。如何通过木偶清单安装木偶模块?
答案 0 :(得分:6)
我们很高兴使用librarian-puppet来同步所有第三方模块,它支持设置模块的位置和版本。因此生产和开发运行完全相同的代码。 用法是一个班轮
librarian-puppet install
在其他情况下,我们有一个shell脚本,它运行puppet两次,一次是一个只负责获取所需模块的最小模块,然后是所有模块可用时完整的puppet流程。
答案 1 :(得分:5)
"Puppet module" type and provider完全相同:
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的一部分,因此它当然可以被视为最佳实践。
答案 2 :(得分:4)
以下是我的一个例子:
$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
是我的安装中存在木偶二进制文件的路径。
答案 3 :(得分:2)
似乎可以编写用于安装puppet模块的模块 - 它只是puppet module
工具的包装器。但是,我还没有听说过这样的模块。
我认为这种安装机制并不受欢迎,因为通常需要修改已安装的模块,进行一些自定义。用于管理这种修改的实用工具是版本控制系统。例如,在我们的团队中,我们将/etc/puppetlabs/puppet
目录保存在git repostitory中。从Puppet Forge安装任何模块后,我们将其文件添加到版本控制并将其推送到远程git服务器。我们内部开发的模块也保存在此存储库中。这样,几个木偶大师(dev和prod环境)与这个中央存储库同步,并且始终拥有所有模块的最新版本。
答案 4 :(得分:0)
我做了这件事似乎有效
exec { 'puppet-fstab':
path => '/bin:/usr/bin',
command => 'puppet module install -i /usr/share/puppet/modules/AlexCline-fstab >>/tmp/err.log',
}