我如何"要求"木偶中的外部模块?

时间:2014-09-01 11:34:28

标签: puppet

要在您运行的节点上安装模块,例如:puppet module install SomeModuleOnForge

有没有办法将这段代码放在清单中,而不必在每个节点上安装它?

我知道我可以编写一些自定义代码来执行此操作但不存在类似于适用于外部模块的需求吗?或者我是否必须下载模块的代码并将其放入我自己的仓库?

使其更具体。我在Windows上做这个以及如何使用Josh Cooper powershell模块,但是我无法让它工作。我的文件夹结构如下所示:

  • 木偶
    • 清单
      • site.pp
    • 模块
      • 的powershell
        • LIB
          • 木偶
            • 提供商
              • EXEC
                • powershell.rb
我认为这是最重要的文件。模块中的其余部分也存在,但如果我正确理解代码,我就不需要它们。

我简单的愚蠢site.pp看起来像这样:

include powershell
node default {
    notify {"Stuff from default":}
}

node 'MYCOMPUTER' {
    notify {"MYCOMPUTER":}
}

node 'winpuppet' {
    notify {"Notify from random":}
}

exec {'get_eventstore':
    command => 'Invoke-WebRequest http://download.geteventstore.com/binaries/EventStore-OSS-Win-v3.0.0-rc9.zip -OutFile c:\\downloads\\EventStore-OSS-Win-v3.0.0-rc9.zip',
    creates => "c:/downloads/EventStore-OSS-Win-v3.0.0-rc9.zip",
    provider => powershell,
}

file {'c:/downloads/EventStore-OSS-Win-v3.0.0-rc9.zip':
    mode => 0755,
    require => Exec["get_eventstore"],
}

notify {"I'm notifying you.":}

这只是复制一个文件,没有什么严重的,因为我还在学习。

2 个答案:

答案 0 :(得分:2)

是的,可以在Puppet中管理模块。

您需要将"puppet_module" module与您的清单捆绑在一起(最好通过源代码管理)。然后,您可以编写清单,例如

module {
    'joshcooper/powershell':
        ensure => 'present'
}

甚至可以在获取模块的同一次运行中同步exec资源。确保这些exec需要module,以便powershell提供商及时上线。

答案 1 :(得分:1)

您已经拥有了模块的git存储库,因此您可以在每个节点上查看该存储库。

除了将内容复制到模块目录之外,Puppet模块不需要任何安装。

puppet module install foo进行一些检查以确定适当的版本以满足其他已安装模块的要求,以及您正在安装的模块所需的安装,但只是下载数据并将其复制到您的模块目录。