Puppet apply:Could 找不到名称为 'default' 或 'puppetserver.example.com 的节点语句

Puppet apply:Could not find node statement with name 'default' or 'puppetserver.example.com

/etc/puppetlabs/puppet/puppet.conf:

[master]
vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
icodedir = /etc/puppetlabs/code
dns_alt_names=puppetserver.example.com,puppetmaster,puppet
#environmenpath = /etc/puppet/environments
#basemodulepath = /etc/puppet/environments/production/modules:/opt/puppetlabs/puppet/modules


[main]
certname = puppetserver.example.com
server = puppetserver.example.com
environment = production
runinterval = 5s

/etc/puppetlabs/code/environments/production/manifests/site.pp:

node 'windows.example.com' {


$iis_features = ['Web-WebServer','Web-Scripting-Tools']

iis_feature { $iis_features:

   ensure => 'present',

}

}

我是 Puppet 的新手,遵循了这个指南:https://www.howtoforge.com/tutorial/centos-puppet-master-and-agent/

puppet agent --test 工作正常(已安装 IIS)

但是当尝试应用 site.pp(在 Puppet 服务器上)时,我得到

Error: Could not find node statement with name 'default' or 'puppetserver.example.com, puppetserver.example, puppetserver, localhost' on node puppetserver.example.com

谁能解释一下问题出在哪里?

应用目录或主清单时,需要与客户端证书匹配的节点定义。在这种情况下,您的 Puppet Master 的匹配节点定义为:

puppetserver.example.com, puppetserver.example, puppetserver, localhost

其中

和 none 列在您的节点定义中。请注意,您还可以将 default 的节点定义放在节点定义的末尾,以 "catch" 之前未定义的任何节点。可以在 here.

中找到主清单中节点定义的文档

要解决此问题,您只需为 Puppet 服务器添加节点定义即可。由于您是在服务器上执行 puppet apply,清单正在本地应用。

node 'windows.example.com' {
  $iis_features = ['Web-WebServer','Web-Scripting-Tools']

  iis_feature { $iis_features:
    ensure => 'present',
  }
}

node 'puppetserver.example.com' {
  notify { 'this is the puppet master': }
}

node default {
  notify { 'this node did not match any of the listed definitions': }
}

请注意,如果您在 Puppet Master 上执行 puppet agent -t,您也会观察到遇到的错误。此行为并非 puppet apply.

独有

使用 puppet config print manifest 找出 puppetserver 上加载了哪些文件。如果manifest points to directory目录下所有文件按字母顺序解析。

$ puppet config print manifest --section server --environment production
/etc/puppetlabs/code/environments/production/manifests

在你的情况下,puppetserver 可能会在 site.pp

中查找定义
/etc/puppetlabs/code/environments/production/manifests/site.pp

如果您不覆盖 puppet.conf 中的主机名,则应将其设置为

puppet config print --section agent certname

那么 certname 应该只匹配一个节点定义:

node /^www\d+$/ {
      include common
}

node 'example.com', 'example.com', 'example.com' {

}