通过命令行将参数传递给 Puppet 清单

Passing parameters to puppet manifest via command line

我一直在寻找这个问题的答案,但没有成功,但是有没有办法在 运行 'apply' 命令时以类似于运行 在命令行上运行 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 有办法直接做到这一点。

将变量传递到无类清单以与 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 作为副作用被临时设置为环境变量。