Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Puppet 6和模块puppetlabs/accounts不以Hiera YAML格式创建用户帐户_Yaml_Puppet_Hiera - Fatal编程技术网

Puppet 6和模块puppetlabs/accounts不以Hiera 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}.

当我运行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}.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',我很乐意提供帮助,但您需要提出一个新问题并显示所有相关代码。我已经创建了另一个问题。感谢您提前回复。