# == Define: elasticsearch::template # # This define allows you to insert, update or delete templates that are used within Elasticsearch for the indexes # # === Parameters # # [*ensure*] # String. Controls if the managed resources shall be present or # absent. If set to absent: # * The managed software packages are being uninstalled. # * Any traces of the packages will be purged as good as possible. This may # include existing configuration files. The exact behavior is provider # dependent. Q.v.: # * Puppet type reference: {package, "purgeable"}[http://j.mp/xbxmNP] # * {Puppet's package provider source code}[http://j.mp/wtVCaL] # * System modifications (if any) will be reverted as good as possible # (e.g. removal of created users, services, changed log settings, ...). # * This is thus destructive and should be used with care. # Defaults to present. # # [*file*] # File path of the template ( json file ) # Value type is string # Default value: undef # This variable is optional # # [*content*] # Contents of the template ( json ) # Value type is string # Default value: undef # This variable is optional # # [*host*] # Host name or IP address of the ES instance to connect to # Value type is string # Default value: localhost # This variable is optional # # [*port*] # Port number of the ES instance to connect to # Value type is number # Default value: 9200 # This variable is optional # # === Authors # # * Richard Pijnenburg # define elasticsearch::template( $ensure = 'present', $file = undef, $content = undef, $host = 'localhost', $port = 9200 ) { require elasticsearch # ensure if ! ($ensure in [ 'present', 'absent' ]) { fail("\"${ensure}\" is not a valid ensure parameter value") } if ! is_integer($port) { fail("\"${port}\" is not an integer") } Exec { path => [ '/bin', '/usr/bin', '/usr/local/bin' ], cwd => '/', tries => 6, try_sleep => 10, } # Build up the url $es_url = "http://${host}:${port}/_template/${name}" # Can't do a replace and delete at the same time if ($ensure == 'present') { # Fail when no file or content is supplied if $file == undef and $content == undef { fail('The variables "file" and "content" cannot be empty when inserting or updating a template.') } elsif $file != undef and $content != undef { fail('The variables "file" and "content" cannot be used together when inserting or updating a template.') } else { # we are good to go. notify to insert in case we deleted $insert_notify = Exec[ "insert_template_${name}" ] } } else { $insert_notify = undef } # Delete the existing template # First check if it exists of course exec { "delete_template_${name}": command => "curl -s -XDELETE ${es_url}", onlyif => "test $(curl -s '${es_url}?pretty=true' | wc -l) -gt 1", notify => $insert_notify, refreshonly => true, } if ($ensure == 'absent') { # delete the template file on disk and then on the server file { "${elasticsearch::configdir}/templates_import/elasticsearch-template-${name}.json": ensure => 'absent', notify => Exec[ "delete_template_${name}" ], require => Exec[ 'mkdir_templates_elasticsearch' ], } } if ($ensure == 'present') { if $content == undef { # place the template file using the file source file { "${elasticsearch::configdir}/templates_import/elasticsearch-template-${name}.json": ensure => file, source => $file, notify => Exec[ "delete_template_${name}" ], require => Exec[ 'mkdir_templates_elasticsearch' ], } } else { # place the template file using content file { "${elasticsearch::configdir}/templates_import/elasticsearch-template-${name}.json": ensure => file, content => $content, notify => Exec[ "delete_template_${name}" ], require => Exec[ 'mkdir_templates_elasticsearch' ], } } exec { "insert_template_${name}": command => "curl -sL -w \"%{http_code}\\n\" -XPUT ${es_url} -d @${elasticsearch::configdir}/templates_import/elasticsearch-template-${name}.json -o /dev/null | egrep \"(200|201)\" > /dev/null", unless => "test $(curl -s '${es_url}?pretty=true' | wc -l) -gt 1", refreshonly => true, loglevel => 'debug', } } }