通过命令行将参数传递给 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
作为副作用被临时设置为环境变量。
我一直在寻找这个问题的答案,但没有成功,但是有没有办法在 运行 '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
作为副作用被临时设置为环境变量。