前缀:我搜索了这个,但事实上有很多事情会导致这个问题,我一直无法找到解决这个特殊情况的方法。
我有一个人偶大师(3.0.2-1;RHEL6)和 /etc/puppet/manifests/site.pp 文件包含以下内容:
import 'nodes/nodes.pp'
$puppetserver = 'puppet.example.dom'
自然地,服务器域不是正在使用的域,而是已更改以保护无辜者。
nodes/nodes.pp 文件包含:
node 'agent1.example.dom' {
include users,
}
用户类在 /etc/puppet/modules/users 下。清单/init.pp 文件包含:
class users {
group { 'admins':
ensure => 'present',
gid => '501',
}
user { 'user1':
ensure => 'present',
uid => '10000',
gid => '501',
home => '/home/user1',
password_max_age => '60',
password_min_age => '1',
shell => '/bin/bash',
}
}
如果我从 nodes.pp 文件中删除“include users”行,将应用目录:
Info: Retrieving plugin
Info: Caching catalog for agent1.example.dom
Info: Applying configuration version '1357858753'
Notice: Finished catalog run in 0.02 seconds
但是,当我包含它时,会出现以下错误:
[root@agent1 ~]# puppet agent --test --noop
Info: Retrieving plugin
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not
parse for environment production: Syntax error at '}' at
/etc/puppet/manifests/nodes/nodes.pp:3 on node agent1.example.dom
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
这让我觉得我在 init.pp 文件中有一个语法错误,但我不知道它会是什么。也许我没有正确配置,或者我错误地链接了各个部分?
我试过在 nodes.pp 文件中不使用逗号,也尝试过使用逗号。我也尝试过在用户 init.pp 文件的最后一行不带逗号以及带逗号。我试过在组定义和用户定义之间添加一个空行。不管我做了什么小改动,我都会得到相同的结果。
我也试过将节点定义直接放入 site.pp 文件中,但出现了同样的错误。只是来自与以前不同的位置(site.pp 与 nodes/nodes.pp)。
已使用从 agent1 到 puppet master 上的端口 8140 的 telnet 验证了与服务器的连接。
有任何想法吗?代理也是 v3.0.2-1,但是是 RHEL5。我还没有测试过 RHEL6 代理。
编辑:我使用 --debug 选项运行了测试。输出在这里: http: //pastebin.com/zNs5DvCD
编辑 2:在尝试之前我没有声明类/模块。我这样做了puppet apply /etc/puppet/modules/users/manifests/users.pp
(在更改文件名之后)。现在这给了我以下错误:
[root@agent1 puppet]# puppet agent --test --noop
Info: Retrieving plugin
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not
find class users for agent1 on node agent1
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
所以,有些事情发生了变化。语法错误没有了,但是找不到类。
我按照 Sirex 在聊天中的建议将其发布在http://ask.puppetlabs.com上。有人指出,我已将文件模块清单重命名为 users.pp,但根据 Puppet 内置的自动加载类和子类,它应该是 init.pp。
去掉
,
后面include users
的——那是我唯一能用眼睛看到的。ensure => present
你也应该可以一起去尝试人偶解析器验证 .pp
尝试木偶皮棉
首先,您必须将该类重命名回 init.pp,否则 Puppet 将无法找到它。
其次,使用定义类的文件运行 puppet apply什么都不做。如果你想使用 puppet apply 来测试你的类,你可以把它放在 tests/init.pp
然后,您可以使用以下方法测试该类:
第三,include 语句 (nodes.pp) 后面的 , 需要去掉。
亲切的问候,德国。