Puppet - 将散列作为 class 个参数传递
Puppet - Pass hash as class argument(s)
尝试做这样的事情:
# nodes.pp
node 'dev-a-1.sn1.vpc1.example.com' inherits project_j1n_sn1_vpc1_dev {
class { 'custom::core':
overrides => {
'openssh' => {'settings' => {'external_access' => 'true'}}, # Allow direct mounting for dev
'rsyslog' => {'settings' => {'role' => 'node', 'filters' => {'php' => {'target' => 'remote'}, 'mail' => {'target' => 'remote'}}}}
}
}
}
# custom::core
class custom::core($overrides = {}) {
if (has_key($overrides, 'openssh')) {
$settings = $overrides['openssh']['settings']
# Doesn't work
create_resources('openssh', $settings)
# Doesn't work
class { 'openssh': $settings }
}
}
是否可以调用 class 并将散列作为参数传递?
Puppet/Puppetmaster v2.7.26-1 (Centos 6.7)
Puppet 4+ 中有一种方法。
class { 'ssh':
* => $settings
}
在 roidelapluie's blog 上了解所有相关信息。
我的一个同事想出了一个很好的解决方案来解决以前 2+
木偶时代的类似问题。为此使用了 create_resources
。
http://www.followski.com/quick-note-how-to-use-create_resources-to-initialize-a-class-in-puppet/
您的代码可能如下所示:
nodes.pp
node 'dev-a-1.sn1.vpc1.example.com' inherits project_j1n_sn1_vpc1_dev {
class { 'custom::core':
overrides => {
'openssh' => {'settings' => {'external_access' => 'true'}}, # Allow direct mounting for dev
'rsyslog' => {'settings' => {'role' => 'node', 'filters' => {'php' => {'target' => 'remote'}, 'mail' => {'target' => 'remote'}}}}
}
}
}
自定义::核心
class custom::core($overrides = {}) {
if (has_key($overrides, 'openssh')) {
$settings = $overrides['openssh']['settings']
create_resources('class', { 'openssh' => $settings })
}
}
您会注意到在上面链接的示例中它看起来像 create_resources('class', $params)
,但是假设您有一个散列,其键是 class 名称(即 openssh
)并且它的值是要设置的参数。我在上面陈述的例子基本上做了同样的事情。
您的节点定义也可以是这样的:
node 'dev-a-1.sn1.vpc1.example.com' inherits project_j1n_sn1_vpc1_dev {
class { 'custom::core':
overrides => {
'openssh' => {'external_access' => 'true'}, # Allow direct mounting for dev
'rsyslog' => {'role' => 'node', 'filters' => {'php' => {'target' => 'remote'}, 'mail' => {'target' => 'remote'}}}
}
}
}
你的 class 是这样的:
class custom::core($overrides = {}) {
if (has_key($overrides, 'openssh')) {
create_resources('class', {'openssh' => $overrides['openssh'])
}
if (has_key($overrides, 'rsyslog')) {
create_resources('class', {'rsyslog' => $overrides['rsyslog'])
}
}
我想你现在明白了。
几年前我们经常使用它。不过,您可能需要考虑升级 Puppet 基础设施。
希望这对您有所帮助,或者至少为您指明了正确的方向。
尝试做这样的事情:
# nodes.pp
node 'dev-a-1.sn1.vpc1.example.com' inherits project_j1n_sn1_vpc1_dev {
class { 'custom::core':
overrides => {
'openssh' => {'settings' => {'external_access' => 'true'}}, # Allow direct mounting for dev
'rsyslog' => {'settings' => {'role' => 'node', 'filters' => {'php' => {'target' => 'remote'}, 'mail' => {'target' => 'remote'}}}}
}
}
}
# custom::core
class custom::core($overrides = {}) {
if (has_key($overrides, 'openssh')) {
$settings = $overrides['openssh']['settings']
# Doesn't work
create_resources('openssh', $settings)
# Doesn't work
class { 'openssh': $settings }
}
}
是否可以调用 class 并将散列作为参数传递?
Puppet/Puppetmaster v2.7.26-1 (Centos 6.7)
Puppet 4+ 中有一种方法。
class { 'ssh':
* => $settings
}
在 roidelapluie's blog 上了解所有相关信息。
我的一个同事想出了一个很好的解决方案来解决以前 2+
木偶时代的类似问题。为此使用了 create_resources
。
http://www.followski.com/quick-note-how-to-use-create_resources-to-initialize-a-class-in-puppet/
您的代码可能如下所示:
nodes.pp
node 'dev-a-1.sn1.vpc1.example.com' inherits project_j1n_sn1_vpc1_dev {
class { 'custom::core':
overrides => {
'openssh' => {'settings' => {'external_access' => 'true'}}, # Allow direct mounting for dev
'rsyslog' => {'settings' => {'role' => 'node', 'filters' => {'php' => {'target' => 'remote'}, 'mail' => {'target' => 'remote'}}}}
}
}
}
自定义::核心
class custom::core($overrides = {}) {
if (has_key($overrides, 'openssh')) {
$settings = $overrides['openssh']['settings']
create_resources('class', { 'openssh' => $settings })
}
}
您会注意到在上面链接的示例中它看起来像 create_resources('class', $params)
,但是假设您有一个散列,其键是 class 名称(即 openssh
)并且它的值是要设置的参数。我在上面陈述的例子基本上做了同样的事情。
您的节点定义也可以是这样的:
node 'dev-a-1.sn1.vpc1.example.com' inherits project_j1n_sn1_vpc1_dev {
class { 'custom::core':
overrides => {
'openssh' => {'external_access' => 'true'}, # Allow direct mounting for dev
'rsyslog' => {'role' => 'node', 'filters' => {'php' => {'target' => 'remote'}, 'mail' => {'target' => 'remote'}}}
}
}
}
你的 class 是这样的:
class custom::core($overrides = {}) {
if (has_key($overrides, 'openssh')) {
create_resources('class', {'openssh' => $overrides['openssh'])
}
if (has_key($overrides, 'rsyslog')) {
create_resources('class', {'rsyslog' => $overrides['rsyslog'])
}
}
我想你现在明白了。
几年前我们经常使用它。不过,您可能需要考虑升级 Puppet 基础设施。
希望这对您有所帮助,或者至少为您指明了正确的方向。