From f4e44700bde6f53edfa5998c81d86a356cec2715 Mon Sep 17 00:00:00 2001 From: liamjbennett <lbennett@opentable.com> Date: Wed, 21 Oct 2015 15:24:09 +0100 Subject: [PATCH 1/2] Adding windows support. This should allow the user to be able to install the sensu client on windows platforms. --- lib/puppet/provider/package/sensu_gem.rb | 7 +- lib/puppet/provider/sensu_api_config/json.rb | 2 +- .../provider/sensu_client_config/json.rb | 2 +- .../provider/sensu_rabbitmq_config/json.rb | 2 +- .../provider/sensu_redis_config/json.rb | 2 +- manifests/api/config.pp | 21 ++-- manifests/api/service.pp | 12 ++- manifests/check.pp | 28 +++++- manifests/client/config.pp | 9 +- manifests/client/service.pp | 22 +++++ manifests/init.pp | 20 ++++ manifests/package.pp | 98 ++++++++++++------- manifests/rabbitmq/config.pp | 56 ++++++----- manifests/redis/config.pp | 9 +- manifests/server/service.pp | 12 ++- templates/sensu-client.erb | 8 ++ 16 files changed, 211 insertions(+), 99 deletions(-) create mode 100644 templates/sensu-client.erb diff --git a/lib/puppet/provider/package/sensu_gem.rb b/lib/puppet/provider/package/sensu_gem.rb index 51e1439295..876da847ba 100644 --- a/lib/puppet/provider/package/sensu_gem.rb +++ b/lib/puppet/provider/package/sensu_gem.rb @@ -11,7 +11,12 @@ has_feature :versionable, :install_options - commands :gemcmd => "/opt/sensu/embedded/bin/gem" + commands :gemcmd => + if File.exists?("#{ENV['SYSTEMDRIVE']}\\opt\\sensu\\embedded\\bin\\gem.bat") + "#{ENV['SYSTEMDRIVE']}\\opt\\sensu\\embedded\\bin\\gem.bat" + else + "/opt/sensu/embedded/bin/gem" + end def uninstall command = [command(:gemcmd), "uninstall"] diff --git a/lib/puppet/provider/sensu_api_config/json.rb b/lib/puppet/provider/sensu_api_config/json.rb index f04f9de65c..c280f20107 100644 --- a/lib/puppet/provider/sensu_api_config/json.rb +++ b/lib/puppet/provider/sensu_api_config/json.rb @@ -71,7 +71,7 @@ def port end def config_file - "#{resource[:base_path]}/api.json" + File.join(resource[:base_path], 'api.json').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) end # Public: Set the port that the API should listen on. diff --git a/lib/puppet/provider/sensu_client_config/json.rb b/lib/puppet/provider/sensu_client_config/json.rb index 467be4017f..d2605dd413 100644 --- a/lib/puppet/provider/sensu_client_config/json.rb +++ b/lib/puppet/provider/sensu_client_config/json.rb @@ -25,7 +25,7 @@ def flush end def config_file - "#{resource[:base_path]}/client.json" + File.join(resource[:base_path], 'client.json').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) end def pre_create diff --git a/lib/puppet/provider/sensu_rabbitmq_config/json.rb b/lib/puppet/provider/sensu_rabbitmq_config/json.rb index 96e3a8903b..7939e10c5a 100644 --- a/lib/puppet/provider/sensu_rabbitmq_config/json.rb +++ b/lib/puppet/provider/sensu_rabbitmq_config/json.rb @@ -94,7 +94,7 @@ def ssl_cert_chain=(value) end def config_file - "#{resource[:base_path]}/rabbitmq.json" + File.join(resource[:base_path],'rabbitmq.json').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) end def port diff --git a/lib/puppet/provider/sensu_redis_config/json.rb b/lib/puppet/provider/sensu_redis_config/json.rb index 5901c60e98..ab09f64bfb 100644 --- a/lib/puppet/provider/sensu_redis_config/json.rb +++ b/lib/puppet/provider/sensu_redis_config/json.rb @@ -26,7 +26,7 @@ def pre_create end def config_file - "#{resource[:base_path]}/redis.json" + File.join(resource[:base_path], 'redis.json').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) end def destroy diff --git a/manifests/api/config.pp b/manifests/api/config.pp index d9d7cc52bc..80dc4adea6 100644 --- a/manifests/api/config.pp +++ b/manifests/api/config.pp @@ -14,20 +14,21 @@ $ensure = 'present' } - file { '/etc/sensu/conf.d/api.json': + file { "${sensu::etc_dir}/conf.d/api.json": ensure => $ensure, - owner => 'sensu', - group => 'sensu', - mode => '0440', + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, } sensu_api_config { $::fqdn: - ensure => $ensure, - bind => $sensu::api_bind, - host => $sensu::api_host, - port => $sensu::api_port, - user => $sensu::api_user, - password => $sensu::api_password, + ensure => $ensure, + base_path => "${sensu::etc_dir}/conf.d", + bind => $sensu::api_bind, + host => $sensu::api_host, + port => $sensu::api_port, + user => $sensu::api_user, + password => $sensu::api_password, } } diff --git a/manifests/api/service.pp b/manifests/api/service.pp index 687a9a443a..780c93d58f 100644 --- a/manifests/api/service.pp +++ b/manifests/api/service.pp @@ -31,11 +31,13 @@ } } - service { 'sensu-api': - ensure => $ensure, - enable => $enable, - hasrestart => $hasrestart, - subscribe => [ Class['sensu::package'], Class['sensu::api::config'], Class['sensu::redis::config'] ], + if $::osfamily != 'windows' { + service { 'sensu-api': + ensure => $ensure, + enable => $enable, + hasrestart => $hasrestart, + subscribe => [ Class['sensu::package'], Class['sensu::api::config'], Class['sensu::redis::config'] ], + } } } } diff --git a/manifests/check.pp b/manifests/check.pp index e3e3f509d4..bbff46ec0c 100644 --- a/manifests/check.pp +++ b/manifests/check.pp @@ -129,16 +129,34 @@ $check_name = regsubst(regsubst($name, ' ', '_', 'G'), '[\(\)]', '', 'G') - file { "/etc/sensu/conf.d/checks/${check_name}.json": + case $::osfamily { + 'windows': { + $etc_dir = 'C:/opt/sensu' + $conf_dir = "${etc_dir}/conf.d" + $user = undef + $group = undef + $file_mode = undef + } + default: { + $etc_dir = '/etc/sensu' + $conf_dir = "${etc_dir}/conf.d" + $user = 'sensu' + $group = 'sensu' + $file_mode = '0440' + } + } + + file { "${conf_dir}/checks/${check_name}.json": ensure => $ensure, - owner => 'sensu', - group => 'sensu', - mode => '0440', + owner => $user, + group => $group, + mode => $file_mode, before => Sensu_check[$check_name], } sensu_check { $check_name: ensure => $ensure, + base_path => "${conf_dir}/checks", type => $type, standalone => $standalone, command => $command, @@ -157,7 +175,7 @@ dependencies => $dependencies, custom => $custom, subdue => $subdue, - require => File['/etc/sensu/conf.d/checks'], + require => File["${conf_dir}/checks"], notify => $::sensu::check_notify, ttl => $ttl, } diff --git a/manifests/client/config.pp b/manifests/client/config.pp index b3dfa2d9e3..223ce08f91 100644 --- a/manifests/client/config.pp +++ b/manifests/client/config.pp @@ -14,15 +14,16 @@ $ensure = 'present' } - file { '/etc/sensu/conf.d/client.json': + file { "${sensu::conf_dir}/client.json": ensure => $ensure, - owner => 'sensu', - group => 'sensu', - mode => '0440', + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, } sensu_client_config { $::fqdn: ensure => $ensure, + base_path => $sensu::conf_dir, client_name => $sensu::client_name, address => $sensu::client_address, socket => { diff --git a/manifests/client/service.pp b/manifests/client/service.pp index f8bfb43aae..3130c76162 100644 --- a/manifests/client/service.pp +++ b/manifests/client/service.pp @@ -31,6 +31,28 @@ } } + if $::osfamily == 'windows' { + + file { 'C:/opt/sensu/bin/sensu-client.xml': + ensure => present, + content => template("${module_name}/sensu-client.erb"), + } + + $startup_type = $::os_maj_version ? { + '2003' => 'Automatic', + default => 'Delayed-Auto', + } + + exec { 'install-sensu-client': + command => "powershell.exe -ExecutionPolicy RemoteSigned -Command \"New-Service -Name sensu-client -BinaryPathName c:\\opt\\sensu\\bin\\sensu-client.exe -DisplayName 'Sensu Client' -StartupType ${startup_type}\"", + unless => 'powershell.exe -ExecutionPolicy RemoteSigned -Command "Get-Service sensu-client"', + path => $::path, + before => Service['sensu-client'], + require => File['C:/opt/sensu/bin/sensu-client.xml'], + } + + } + service { 'sensu-client': ensure => $ensure, enable => $enable, diff --git a/manifests/init.pp b/manifests/init.pp index 774b656515..fbe37dd725 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -439,6 +439,26 @@ create_resources('::sensu::handler', $handlers) create_resources('::sensu::check', $checks) + case $::osfamily { + 'Debian','RedHat': { + $etc_dir = '/etc/sensu' + $conf_dir = "${etc_dir}/conf.d" + $user = 'sensu' + $group = 'sensu' + $dir_mode = '0555' + $file_mode = '0440' + } + + 'windows': { + $etc_dir = 'C:/opt/sensu' + $conf_dir = "${etc_dir}/conf.d" + $user = undef + $group = undef + $dir_mode = undef + $file_mode = undef + } + } + # Include everything and let each module determine its state. This allows # transitioning to purged config and stopping/disabling services anchor { 'sensu::begin': } -> diff --git a/manifests/package.pp b/manifests/package.pp index 16436b96f0..fea5656890 100644 --- a/manifests/package.pp +++ b/manifests/package.pp @@ -11,6 +11,10 @@ case $::osfamily { 'Debian': { + $pkg_title = 'sensu' + $pkg_name = 'sensu' + $pkg_source = undef + class { '::sensu::repo::apt': } if $sensu::install_repo { include ::apt @@ -22,17 +26,41 @@ } 'RedHat': { + $pkg_title = 'sensu' + $pkg_name = 'sensu' + $pkg_source = undef + class { '::sensu::repo::yum': } $pkg_require = undef } + 'windows': { + $repo_require = undef + + $pkg_version = inline_template("<%= scope.lookupvar('sensu::version').sub(/(.*)\\./, '\\1-') %>") + $pkg_title = 'sensu' + $pkg_name = 'Sensu' + $pkg_source = "C:\\Windows\\Temp\\sensu-${pkg_version}.msi" + $pkg_require = "Archive[${pkg_source}]" + + archive { $pkg_source: + ensure => present, + provider => faraday, + source => "http://repos.sensuapp.org/msi/sensu-${pkg_version}.msi", + creates => $pkg_source, + cleanup => false, + } + } + default: { fail("${::osfamily} not supported yet") } } - package { 'sensu': + package { $pkg_title: ensure => $sensu::version, + name => $pkg_name, + source => $pkg_source, require => $pkg_require, } @@ -58,73 +86,75 @@ } } - file { '/etc/default/sensu': - ensure => file, - content => template("${module_name}/sensu.erb"), - owner => '0', - group => '0', - mode => '0444', - require => Package['sensu'], + if $::osfamily != 'windows' { + file { '/etc/default/sensu': + ensure => file, + content => template("${module_name}/sensu.erb"), + owner => '0', + group => '0', + mode => '0444', + require => Package['sensu'], + } } - file { [ '/etc/sensu/conf.d', '/etc/sensu/conf.d/handlers', '/etc/sensu/conf.d/checks', '/etc/sensu/conf.d/filters', '/etc/sensu/conf.d/extensions', '/etc/sensu/conf.d/mutators' ]: + file { [ $sensu::conf_dir, "${sensu::conf_dir}/handlers", "${sensu::conf_dir}/checks", "${sensu::conf_dir}/filters", "${sensu::conf_dir}/extensions", "${sensu::conf_dir}/mutators" ]: ensure => directory, - owner => 'sensu', - group => 'sensu', - mode => '0555', + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::dir_mode, purge => $sensu::_purge_config, recurse => true, force => true, - require => Package['sensu'], + require => Package[$pkg_name], } if $sensu::manage_handlers_dir { - file { '/etc/sensu/handlers': + file { "${sensu::etc_dir}/handlers": ensure => directory, - mode => '0555', - owner => 'sensu', - group => 'sensu', + mode => $sensu::dir_mode, + owner => $sensu::user, + group => $sensu::group, purge => $sensu::_purge_handlers, recurse => true, force => true, - require => Package['sensu'], + require => Package[$pkg_name], } } - file { ['/etc/sensu/extensions', '/etc/sensu/extensions/handlers']: + file { ["${sensu::etc_dir}/extensions", "${sensu::etc_dir}/extensions/handlers"]: ensure => directory, - mode => '0555', - owner => 'sensu', - group => 'sensu', + mode => $sensu::dir_mode, + owner => $sensu::user, + group => $sensu::group, purge => $sensu::_purge_extensions, recurse => true, force => true, - require => Package['sensu'], + require => Package[$pkg_name], } if $sensu::manage_mutators_dir { - file { '/etc/sensu/mutators': + file { "${sensu::etc_dir}/mutators": ensure => directory, - mode => '0555', - owner => 'sensu', - group => 'sensu', + mode => $sensu::dir_mode, + owner => $sensu::user, + group => $sensu::group, purge => $sensu::_purge_mutators, recurse => true, force => true, - require => Package['sensu'], + require => Package[$pkg_name], } } if $sensu::_manage_plugins_dir { - file { '/etc/sensu/plugins': + file { "${sensu::etc_dir}/plugins": ensure => directory, - mode => '0555', - owner => 'sensu', - group => 'sensu', + mode => $sensu::dir_mode, + owner => $sensu::user, + group => $sensu::group, purge => $sensu::_purge_plugins, recurse => true, force => true, - require => Package['sensu'], + require => Package[$pkg_name], } } @@ -143,5 +173,5 @@ } } - file { '/etc/sensu/config.json': ensure => absent } + file { "${sensu::etc_dir}/config.json": ensure => absent } } diff --git a/manifests/rabbitmq/config.pp b/manifests/rabbitmq/config.pp index ac46c4855a..db137a44bf 100644 --- a/manifests/rabbitmq/config.pp +++ b/manifests/rabbitmq/config.pp @@ -14,11 +14,13 @@ $ensure = 'present' } + $ssl_dir = "${sensu::etc_dir}/ssl" + if $sensu::rabbitmq_ssl_cert_chain or $sensu::rabbitmq_ssl_private_key { - file { '/etc/sensu/ssl': + file { $ssl_dir: ensure => directory, - owner => 'sensu', - group => 'sensu', + owner => $sensu::user, + group => $sensu::group, mode => '0755', require => Package['sensu'], } @@ -26,13 +28,13 @@ # if provided a cert chain, and its a puppet:// URI, source file form the # the URI provided if $sensu::rabbitmq_ssl_cert_chain and $sensu::rabbitmq_ssl_cert_chain =~ /^puppet:\/\// { - file { '/etc/sensu/ssl/cert.pem': + file { "${ssl_dir}/cert.pem": ensure => file, source => $sensu::rabbitmq_ssl_cert_chain, - owner => 'sensu', - group => 'sensu', - mode => '0444', - require => File['/etc/sensu/ssl'], + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, + require => File[$ssl_dir], before => Sensu_rabbitmq_config[$::fqdn], } @@ -40,13 +42,13 @@ # else provided a cert chain, and the variable actually contains the cert, # create the file with conents of the variable } elsif $sensu::rabbitmq_ssl_cert_chain and $sensu::rabbitmq_ssl_cert_chain =~ /BEGIN CERTIFICATE/ { - file { '/etc/sensu/ssl/cert.pem': + file { "${ssl_dir}/cert.pem": ensure => file, content => $sensu::rabbitmq_ssl_cert_chain, - owner => 'sensu', - group => 'sensu', - mode => '0444', - require => File['/etc/sensu/ssl'], + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, + require => File[$ssl_dir], before => Sensu_rabbitmq_config[$::fqdn], } @@ -60,13 +62,13 @@ # if provided private key, and its a puppet:// URI, source file from the # URI provided if $sensu::rabbitmq_ssl_private_key and $sensu::rabbitmq_ssl_private_key =~ /^puppet:\/\// { - file { '/etc/sensu/ssl/key.pem': + file { "${ssl_dir}/key.pem": ensure => file, source => $sensu::rabbitmq_ssl_private_key, - owner => 'sensu', - group => 'sensu', - mode => '0440', - require => File['/etc/sensu/ssl'], + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, + require => File[$ssl_dir], before => Sensu_rabbitmq_config[$::fqdn], } @@ -74,13 +76,13 @@ # else provided private key, and the variable actually contains the key, # create file with contents of the variable } elsif $sensu::rabbitmq_ssl_private_key and $sensu::rabbitmq_ssl_private_key =~ /BEGIN RSA PRIVATE KEY/ { - file { '/etc/sensu/ssl/key.pem': + file { "${ssl_dir}/key.pem": ensure => file, content => $sensu::rabbitmq_ssl_private_key, - owner => 'sensu', - group => 'sensu', - mode => '0440', - require => File['/etc/sensu/ssl'], + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, + require => File[$ssl_dir], before => Sensu_rabbitmq_config[$::fqdn], } @@ -98,11 +100,11 @@ $enable_ssl = $sensu::rabbitmq_ssl } - file { '/etc/sensu/conf.d/rabbitmq.json': + file { "${sensu::conf_dir}/rabbitmq.json": ensure => $ensure, - owner => 'sensu', - group => 'sensu', - mode => '0440', + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, before => Sensu_rabbitmq_config[$::fqdn], } diff --git a/manifests/redis/config.pp b/manifests/redis/config.pp index bfc9dc7292..ab7c40614b 100644 --- a/manifests/redis/config.pp +++ b/manifests/redis/config.pp @@ -15,16 +15,17 @@ } # redis configuration may contain "secrets" - file { '/etc/sensu/conf.d/redis.json': + file { "${sensu::etc_dir}/conf.d/redis.json": ensure => $ensure, - owner => 'sensu', - group => 'sensu', - mode => '0440', + owner => $sensu::user, + group => $sensu::group, + mode => $sensu::file_mode, before => Sensu_redis_config[$::fqdn], } sensu_redis_config { $::fqdn: ensure => $ensure, + base_path => "${sensu::etc_dir}/conf.d", host => $sensu::redis_host, port => $sensu::redis_port, password => $sensu::redis_password, diff --git a/manifests/server/service.pp b/manifests/server/service.pp index 6dd5c3cbaa..9e6bfdcc93 100644 --- a/manifests/server/service.pp +++ b/manifests/server/service.pp @@ -31,11 +31,13 @@ } } - service { 'sensu-server': - ensure => $ensure, - enable => $enable, - hasrestart => $hasrestart, - subscribe => [ Class['sensu::package'], Class['sensu::api::config'], Class['sensu::redis::config'], Class['sensu::rabbitmq::config'] ], + if $::osfamily != 'windows' { + service { 'sensu-server': + ensure => $ensure, + enable => $enable, + hasrestart => $hasrestart, + subscribe => [ Class['sensu::package'], Class['sensu::api::config'], Class['sensu::redis::config'], Class['sensu::rabbitmq::config'] ], + } } } } diff --git a/templates/sensu-client.erb b/templates/sensu-client.erb new file mode 100644 index 0000000000..09d2a89201 --- /dev/null +++ b/templates/sensu-client.erb @@ -0,0 +1,8 @@ +<!-- Windows service definition for Sensu --> +<service> + <id>sensu-client</id> + <name>Sensu Client</name> + <description>This service runs a Sensu Client</description> + <executable>C:\opt\sensu\embedded\bin\ruby</executable> + <arguments>C:\opt\sensu\embedded\bin\sensu-client -l C:\opt\sensu\sensu-client.log -d C:\opt\sensu\conf.d</arguments> +</service> From 1f6997d654780bfb24f6a29deae0711422c86e67 Mon Sep 17 00:00:00 2001 From: liamjbennett <lbennett@opentable.com> Date: Fri, 20 Nov 2015 15:29:59 +0000 Subject: [PATCH 2/2] Refactoring to use remote_file rather the wget for url downloads. We want to use remote_file because wget support on windows isn't great and remote_file is ruby so supports multiple platforms better. --- .fixtures.yml | 3 +-- README.md | 3 +-- manifests/client/service.pp | 7 +----- manifests/package.pp | 10 ++++---- manifests/plugin.pp | 14 +++++++----- metadata.json | 2 +- spec/defines/sensu_plugin_spec.rb | 38 ++++++++++--------------------- 7 files changed, 28 insertions(+), 49 deletions(-) diff --git a/.fixtures.yml b/.fixtures.yml index c6f6b24266..bc7e0eb15f 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -2,7 +2,6 @@ fixtures: repositories: apt: git://github.com/puppetlabs/puppetlabs-apt.git stdlib: git://github.com/puppetlabs/puppetlabs-stdlib.git - wget: git://github.com/maestrodev/puppet-wget.git + remote_file: git://github.com/lwf/puppet-remote_file.git symlinks: sensu: "#{source_dir}" - diff --git a/README.md b/README.md index e6837108d8..6378e843c3 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Sensu-Puppet module. - puppetlabs/apt - puppetlabs/stdlib -- maestrodev/wget +- lwf/puppet-remote_file See `metadata.json` for details. @@ -446,4 +446,3 @@ The following puppet modules exist for managing dashboards ## License See LICENSE file. - diff --git a/manifests/client/service.pp b/manifests/client/service.pp index 3130c76162..22c909aad4 100644 --- a/manifests/client/service.pp +++ b/manifests/client/service.pp @@ -38,13 +38,8 @@ content => template("${module_name}/sensu-client.erb"), } - $startup_type = $::os_maj_version ? { - '2003' => 'Automatic', - default => 'Delayed-Auto', - } - exec { 'install-sensu-client': - command => "powershell.exe -ExecutionPolicy RemoteSigned -Command \"New-Service -Name sensu-client -BinaryPathName c:\\opt\\sensu\\bin\\sensu-client.exe -DisplayName 'Sensu Client' -StartupType ${startup_type}\"", + command => "powershell.exe -ExecutionPolicy RemoteSigned -Command \"New-Service -Name sensu-client -BinaryPathName c:\\opt\\sensu\\bin\\sensu-client.exe -DisplayName 'Sensu Client' -StartupType Automatic\"", unless => 'powershell.exe -ExecutionPolicy RemoteSigned -Command "Get-Service sensu-client"', path => $::path, before => Service['sensu-client'], diff --git a/manifests/package.pp b/manifests/package.pp index fea5656890..1ab8037ef6 100644 --- a/manifests/package.pp +++ b/manifests/package.pp @@ -42,14 +42,12 @@ $pkg_title = 'sensu' $pkg_name = 'Sensu' $pkg_source = "C:\\Windows\\Temp\\sensu-${pkg_version}.msi" - $pkg_require = "Archive[${pkg_source}]" + $pkg_require = "Remote_file[${pkg_source}]" - archive { $pkg_source: + remote_file { $pkg_source: ensure => present, - provider => faraday, - source => "http://repos.sensuapp.org/msi/sensu-${pkg_version}.msi", - creates => $pkg_source, - cleanup => false, + source => "http://repositories.sensuapp.org/msi/sensu-${pkg_version}.msi", + checksum => $::sensu::package_checksum, } } diff --git a/manifests/plugin.pp b/manifests/plugin.pp index cea4a4d083..5b7d793d94 100644 --- a/manifests/plugin.pp +++ b/manifests/plugin.pp @@ -50,6 +50,7 @@ $force = true, $pkg_version = 'latest', $pkg_provider = $::sensu::sensu_plugin_provider, + $pkg_checksum = undef, $nocheckcertificate = false, ){ @@ -93,12 +94,13 @@ force => $force, } - wget::fetch { $name: - destination => "${install_path}/${filename}", - timeout => 0, - verbose => false, - nocheckcertificate => $nocheckcertificate, - require => File[$install_path], + validate_string($pkg_checksum) + + remote_file { $name: + ensure => present, + path => "${install_path}/${filename}", + checksum => $pkg_checksum, + require => File[$install_path], } -> file { "${install_path}/${filename}": ensure => file, diff --git a/metadata.json b/metadata.json index ef3507fc20..d0d390ef48 100644 --- a/metadata.json +++ b/metadata.json @@ -18,7 +18,7 @@ { "name": "pe", "version_requirement": ">=3.7.0 < 2015.3.0" } ], "dependencies": [ - { "name": "maestrodev/wget", "version_requirement": ">= 1.4.5 <2.0.0" }, + { "name": "lwf/remote_file", "version_requirement": ">= 1.0.0 <2.0.0" }, { "name": "puppetlabs/apt", "version_requirement": ">= 2.0.0 <3.0.0" }, { "name": "puppetlabs/stdlib", "version_requirement": ">=3.2.0 <5.0.0" } ] diff --git a/spec/defines/sensu_plugin_spec.rb b/spec/defines/sensu_plugin_spec.rb index b7491b1a19..10c80f65fb 100644 --- a/spec/defines/sensu_plugin_spec.rb +++ b/spec/defines/sensu_plugin_spec.rb @@ -31,14 +31,14 @@ context 'defaults' do let(:params) { { - :type => 'url', + :type => 'url', + :pkg_checksum => '1d58b78e9785f893889458f8e9fe8627' } } - it { should contain_wget__fetch('https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/system/check-mem.sh').with( - :destination => '/etc/sensu/plugins/check-mem.sh', - :verbose => false, - :timeout => 0, - :nocheckcertificate => false + it { should contain_remote_file('https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/system/check-mem.sh').with( + :ensure => 'present', + :path => '/etc/sensu/plugins/check-mem.sh', + :checksum => '1d58b78e9785f893889458f8e9fe8627' ) } end @@ -46,28 +46,14 @@ context 'setting params' do let(:params) { { :type => 'url', - :install_path => '/var/sensu/plugins' - } } - - it { should contain_wget__fetch('https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/system/check-mem.sh').with( - 'destination' => '/var/sensu/plugins/check-mem.sh', - 'verbose' => 'false', - 'timeout' => '0' - ) } - - end - - context 'nocheckcertificate' do - let(:params) { { - :type => 'url', - :nocheckcertificate => true, + :install_path => '/var/sensu/plugins', + :pkg_checksum => '1d58b78e9785f893889458f8e9fe8627' } } - it { should contain_wget__fetch('https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/system/check-mem.sh').with( - 'destination' => '/etc/sensu/plugins/check-mem.sh', - 'verbose' => 'false', - 'timeout' => '0', - 'nocheckcertificate' => 'true' + it { should contain_remote_file('https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/system/check-mem.sh').with( + :ensure => 'present', + :path => '/var/sensu/plugins/check-mem.sh', + :checksum => '1d58b78e9785f893889458f8e9fe8627' ) } end