我可以通过木偶清单安装木偶模块吗?

时间:2013-05-27 14:06:49

标签: puppet

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

5 个答案:

答案 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',
}