在木偶目录编译期间提供事实

时间:2016-12-27 23:47:35

标签: puppet nagios

我在木偶里有两节课。

这是第一个:

class nagios::is_production {

  file { '/etc/puppetlabs/facter/':
    ensure  => directory,
  }
  file { '/etc/puppetlabs/facter/facts.d/':
    ensure => directory,
  }
  file { '/etc/puppetlabs/facter/facts.d/production.txt':
    ensure  =>  file,
    content =>  epp('nagios/production.epp')
  }

}

这会创建一个自定义事实(生产=是/否,基于节点名称) 这个类本身就能正确地分配这个事实。

第二节课:

class nagios::client {

  if $facts[production] =~ yes {
    @@nagios_host {"${::hostname}":
      ensure                => present,
      address               => $::ipaddress,
      hostgroups            => "production, all-servers",
      notifications_enabled => $notifications_enabled,
      use                   => 'generic-server',
    }
  } else {
    @@nagios_host {"${::hostname}":
      ensure                => present,
      address               => $::ipaddress,
      hostgroups            => "non-production, all-servers",
      notifications_enabled => $notifications_enabled,
      owner                 => root,
      use                   => 'generic-server',
    } 
  }
}

这将为主机创建导出的资源,并将其添加到生产/非生产主机组。

如果存在自定义事实,则会正确地使用主机组创建主机。

我创建了一个第3课来吸引这2个,只是为了让自己更容易跟踪它:

class nagios::agent {

  Class['nagios::is_production']->Class['nagios::client']

  include nagios::is_production
  include nagios::client

}

这似乎应该使::is_production::client之前运行。当我在puppet run的节点上包含这个类时,我收到了这个错误:

  

错误:无法从远程服务器检索目录:SERVER上的错误500:服务器错误:评估错误:左匹配操作数必须生成字符串值。获得了Undef值。在节点上的/etc/puppetlabs/code/environments/production/modules/nagios/manifests/client.pp:3:6

因此事实似乎没有设置导致主机导出失败。

我错过了什么?

跟进回答

我想这样做: 如果域名包含'某事' 生产= YES 其他 生产=无

然后在nagios模块中, if $ facts [生产] =〜是 分配给生产主机组。

Bash:

#!/bin/bash
if  [[ $(hostname) =~ '512' ]] ; then
echo production=yes
else
echo production=no
fi

我希望能够在这里使用$ facts [something]来创建基于OS和IP等事物的其他事实。

我在这里阅读:Custom Facts Walkthrough

但我无法理解自定义事实加载路径,因为我没有该目录。我对傀儡很新......

堆叠溢出也是新的......我这样做了吗?

由于

1 个答案:

答案 0 :(得分:1)

事实是在pluginsync期间生成的。由于您在目录执行期间尝试放置外部事实,因此在插件同步之后的目录编译期间不能使用它。

您需要删除URI content://com.google.android.apps.photos.contentprovider/-1/2/content%3A%2F%2Fmedia%2Fexternal%2Ffile%2F47/ORIGINAL/NONE/864252053 类并将外部事实直接放在模块中以利用pluginsync。它应该位于您的模块结构中,如下所示:

nagios::production

然后在pluginsync期间复制外部事实,并生成事实。然后在目录编译期间可以使用它。 Facter还希望您的nagios |__facts.d |__production.txt 成为production.txt对。

点击此处查看有关正确使用外部事实的更多信息:https://docs.puppet.com/facter/3.5/custom_facts.html#external-facts