Advertisement
cyberkov

Untitled

Aug 5th, 2013
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.92 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. require 'rubygems'
  4. require 'json'
  5. require 'net/http'
  6. require 'uri'
  7. require 'pp'
  8.  
  9. def ask_db(path)
  10.         puppetdb = "http://localhost:8130"
  11.  
  12.         uri = URI.parse("#{puppetdb}/#{path}")
  13.         http = Net::HTTP.new(uri.host, uri.port)
  14.         request = Net::HTTP::Get.new(uri.request_uri)
  15.         request.initialize_http_header({"Accept" => "application/json"})
  16.         response = http.request(request)
  17.         return JSON.parse(response.body)
  18. end
  19.  
  20. @facts = {}
  21.  
  22. nodelist = ask_db("nodes")
  23.  
  24. nodelist.each do |node|
  25.  
  26.                 facts = ask_db("facts/#{node}")
  27.                 if not facts["error"].nil?
  28.                                 next
  29.                 end
  30.  
  31.                 begin
  32.                                 lvmfacts = facts["facts"].select {|k,v| k =~ /^disk_/ }
  33.                                 pv = facts["facts"].select {|k,v| k =~ /^lvm_.*_free/ }
  34.  
  35.                 rescue
  36.                                 pp facts
  37.                 end
  38.                 @facts[node] = {}
  39.                 lvmfacts.each do |k,v|
  40.                                 next unless v =~ /usr/
  41.                                 #lvm_lv4_vg
  42.                                 data = v.split(";")
  43.                                 # ["/usr", "ext4", "4032M", "1165M", "70%used"]
  44.                                 freespace = data[3].delete('M').to_i
  45.                                 if freespace <= 1500
  46.                                                 # disk_vg00-lv_usr
  47.                                                 vginfo = facts['facts'].select{|key,value| key =~ /lvm_vg_#{k.split('_')[1].split('-')[0]}_free/ }
  48.                                                 vgfree = vginfo[0][1].delete('M').to_f unless vginfo[0].nil?
  49.                                                 begin
  50.                                                                 resizeby = 3000 - freespace
  51.                                                                 resizeable = vgfree - resizeby >= 0
  52.                                                 rescue
  53.                                                                 resizeable = false
  54.                                                 end
  55.  
  56.                                                 puts "#{node} - #{k} (#{vgfree}M) - #{data.join(';')} - resize possible: #{resizeable} - resizeby: #{resizeby}"
  57.                                 end
  58.                                 #pp data
  59.  
  60.                 end
  61.  
  62. end
  63.  
  64. #@facts.each do |hostname,hostdata|
  65. #               hostdata.each do |diskname,disk|
  66. #                               next if disk["vg"] == "vg00" or disk["vg"] == "VolGroup00"
  67. ##                              next if disk["mount"].nil?
  68. #
  69. #                               #if disk["mount"] =~ /^\/$/
  70. #                                               puts "#{hostname} - '#{disk['mount']}' - #{disk['name']} - #{disk['vg']}"
  71. #                               #end
  72. #               end
  73. #end
  74.  
  75. #pp @facts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement