From ee1fe5cf6b037171e78d21f6502b19272a156360 Mon Sep 17 00:00:00 2001 From: Nan Liu Date: Mon, 16 Mar 2015 17:41:00 -0600 Subject: [PATCH] Use archive to fetch/checksum instead of wget. Change-Id: Iab11edf7fa8030864bf52253a991db3d85c0a02e Depends-On: I002951a492ef25d86b3bfd5df01429edd3da08fd --- lib/puppet/parser/functions/es_checksum.rb | 22 +++++ manifests/init.pp | 95 +++++++++------------- tests/init.pp | 1 + 3 files changed, 61 insertions(+), 57 deletions(-) create mode 100644 lib/puppet/parser/functions/es_checksum.rb create mode 100644 tests/init.pp diff --git a/lib/puppet/parser/functions/es_checksum.rb b/lib/puppet/parser/functions/es_checksum.rb new file mode 100644 index 0000000..821fe63 --- /dev/null +++ b/lib/puppet/parser/functions/es_checksum.rb @@ -0,0 +1,22 @@ +module Puppet::Parser::Functions + newfunction(:es_checksum, :type => :rvalue, :doc => <<-EOS +This function returns the checksum from elastic search checksum file. +*Examples:* + es_checksum('https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.5.deb.sha1.txt') +Would return: "b51e4dc55490bc03e54d7f8f2d41affc54773206" + EOS + ) do |arguments| + + raise(Puppet::ParseError, "es_checksum(): Wrong number of arguments " + + "given (#{arguments.size} for 1)") if arguments.size != 1 + + begin + require 'open-uri' + result = open(arguments[0]).read + result.split.first + rescue Exception => e + Puppet.debug("Unable to obtain elastic search checksum: #{e.message}") + nil + end + end +end diff --git a/manifests/init.pp b/manifests/init.pp index 3155acb..bf50910 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -16,76 +16,60 @@ # class elasticsearch ( $version = '0.20.5', + $checksum = undef, + $url = 'https://download.elasticsearch.org/elasticsearch/elasticsearch', $heap_size = '16g', - $es_template_config = {} + $es_template_config = {}, ) { - # install java runtime - if ! defined(Package['openjdk-7-jre-headless']) { - package { 'openjdk-7-jre-headless': - ensure => present, - } - } - + # Ensure: java runtime and curl # Curl is handy for talking to the ES API on localhost. Allows for # querying cluster state and deleting indexes and so on. - if ! defined(Package['curl']) { - package { 'curl': - ensure => present, - } + ensure_packages(['openjdk-7-jre-headless', 'curl']) + + include '::archive' + + $package_name = "elasticsearch-${version}.deb" + $source_url = "${url}/${package_name}" + $source_checksum = "${source_url}.sha1.txt" + + if $checksum { + $es_checksum = $checksum + } else { + $es_checksum = es_checksum($source_checksum) } - exec { 'get_elasticsearch_deb': - command => "wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-${version}.deb -O /tmp/elasticsearch-${version}.deb", - path => '/bin:/usr/bin', - creates => "/tmp/elasticsearch-${version}.deb", + if $es_checksum { + $checksum_type = 'sha1' + } else { + $checksum_type = 'none' } - exec { 'gen_elasticsearch_deb_sha1': - command => "sha1sum elasticsearch-${version}.deb > /tmp/elasticsearch-${version}.deb.sha1.gen", - path => '/bin:/usr/bin', - cwd => '/tmp', - creates => "/tmp/elasticsearch-${version}.deb.sha1.gen", - require => [ - Exec['get_elasticsearch_deb'], - ] - } - - exec { 'get_elasticsearch_deb_sha1': - command => "wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-${version}.deb.sha1.txt -O /tmp/elasticsearch-${version}.deb.sha1.txt", - path => '/bin:/usr/bin', - creates => "/tmp/elasticsearch-${version}.deb.sha1.txt", - } - - exec { 'check_elasticsearch_sha1': - command => "diff /tmp/elasticsearch-${version}.deb.sha1.txt /tmp/elasticsearch-${version}.deb.sha1.gen", - path => '/bin:/usr/bin', - subscribe => Exec['get_elasticsearch_deb'], - refreshonly => true, - require => [ - Exec['gen_elasticsearch_deb_sha1'], - Exec['get_elasticsearch_deb_sha1'], - ] + archive { "/tmp/elasticsearch-${version}.deb": + source => $source_url, + extract => false, + checksum => $es_checksum, + checksum_type => $checksum_type, } # install elastic search package { 'elasticsearch': - ensure => latest, - source => "/tmp/elasticsearch-${version}.deb", - provider => 'dpkg', - subscribe => Exec['get_elasticsearch_deb_sha1'], - require => [ + ensure => latest, + source => "/tmp/elasticsearch-${version}.deb", + provider => 'dpkg', + require => [ Package['openjdk-7-jre-headless'], File['/etc/elasticsearch/elasticsearch.yml'], File['/etc/elasticsearch/default-mapping.json'], File['/etc/default/elasticsearch'], + Archive["/tmp/elasticsearch-${version}.deb"], ] } file { '/etc/elasticsearch': - ensure => directory, - owner => 'root', - group => 'root', - mode => '0755', + ensure => directory, + owner => 'root', + group => 'root', + mode => '0755', } file { '/etc/elasticsearch/elasticsearch.yml': @@ -95,15 +79,13 @@ class elasticsearch ( owner => 'root', group => 'root', mode => '0644', - require => File['/etc/elasticsearch'], } file { '/etc/elasticsearch/templates': - ensure => directory, - owner => 'root', - group => 'root', - mode => '0755', - require => File['/etc/elasticsearch'], + ensure => directory, + owner => 'root', + group => 'root', + mode => '0755', } file { '/etc/elasticsearch/default-mapping.json': @@ -113,7 +95,6 @@ class elasticsearch ( owner => 'root', group => 'root', mode => '0644', - require => File['/etc/elasticsearch'], } file { '/etc/default/elasticsearch': diff --git a/tests/init.pp b/tests/init.pp new file mode 100644 index 0000000..bb9663f --- /dev/null +++ b/tests/init.pp @@ -0,0 +1 @@ +include '::elasticsearch'