我刚开始使用木偶。我不知道如何在木偶中执行课程。 我的文件" config.pp init.pp install.pp service.pp"。 例如install.pp:
class sshd::install{ ... }
接下来,我在init.pp中使用" include sshd :: install"来声明我的类。
我还尝试使用以下命令运行类:
class{'sshd::install':} -> class{'sshd::config':} ~> class{'sshd::service':}
之后,我启动" puppet apply init.pp"但没什么。
我的脚本单独工作,但是对于课程,我不知道如何执行我的所有课程。
由于
答案 0 :(得分:4)
我不确定你对Puppet做了多少研究以及它的代码是如何构建的,但这些可能有所帮助:
看来你开始使用基本的模块结构(基于你对init / install / service的使用),这很好,但是你的执行方法是直接清单(不是模块本身)赢得&除非您的文件位于有效的模块路径中,否则#39;在您正在测试的模块中工作autoloading。
基本上:您希望将您的类/模块结构化代码放在Puppet的模块路径(puppet config print modulepath
)中,然后您想使用另一个清单文件(.pp)来包含您的类。
示例文件结构:
/etc/puppetlabs/code/modules/sshd/manifests/init.pp
install.pp
service.pp
/tmp/my_manifest.pp
你的class sshd(){ ... }
代码进入init.pp,class sshd::install(){ ... }
进入install.pp等......
然后' my_manifest.pp'看起来像这样:
include ::sshd
您将申请:puppet apply /tmp/my_manifest.pp
。
一旦这样做,您就可以了解将清单应用到节点的各种方法(直接,如此,使用ENC,使用site.pp等等......随意进一步阅读)。
或者,只要模块位于您的模块路径中(如上所述),您就可以执行puppet apply -e 'include ::sshd'
为了获得你必须以你期望的方式运行的代码,它需要看起来像这样:
# Note: This is BAD code, do not reproduce/use
class sshd() {
class{'sshd::install':} ->
class{'sshd::config':} ~>
class{'sshd::service':}
}
include sshd
或类似的东西,它完全打破了模块结构的工作方式。 (事实上,如果没有正确路径中的模块,代码将无法工作,如果直接执行,将显示一些非常奇怪的行为。不要编写类似的代码。)