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

问题描述

我一直在寻找这个问题的答案,但是没有运气,但是有一种方法可以在运行“ 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]
}

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

解决方法

将变量传递到与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被临时设置为环境变量,而产生副作用。