15

主要目标是自动添加所有 puppet 模块,以便可以使用一个命令启动所有 dev-env 和 prod-env。如何通过 puppet manifest 安装 puppet 模块?

4

5 回答 5

7

我们一直很高兴使用librarian-puppet来同步所有 3rd 方模块,它支持设置模块的位置和版本。所以生产和开发运行完全相同的代码。用法是一个班轮

librarian-puppet install

在其他情况下,我们有一个运行 puppet 两次的 shell 脚本,一次是只负责获取所需模块的最小模块,然后是当所有模块都可用时完整的 puppet 流。

于 2013-05-30T05:53:30.793 回答
5

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 的一部分,因此它当然可以被视为最佳实践。

于 2015-02-23T21:44:49.690 回答
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是我的安装中存在 puppet 二进制文件的路径。

于 2016-01-25T23:48:35.503 回答
2

似乎可以编写用于安装 puppet 模块的模块 - 它只是puppet module工具的包装器。但是,我还没有听说过这样的模块。

我想这种安装机制并不流行,因为您经常需要修改已安装的模块,进行一些自定义。管理此类修改的实用工具是版本控制系统。例如,在我们的团队中,我们将/etc/puppetlabs/puppet目录保存在 git 存储库中。从 Puppet Forge 安装任何模块后,我们将其文件添加到版本控制并将其推送到远程 git 服务器。我们内部开发的模块也保存在这个存储库中。这样,几个 puppet master(开发和生产环境)与这个中央存储库同步,并且始终拥有所有模块的最新版本。

于 2013-05-28T15:18:53.233 回答
0

我这样做了,它似乎工作

exec { 'puppet-fstab':
    path => '/bin:/usr/bin',
    command => 'puppet module install -i /usr/share/puppet/modules/AlexCline-fstab >>/tmp/err.log',
}
于 2015-03-27T17:43:32.490 回答