问题描述
我一直在寻找这个问题的答案,但是没有运气,但是有一种方法可以在运行“ 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
被临时设置为环境变量,而产生副作用。