After a lot of trial and error here's what I came up with. It may not be
elegant, but it works. It will pull in all hosts that match on the
${environment} in this case "test", so it pulled in test-search001,
test-search002, test-search003 & test-search004.
#Custom function searchparse
module Puppet::Parser::Functions
newfunction(:searchparse, :type => :rvalue) do |args|
oldarray = args[0]
newarray = Array.new
pos = 0
oldarray.each do |value|
newarray.push(value['name'])
pos = pos + 1
end
return newarray
end
end
#Final puppet code
$cluster_name = "${environment}-search"
class { 'java':
package => 'java-1.8.0-openjdk',
}
package { 'java-1.7.0-openjdk':
ensure => absent,
require => Class['java'],
}
package { 'jq':
ensure => present,
}
$f = {
item => 'hosts',
search => "${cluster_name}",
filter_results => 'fqdn',
per_page => '20',
foreman_user => "${puppet_user}",
foreman_pass => "${puppet_pass}"
}
$hostlist = foreman($f)
$hostlist2 = $hostlist['results']
$hostlist3 = searchparse($hostlist2)
#from this site: https://github.com/elastic/puppet-elasticsearch/issues/647
file { '/usr/local/bin/checklicense.sh':
ensure => present,
owner => 'root',
group => 'root',
mode => '0755',
source => 'puppet:///modules/fm_search/checklicense.sh',
require => Package['jq'],
}
file { '/etc/elasticsearch/license.json':
ensure => present,
content => "${elastic_license}",
require => Class['elasticsearch'],
}
class { 'elasticsearch':
repo_version => '5.x',
manage_repo => true,
java_install => false,
jvm_options => [
"-Xms${xms}",
"-Xmx${xmx}"
],
config => { 'cluster.name' => $cluster_name }
}
$elastic_config = {
'node.name' => $hostname,
'network.host' => '0.0.0.0',
'discovery.zen.ping.unicast.hosts' => $hostlist3,
'xpack.security.enabled' => 'false',
'discovery.zen.minimum_master_nodes' => '2',
'bootstrap.memory_lock' => 'true',
}
elasticsearch::instance { $hostname:
config => $elastic_config
}
Elasticsearch::Plugin { instances => $hostname }
elasticsearch::plugin { 'x-pack': }
class { 'kibana':
config => {
'server.host' => '0.0.0.0',
},
require => Class['elasticsearch'],
}
kibana_plugin { 'x-pack': }
exec { 'install license':
command => 'curl -XPUT http://localhost:9200/_xpack/license -d
@/etc/elasticsearch/license
.json ; sleep 5; /etc/init.d/kibana restart',
onlyif => '/etc/elasticsearch/checklicense.sh',
provider => 'shell',
require =>
[File['/etc/elasticsearch/license.json'],File['/usr/local/bin/checklicense.sh']
,Class['elasticsearch'],Class['kibana']]
}
Matt
On Tuesday, August 8, 2017 at 10:13:44 AM UTC-4, Matt Shields wrote:
>
> I'm trying to get a list of hostnames to populate an array from the
> Foreman function. We have servers that are dedicated to clients and
> non-production. We use naming {clientid}-{server_type}. So for example,
> test1-search001, test1-search002, test2-search001, test2-search003,
> client1-search001, client1-search002.
>
> With my code below, I'm able to get back what appears to be json with the
> following error. Line 111 is the discovery.zen.ping.unicast.hosts line.
>
> $search_hostnames = "${clientid}-search"
>
> $f = {
> item => 'fact_values',
> search => "${search_hostnames}",
> filter_results => 'fact = hostname',
> per_page => '20',
> foreman_user => "${puppet_user}",
> foreman_pass => "${puppet_pass}"
> }
>
> $hostlist = foreman($f)
>
> file { '/root/search.txt':
> ensure => present,
> content => "${hostlist}",
> }
>
> elasticsearch::instance { $hostname:
> config => {
> 'node.name' => $hostname,
> 'network.host' => '0.0.0.0',
> 'path.data' => '/opt/elastic/search',
> 'discovery.zen.ping.unicast.hosts' => ${hostlist},
> },
> }
>
> Notice: Local environment: 'production' doesn't match server specified
> node environment 'test', switching agent to 'test'.
> Info: Retrieving pluginfacts
> Info: Retrieving plugin
> Info: Loading facts
> Error: Could not retrieve catalog from remote server: Error 500 on SERVER:
> Server Error: Syntax error at '}' at
> /etc/puppetlabs/code/modules/fm_search/manifests/init.pp:111:56 on node
> test-search001.useast.mydomain.com
> Warning: Not using cache on failed catalog
> Error: Could not retrieve catalog; skipping run
>
>
> {total => 0, subtotal => 4, page => 1, per_page => 20, search =>
> test-search, sort => {by => , order => }, results => {
> test-search001.useast.mydomain.com => {networking::hostname =>
> test-search001, hostname => test-search001, networking::fqdn =>
> test-search001.useast.mydomain.com, clientcert =>
> test-search001.useast.mydomain.com, fqdn =>
> test-search001.useast.mydomain.com}, test-search002.useast.mydomain.com
> => {hostname => test-search002, networking::hostname => test-search002,
> clientcert => test-search002.useast.mydomain.com, fqdn =>
> test-search002.useast.mydomain.com, networking::fqdn =>
> test-search002.useast.mydomain.com}, test-search003.useast.mydomain.com
> => {hostname => test-search003, networking::hostname => test-search003,
> fqdn => test-search003.useast.mydomain.com, networking::fqdn =>
> test-search003.useast.mydomain.com, clientcert =>
> test-search003.useast.mydomain.com}, test-search004.useast.mydomain.com
> => {hostname => test-search004, networking::hostname => test-search004,
> fqdn => test-search004.useast.mydomain.com, clientcert =>
> test-search004.useast.mydomain.com, networking::fqdn =>
> test-search004.useast.mydomain.com}}}
>
--
You received this message because you are subscribed to the Google Groups
"Foreman users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/foreman-users.
For more options, visit https://groups.google.com/d/optout.