Puppet:如何在清单中收集选定的节点名称?

时间:2016-12-07 12:56:57

标签: puppet

我正在尝试建立一组运行ELK堆栈各个部分的节点。特别是,我有一组运行Elasticsearch的系统,我想填写我的logstash配置文件,以便它知道哪些系统上有ES。

我可以在logstash配置中看到类似的内容(显然未经测试):

output {
  elasticsearch {
    hosts => [
      <% 
        @es_hosts.each do |host|
          "#{host}",
        end
      -%>
    ]
  }
}

但我无法弄清楚如何收集运行elasticsearch的系统的主机名。我有一个应用RabbitMQ和ES的模块,它已经导出了一些资源,但是看起来它只需要nodenames来合并到一个列表中。

--------编辑以下--------

在检查了我使用的一些PF模块之后,我偶然发现了数据,并认为它可能是候选人。这是我所做的,发布在这里,因为它没有按照我预期的方式工作。

在我的弹性搜索节点上(有几个):

@@datacat_fragment { "${::hostname} in hosts":
  tag => ['elasticsearch_cluster'],
  target => '/etc/logstash/conf.d/master.conf',
  data => {
    host => ["${::hostname}" ],
  }
}

然后,在需要输出到这些ES节点的logstash节点上:

Datacat_fragment<| tag == 'elasticsearch_cluster' |>

datacat { '/etc/lostash/conf.d/master.conf':
  template => "${module_name}/logstash-master.conf.erb",
}

最后,模板本身:

input { [...snip...] }
filter {}
output {
  elasticsearch {
    <% @data.keys.sort.each do |host| %>
    hosts = [
    <%= @data[host.sort.join(',') %>
    ]
  }
}

可悲的是,所有这一切的结果都是

input { [...snip...] }
filter {}
output {
  elasticsearch {
  }
}

所以目前,看起来导出的资源没有按预期实例化,我看不出原因。如果我添加一个datacat_fragment以相同的方式定义,但在logstash清单中是本地的,那么数据就会被插入到.conf文件中。它只是ES节点中被忽略的那些。

更复杂的是,输入部分需要插入一个基于接收文件的系统的值。因此,有一部分需要像传统模板一样运行,另一部分需要从多个源插入数据。 Datacat看起来很有希望,但还有另外一种方法吗?以某种方式使用内联模板进行Concat?

0 个答案:

没有答案