Puppet - 如何将参数传递给命令行

时间:2018-06-11 15:30:37

标签: ruby puppet devops

我是puppet的新手,我想知道如何将参数传递给命令行。我会自己解释一下:

这是我正在运行的命令(木偶申请):

C:> puppet apply --environment test -l C:\ Puppet_logs \ log.log C:\ ProgramData \ PuppetLabs \ code \ environments \ test \ manifests \ site.pp

Site.pp:

File { backup => false }
node default {
include 'tn'
}

这意味着我正在跑步' tn'这是我的木偶项目中的一个模块。

例如, 我的木偶项目中有这些模块:

TN

PS

AV

因此,要运行每个模块,我需要转到此site.pp文件并将其更改为

包括' ps'

包括' av'

我的问题是 -

如何将这些模块作为参数传递给puppet apply命令?

我知道我可以创建3个.pp文件,每个文件包含一个模块(ps,av,tn)

然后我的命令将如下:

puppet apply --environment test -l C:\ Puppet_logs \ log.log C:\ ProgramData \ PuppetLabs \ code \ environments \ test \ manifests \ ps.pp

puppet apply --environment test -l C:\ Puppet_logs \ log.log C:\ ProgramData \ PuppetLabs \ code \ environments \ test \ manifests \ av.pp

puppet apply --environment test -l C:\ Puppet_logs \ log.log C:\ ProgramData \ PuppetLabs \ code \ environments \ test \ manifests \ tn.pp

但是,我认为这不是一个好的解决方案.. 还有另一种方法可以将这些模块作为参数传递给puppet吗? 如果我没有提到 - 每个模块都负责不同的行动。

谢谢!!!

2 个答案:

答案 0 :(得分:0)

  

我知道我可以创建3个.pp文件,每个文件包含一个模块   (ps,av,tn)

     

[...]

     

但是,我认为这不是一个好的解决方案。

为什么不是一个好的解决方案?对我来说,如果你有三件不同的东西可以做,那么你可以用一个单独的文件来完成每件事。

尽管如此,如果您的模块彼此不使用,那么您可以通过依赖标记完成您描述的内容。让您的站点清单包含所有三个模块:

File { backup => false }
node default {
  include 'tn'
  include 'ps'
  include 'av'
}

然后使用--tags选项仅选择其中一个模块及其带来的所有其他类:

puppet apply --tags ps --environment test -l C:\Puppet_logs\log.log C:\ProgramData\PuppetLabs\code\environments\test\manifests\site.pp

答案 1 :(得分:0)

一个pp文件是一个类文件,而不是一个模块,一个模块包含这些类以及支持/测试这些类所需的其他任何东西,请查看https://puppet.com/docs/puppet/5.5/modules_fundamentals.html

看看如何在https://forge.puppet.com/上布置模块

值得一看的是PDK https://puppet.com/docs/pdk/1.x/pdk.html,因为它将为您构建一个模块,您只需添加类。

在您的情况下,您可能想创建一个新模块(我们称其为mymodule),然后在该模块中将所有tn.pp ps.pp和av.pp类文件放在C:\ ProgramData \ PuppetLabs \ code \下environments \ test \ modules \ mymodule \ manifests目录。 然后使用示例模式进行本地测试,因此在您的模块中将有一个示例目录,其中可能有一个名为ps.pp的文件,其中将包含include mymodule::ps来包含该ps.pp类文件。 示例目录的目的是为您提供一种传递参数以进行本地测试的方法。

返回您要应用的site.pp文件的位置:

Node default {
  Include mymodule::ps
}

因此,现在您想对节点应用不同的类,并在这里达到了节点分类的世界,有许多方法可以做到这一点。就您的情况而言,我认为您可能正在小规模进行此操作,所以您应该这样做;

Node psserver.example.com {
  Include mymodule::ps
}

Node tnserver.example.com {
  Include mymodule::tn
}

看看一些在线培训https://puppet.com/learning-training/kits/puppet-language-basics