Puppet 6和模块puppetlabs/accounts不以Hiera YAML格式创建用户帐户
当我运行puppet代理测试时,我没有错误输出,但用户没有创建错误 我的puppet hira.yaml配置为:Puppet 6和模块puppetlabs/accounts不以Hiera YAML格式创建用户帐户,yaml,puppet,hiera,Yaml,Puppet,Hiera,当我运行puppet代理测试时,我没有错误输出,但用户没有创建错误 我的puppet hira.yaml配置为: --- version: 5 datadir: "/etc/puppetlabs/code/environments" data_hash: yaml_data hierarchy: - name: "Per-node data (yaml version)" path: "%{::environment}/nodes/%{::trusted.certname}.
---
version: 5
datadir: "/etc/puppetlabs/code/environments"
data_hash: yaml_data
hierarchy:
- name: "Per-node data (yaml version)"
path: "%{::environment}/nodes/%{::trusted.certname}.yaml"
- name: "Common YAML hierarchy levels"
paths:
- "defaults/common.yaml"
- "defaults/users.yaml"
users.yaml是:
accounts::user:
joed:
locked: false
comment: System Operator
uid: '1700'
gid: '1700'
groups:
- admin
- sudonopw
sshkeys:
- ssh-rsa ...Hw== sysop+moduledevkey@puppetlabs.com
Hiera数据本身中的任何内容都不会导致将任何内容应用于目标节点。清单中某个地方或外部节点分类器脚本的输出中需要某种声明。此外,puppetlabs/accounts模块只提供定义的类型,而不提供类。您可以在Hiera中存储定义的类型数据并将其读回,但通过Hiera的自动参数绑定仅适用于类,而不适用于定义的类型 简而言之,不会创建任何用户,也不会报告任何错误,因为目标节点的目录中没有声明任何相关资源。你没有给木偶任何事做 如果要将存储的用户数据应用于节点,则需要以下内容:
$user_data = lookup('accounts::user', Hash[String,Hash], 'hash', {})
$user_data.each |$user,$props| {
accounts::user { $user: * => $props }
}
这将进入与目标节点匹配的节点块,或者更好地说,进入由该节点块或等效节点声明的类。对于这么少的行来说,这相当复杂,但简而言之:
查找函数在Hiera数据中查找键“accounts::user”
对出现在层次结构不同级别的结果执行哈希合并
期望结果是具有字符串键和哈希值的哈希
如果没有找到结果,则默认为空哈希;
迭代结果散列中的映射,并为每个映射声明accounts::user defined类型的一个实例
使用外部哈希键作为用户名,
以及与该键关联的值,作为从参数名称到参数值的映射。
这里有一些问题 您的hiera.yaml中缺少一行,即defaults键。应该是: -- 版本:5 默认值:添加此行 datadir:/etc/puppetlabs/code/environments 数据\u散列:yaml\u数据 等级制度: -名称:每节点数据yaml版本 路径:%{::environment}/nodes/%{::trusted.certname}.yaml -名称:通用YAML层次结构级别 路径: -默认值/common.yaml -默认值/users.yaml 我检测到,如果使用PDK,则使用附带的gem,建议: ▶ bundle exec rake验证 语法正常 -->语法:清单 -->语法:模板 -->语法:hiera:yaml 错误:无法分析hiera.yaml:hiera.yaml:此上下文第3行第10列不允许映射值 此外,除了John提到的,在数据中读取的最简单类是: 类测试哈希[字符串,哈希]$users{ 创建资源计数::用户,$users } 或者,如果您希望避免使用create_资源*: 类测试哈希[字符串,哈希]$users{ $users.each |$user,$props |{ 帐户::用户{$user:*=>$props} } } 请注意,我依赖于自动参数查找功能。请参阅下面的链接 然后,在Hiera数据中,将有一个名为test::users的键来对应类名test,key name users: -- test::users:请注意,此行已更改。 乔德: 锁定:错误 备注:系统操作员 uid:'1700' 吉德:“1700” 组: -管理员 -苏多诺普 sshkeys: -ssh rsa…Hw==sysop+moduledevkey@puppetlabs.com 与显式调用函数相比,使用自动参数查找通常是编写傀儡代码的更惯用方法 有关更多信息:
*请注意,create_资源是有争议的。Puppet社区中的许多人不喜欢使用它。该模块中的类是如何声明的?它应该是accounts::user,甚至它的工作原理与他们在手册中编写的一样,但我不知道它如何作为YAML/HieraThank you运行的。我尝试了这个变体,但没有添加用户。也许,我做错了什么类测试Hash[String,Hash]$users{$users.each |$user,$props{accounts::user{$user:*=>$props}}}`我刚刚测试过,代码运行正常-可以问一个新问题吗?谢谢。你能帮帮我吗?来自由字符串accounts/shell/bash填充的yaml内容。。。。bashrc_content:file'accounts/shell/bashrc'bash_profile_content:file'accounts/shell/bash_profile'From.pp content由这些文件的内容填充bashrc_content=>file'accounts/shell/bashrc',bash_profile_content=>file'accounts/shell/bash_profile',我很乐意提供帮助,但您需要提出一个新问题并显示所有相关代码。我已经创建了另一个问题。感谢您提前回复。