-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheck-minio-update.rb
More file actions
executable file
·95 lines (77 loc) · 2.26 KB
/
Copy pathcheck-minio-update.rb
File metadata and controls
executable file
·95 lines (77 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env ruby
# frozen_string_literal: true
#
# Check for minio updates
#
#
# OUTPUT:
# plain text
#
#
# USAGE:
# Check if minio updates are available for the local minio instance
# ./check-minio-update.rb
require 'sensu-plugin/check/cli'
require 'sensu-plugin/utils'
require 'net/http'
require 'open3'
class CheckMinioUpdate < Sensu::Plugin::Check::CLI
include Sensu::Plugin::Utils
RELEASE_PATTERN = /(?<release>RELEASE.\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}Z)/.freeze # rubocop:disable Layout/LineLength
option :checkurl,
description: 'Base URL to check for updates',
short: '-u URL',
long: '--url URL',
default: 'https://dl.min.io/server/minio/release'
option :platform,
description: 'os platform',
short: '-p PLATFORM',
long: '--platform PLATFORM',
default: 'linux-amd64'
option :timeout,
description: 'Request timeout in seconds',
long: '--timeout TIMEOUT',
default: 30
def run
Timeout.timeout(config[:timeout].to_i) do
if local_version == latest_version
ok 'No new minio version available'
else
critical "New minio version available #{latest_version}"
end
end
rescue IOError => e
unknown e.message.to_s
rescue Timeout::Error
unknown 'Connection timed out'
end
private
def latest_version
@latest_version ||= begin
uri = URI.parse("#{config[:checkurl]}/#{config[:platform]}/minio.shasum")
response = Net::HTTP.get_response(uri)
unless response.is_a?(Net::HTTPSuccess)
raise IOError, "Unable to gather latest minio version: #{response.body}"
end
extract_release(response.body)
end
end
def local_version
@local_version ||= begin
stdout, stderr, status = Open3.capture3(
{ 'PATH' => ENV['PATH'] }, 'minio --version', unsetenv_others: true
)
unless status.success?
raise IOError, "Unable to gather local minio version: #{stderr}"
end
extract_release(stdout)
end
end
def extract_release(release_source_str)
match_data = RELEASE_PATTERN.match(release_source_str)
if match_data.nil?
raise IOError, "Unable to extract release: #{release_source_str}"
end
match_data[:release]
end
end