我有一个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:
...
...
...
现在我不想迭代完整的哈希值。相反,我想从上面的哈希调用一个特定的块。比如说,哈希块只对应于userA。我不确定如何在下面显示的节点块中执行此操作:
[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']
}
}
答案 0 :(得分:1)
您可以从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']
}
}
在相关的旁注中,看到抛出以下错误:
来自错误:无法从远程服务器检索目录:SERVER上的错误500:{“message”:“服务器错误:评估错误:eval时出错 使用函数调用,未定义的方法“空”?为零:NilClass
hiera
函数查找的表示您对nil
键或具有nil
值的键执行了查找。这两者通常都指向数据或查找中使用的密钥中的某种拼写错误,并且更常见的是在层次结构中以错误的优先级执行的查找,hieradata中缺少的数据或实际的nil
值对于hieradata中的钥匙。