测试清单时出现 Puppet 错误

测试清单时出现 Puppet 错误

前缀:我搜索了这个问题,但事实上有很多事情可能导致这个问题,所以我无法找到这个特殊情况的解决方案。

我有一个 Puppet Master(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 下。manifests/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 文件中删除“包括用户”行,则目录将应用:

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

所以,有些事情发生了变化。语法错误消失了,但找不到该类。

答案1

我把它发布在http://ask.puppetlabs.com正如 Sirex 在聊天中所建议的。有人指出,我已将文件模块清单重命名为 users.pp,但根据 Puppet 内置的类和子类自动加载功能,它应该是 init.pp。

答案2

删除,之后include users- 那只是我能用眼睛看到的。

ensure => present你也可以选择

尝试使用 puppet 解析器验证 .pp

尝试 puppet-lint

答案3

首先,您必须将该类重命名回 init.pp,否则 Puppet 将无法找到它。

其次,使用定义该类的文件运行 puppet apply没有什么。如果你想使用 puppet apply 来测试你的类,你可以把它放在 tests/init.pp 中

include users

然后,你可以使用以下命令测试该类:

puppet apply modules/users/tests/init.pp

第三,include 语句(nodes.pp)后面的 , 需要去掉。

亲切的问候,Ger。

相关内容