2014-09-01 69 views
0

要安装节点上的模块运行somethig喜欢: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.":} 

这应该只是一个复制文件,没什么大碍,因为我还在学习。

+0

您是否正在使用没有中央主人的“puppet apply”?如果没有,为什么要在每个代理上安装模块? – 2014-09-01 12:45:03

+0

我的计划是使用git而不是主设置进行分发。 – 2014-09-01 18:05:47

回答

2

是的,可以从Puppet内部管理模块。

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

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

它甚至有可能在提取了模块相同的运行同步exec资源。确保那些exec s需要module,以便powershell供应商可以及时获得。

1

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

Puppet模块不需要任何安装,只需将其内容复制到模块目录中。

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

+0

你是对的,但我也必须把我的木偶目录放在正确的位置,或者在执行apply时指定模块的路径。 – 2014-09-02 06:36:23

+0

这种方法有利有弊。好的一面是,你可以将精确的模块版本提交给你的'git'树。但是,然后,你可以通过将模块版本提交给你的历史来管理模块版本。说到这一点,你会在回购中获得很多影响力,以防你关心这些事情。 – 2014-09-02 08:48:26