从 Hiera 中检索特定的哈希块并传递给定义
Retrieve specific hash block from Hiera and pass to define
我有一个 define
函数,我 是 在需要时使用不同的参数从站点清单调用它。参数详细信息也仅出现在站点清单中。我现在正在尝试使用 Hiera 来存储这些参数详细信息。
[tom@pe-server] cat role_dll.pp
define sql::role_ddl (
$role_ddl_params
) {
$role_ddl_sql = $role_ddl_params[role_ddl_sql]
$user = $role_ddl_params[user]
$db = $role_ddl_params[db]
...code to consume above variables...
}
[tom@pe-server] cat my_node.yaml
role_ddl_params:
userA:
role_ddl_sql: 'f:/db/ddl.sql',
user: 'my_domain\userA',
db: 'test_db',
userB:
...
...
...
现在我不想遍历整个哈希。相反,我想从上面的哈希中调用一个特定的块。比方说,哈希块只对应于用户A。我不确定如何在下面显示的节点块中执行此操作:
[tom@pe-server] cat site.pp
node 'my_node' {
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => hiera('role_ddl_params')
}
}
更新:根据评论中的建议,我尝试了但出现以下错误:
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: {"message":"Server Error: Evaluation Error: Error while eval
uating a Function Call, undefined method `empty?' for nil:NilClass at /etc/puppetlabs/code/environments/production/manifests/site.pp:10
0:22 on node my_node.abc.com","issue_kind":"RUNTIME_ERROR","stacktrace":["Warning: The 'stacktrace' property is deprecated and will be
removed in a future version of Puppet. For security reasons, stacktraces are not returned with Puppet HTTP Error responses."]}
我遇到了这个 link 我尝试了以下方法但仍然失败并出现上述错误:
node 'my_node' {
$ddl_params = hiera('role_ddl_params')
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => $ddl_params['userA']
}
}
您可以对来自 hieradata 的散列查找进行直接键值访问,以访问特定用户的嵌套散列。
例如,可以在hiera
函数查找后立即执行:
node 'my_node' {
$ddl_params = hiera('role_ddl_params')['userA']
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => $ddl_params
}
}
或存储查找结果的变量:
node 'my_node' {
$ddl_params = hiera('role_ddl_params')
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => $ddl_params['userA']
}
}
您也可以完全内联它,尽管这可能会降低代码的表达能力:
node 'my_node' {
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => hiera('role_ddl_params')['userA']
}
}
在相关的旁注中,看到抛出以下错误:
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: {"message":"Server Error: Evaluation Error: Error while eval
uating a Function Call, undefined method `empty?' for nil:NilClass
来自 hiera
函数查找表示您对 nil
键或具有 nil
值的键执行了查找。这两者通常都指向数据或查找中使用的键中的某种拼写错误,更不常见的是在层次结构中以错误的优先级执行的查找、hieradata 中的数据丢失或实际的 nil
值hieradata 中的一个键。
我有一个 define
函数,我 是 在需要时使用不同的参数从站点清单调用它。参数详细信息也仅出现在站点清单中。我现在正在尝试使用 Hiera 来存储这些参数详细信息。
[tom@pe-server] cat role_dll.pp
define sql::role_ddl (
$role_ddl_params
) {
$role_ddl_sql = $role_ddl_params[role_ddl_sql]
$user = $role_ddl_params[user]
$db = $role_ddl_params[db]
...code to consume above variables...
}
[tom@pe-server] cat my_node.yaml
role_ddl_params:
userA:
role_ddl_sql: 'f:/db/ddl.sql',
user: 'my_domain\userA',
db: 'test_db',
userB:
...
...
...
现在我不想遍历整个哈希。相反,我想从上面的哈希中调用一个特定的块。比方说,哈希块只对应于用户A。我不确定如何在下面显示的节点块中执行此操作:
[tom@pe-server] cat site.pp
node 'my_node' {
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => hiera('role_ddl_params')
}
}
更新:根据评论中的建议,我尝试了但出现以下错误:
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: {"message":"Server Error: Evaluation Error: Error while eval
uating a Function Call, undefined method `empty?' for nil:NilClass at /etc/puppetlabs/code/environments/production/manifests/site.pp:10
0:22 on node my_node.abc.com","issue_kind":"RUNTIME_ERROR","stacktrace":["Warning: The 'stacktrace' property is deprecated and will be
removed in a future version of Puppet. For security reasons, stacktraces are not returned with Puppet HTTP Error responses."]}
我遇到了这个 link 我尝试了以下方法但仍然失败并出现上述错误:
node 'my_node' {
$ddl_params = hiera('role_ddl_params')
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => $ddl_params['userA']
}
}
您可以对来自 hieradata 的散列查找进行直接键值访问,以访问特定用户的嵌套散列。
例如,可以在hiera
函数查找后立即执行:
node 'my_node' {
$ddl_params = hiera('role_ddl_params')['userA']
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => $ddl_params
}
}
或存储查找结果的变量:
node 'my_node' {
$ddl_params = hiera('role_ddl_params')
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => $ddl_params['userA']
}
}
您也可以完全内联它,尽管这可能会降低代码的表达能力:
node 'my_node' {
sql::role_ddl { 'Granting ddl access to userA':
role_ddl_params => hiera('role_ddl_params')['userA']
}
}
在相关的旁注中,看到抛出以下错误:
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: {"message":"Server Error: Evaluation Error: Error while eval uating a Function Call, undefined method `empty?' for nil:NilClass
来自 hiera
函数查找表示您对 nil
键或具有 nil
值的键执行了查找。这两者通常都指向数据或查找中使用的键中的某种拼写错误,更不常见的是在层次结构中以错误的优先级执行的查找、hieradata 中的数据丢失或实际的 nil
值hieradata 中的一个键。