已安装的Puppet 5和puppet agent -t不应用更改且没有错误

时间:2017-09-06 12:14:52

标签: puppet

我在主服务器和服务器上安装了puppet 5,并从代理安装/签署了证书...现在我想尝试一个简单的代理运行...

我跟随了测试Hiera 5的木偶官方文档(链接如下): https://docs.puppet.com/puppet/5.0/hiera_quick.html

但是当我运行时,代理从不应用更改:

# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for xxxxxx.xxx.xxx
Info: Applying configuration version '1504530655'
Notice: Applied catalog in 0.04 seconds
当我运行puppet apply /[manifest-location]/manifest.pp时,在主人身上

它运行正常。

我的主人puppet.conf:

[main]
   server = puppet-master-test.xxx.xxx
   dns_alt_names = puppet-master-test.xxx.xxxx
   certificate_revocation = false
   modulepath = /etc/puppetlabs/code/environments/production/modules

   [master]
   certname = puppet-master-test.xxx.xxx
   vardir = /opt/puppetlabs/server/data/puppetserver
   logdir = /var/log/puppetlabs/puppetserver
   rundir = /var/run/puppetlabs/puppetserver
   pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
   codedir = /etc/puppetlabs/code
   environment_timeout = unlimited

代理商的puppet.conf:

[main]
    server = puppet-master-test.xxx.xxx

[master]
  certname = puppet-master-test.xxx.xxx

[agent]
        environment = production
        certname = puppet-client.xxx.xxx
        server = puppet-master-test.xxx.xxx

有人可以就此提出建议吗? 提前谢谢。

修改

我创建了一个简单的模块:

#/etc/puppetlabs/code/environments/production/modules/profile/manifests/hiera_test.pp
class profile::test {
  file { '/tmp/hiera_test.txt':
    ensure  => file,
    owner   => root,
    mode => '0755',
  }
}

init.pp:

#/etc/puppetlabs/code/environments/production/modules/profile/manifests/init.pp
include profile::test

我有一个site.pp:/etc/puppetlabs/code/environments/production/manifests/site.pp

node 'puppet-client.xxx.xxx' {
  include profile
}

输出:

#puppet config print modulepath --section master --environment production
/etc/puppetlabs/code/environments/production/modules

#puppet config print manifest --section master --environment production
/etc/puppetlabs/code/environments/production/manifests/site.pp

当我使用时在主人身上:

#puppet apply /etc/puppetlabs/code/environments/production/modules/profile/manifests/init.pp
Notice: Compiled catalog for puppet-master-test.xxx.xxx in environment production in 0.07 seconds
Notice: /Stage[main]/Profile::Test/File[/tmp/hiera_test.txt]/ensure: created
Notice: Applied catalog in 0.11 seconds

但是,代理上的puppet agent -t没有在/tmp ....tmp权限下创建文件权限是1777,如果你需要更多信息,可以告诉我吗?

感谢。

1 个答案:

答案 0 :(得分:6)

正如我在评论开头所说的那样,如果在给定的目录运行中,代理程序没有尝试将任何资源应用于目标计算机并且不发出任何诊断信息,则表明目标计算机已经与提供给它的目录完全同步。代理缓存目录(详细信息取决于Puppet版本),因此您可以检查实际包含的资源。有时困扰Puppet网站的问题之一,特别是新网站,是代理商有效地收到空目录。这通常可归因于主人设定的相关清单中的缺陷。

重要的是要理解master从代理环境的站点清单开始构建目录(这不一定是puppet apply的方式),并且只为给定的类声明了资源通过该过程发现的节点包含在其目录中。同样重要的是要理解代理和主服务器都执行各种形式的缓存 - 前者能够在主服务器变得不可用时强制执行配置,后者则用于提高容量和性能。

假设您的站点清单中的节点块将节点名称指定为相关代理程序配置为用作其证书名称的相同标识符,则您的清单集 - 尽管确实存在缺陷 - 不应成功生成空该目标节点的目录。您可以考虑在调试时通过添加或切换到默认节点块来取消节点名称:

node default {
  include profile
}

但是,由于您已将主服务器environment cache timeout设置为无限制(默认),但是,如果您在启动主服务器后修改了清单集,则服务器仍可以提供空目录。您可以手动使主服务器使其缓存过期,或者更简单地说,您可以重新启动主服务。如果您愿意,还可以通过将缓存超时设置为0(并重新启动服务)来禁用环境缓存。

至于清单集中的缺陷,至少有三个关键问题:

  1. Puppet的include函数声明 。为了支持这一点,它可能会导致清单文件被评估,但它不应被解释为执行C预处理器#include指令的清单的词法插值。它更类似于Python的import命令。

  2. 在网站清单之外,任何清单都不应包含除顶级范围内的类或定义的类型定义之外的任何内容。它们尤其不应该包含该范围内的类或资源声明;这些清单中的此类声明应仅出现在类的主体或定义的类型定义中。声明可能出现在站点清单内的任何范围内,但在该上下文中,它们通常应出现在节点块中。

  3. 要让Puppet找到类和定义的类型定义,它们必须位于a correctly located and named file中。

  4. 关于(1),您的站点清单包含执行include profile的节点块。这声明类'profile'应该包含在目标节点的目录中,但不存在这样的类。 Puppet寻找类定义(production/modules/profile/manifests/init.pp)的清单内容在顶部范围内包含类profile::test声明(参见(2))。目录构建器应该在没有请求的类的情况下进行故障转移。它没有这样做告诉我,要么它根本没有查看你的节点块(可能是节点名称不匹配),要么它正在使用不受该问题影响的环境的缓存版本首先(但也不会导致包含所需的类)。

    您在modules/profile/manifests/init.pp中看起来想要的是

    class profile {
      include profile::test
    }
    

    请注意,include语句出现在类“profile”的定义中,而“profile”类又是Puppet将在该特定文件中查找的类的名称。这与您使用puppet apply直接应用此清单所需的内容不同。

    或者,你可以完全跳过这个简单的'profile'类,只是让节点块直接声明'profile :: test',尽管有些人可能会基于文体理由批评这种方法。

    但这不是全部。您确实提供了类profile::test的可行定义,但是您将其描述为驻留在名称不对应的文件中。 Puppet在production/modules/profile/manifests/hiera_test.pp中找不到它;它需要在production/modules/profile/manifests/test.pp而不是(3)。