Skip to content

Instantly share code, notes, and snippets.

@cruftyoldsysadmin
Created March 1, 2017 12:23
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save cruftyoldsysadmin/46424190178239e023b2207ecfd574fd to your computer and use it in GitHub Desktop.
Ruby script to query Stackdriver for all instances currently set to Maintenance mode.
#!/usr/bin/env ruby
#
require 'net/http'
require 'json'
apiKey ='APIKEYHERE'
params = { :apikey => apiKey }
instances = {}
counter = 0
Net::HTTP.start('api.stackdriver.com', 443, :use_ssl => true) do |http|
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.keep_alive_timeout = 10
uri = URI.parse('https://api.stackdriver.com/v0.2/instances')
uri.query = URI.encode_www_form(params)
#JSON(http.request(Net::HTTP::Get.new(uri.request_uri)).body)['data'].each do |instance|
JSON(http.request_get(uri.request_uri).body)['data'].each do |instance|
instanceId = instance['id']
maintUri = URI.parse("https://api.stackdriver.com/v0.2/instances/#{instanceId}/maintenance")
maintUri.query = URI.encode_www_form(params)
maintStatus=JSON(http.request_get(maintUri.request_uri).body)['data']
if maintStatus['maintenance']
if maintStatus['reason']
instances["#{instance['name']}"] = { 'maintenance' => maintStatus['maintenance'], 'reason' => maintStatus['reason'] }
else
instances["#{instance['name']}"] = { 'maintenance' => maintStatus['maintenance'] }
end
end
end
end
instances.keys.sort.each do |instance|
if instances[instance]['reason']
puts "#{instance} is in maintenance mode because: #{instances[instance]['reason']}"
else
puts "#{instance} is in maintenance mode for no good reason"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment