【问题标题】:Passing parameters to puppet manifest via command line通过命令行将参数传递给 puppet manifest
【发布时间】:2020-10-23 11:17:03
【问题描述】:

我一直在寻找这个问题的答案,但没有运气,但有没有办法在运行“应用”命令时将参数传递到 puppet 清单中,类似于在运行 UNIX 时传递参数的方式命令行脚本?

我看到的建议提到要么将变量保留在清单顶部以供以后使用,要么将它们存储在 hiera 文件中。但两者都没有真正回答我提出的问题?

任何关于如何做到这一点的指导将不胜感激?

编辑:

我一直在做的一个例子是:

$doc_root = "/var/www/example"

exec { 'apt-get update':
 command => '/usr/bin/apt-get update'
}

package { 'apache2':
 ensure  => "installed",
 require => Exec['apt-get update']
}

file { $doc_root:
 ensure => "directory",
 owner => "www-data",
 group => "www-data",
 mode => 644
}

file { "$doc_root/index.html":
   ensure => "present",
   source => "puppet:///modules/main/index.html",
   require => File[$doc_root]
}

如您所见,该变量在顶部是硬编码的,而当我尝试以相同方式使用该变量时,我需要能够在运行应用命令时传递该值。 出于同样的原因,将查找函数与 hiera.yaml 文件结合使用并不能满足我的要求。 我唯一能想到的解决方法是创建一个接受参数的 UNIX 脚本,将这些值保存在 yaml 文件中,然后让脚本执行 .pp 文件。 但我希望 puppet 有办法直接做到这一点。

【问题讨论】:

  • 您能否展示您迄今为止所做的工作,以便我们提供答案?
  • 我已经编辑了主要问题,希望它能增加更多的清晰度。

标签: command-line parameters apply puppet


【解决方案1】:

将变量传递到无类清单以与puppet apply 子命令一起使用的常见过程是从 CLI 将值分配给 Facter 事实,然后在清单中解析其值。您将从清单头部删除硬编码变量doc_root 开始。然后,您将变量修改为如下事实:

file { $facts['doc_root']:
...
file { "${facts['doc_root']}/index.html":
...
require => File["${facts['doc_root']}"] <-- interpolation required due to Puppet DSL inability to resolve hash value as first class expression

然后,您将通过 puppet apply 子命令传递 Facter 值,例如:

FACTER_doc_root=/var/www/example puppet apply manifest.pp

请注意,这也会导致 FACTER_doc_root 被临时设置为环境变量作为副作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2011-03-04
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多