Skip to content

Instantly share code, notes, and snippets.

@trlinkin
Last active October 15, 2015 15:32
Show Gist options
  • Select an option

  • Save trlinkin/0be7d1ecf1dfab77b09f to your computer and use it in GitHub Desktop.

Select an option

Save trlinkin/0be7d1ecf1dfab77b09f to your computer and use it in GitHub Desktop.
require 'json'
require 'net/http'
require 'uri'
require 'openssl'
environment_path = ARGV[0] || Dir.pwd
new_only = ARGV[1] || false
def forge_request(forge_name)
# Call the Forge API (even if we didn't get a clean forge_name, whatever)
module_url = URI.parse("https://forgeapi.puppetlabs.com/v3/modules/#{forge_name}")
http = Net::HTTP.new(module_url.host, module_url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = http.get(module_url.request_uri,{'Accept' => 'application/json'})
if request.code == '200'
JSON.parse(request.body)
else
false
end
end
def print_info(module_name,metadata=nil,forge_version=nil)
puts "Results for Module: #{module_name}"
puts "---------------------------------"
if metadata
puts "Forge Name: #{metadata['name']}"
puts "Author: #{metadata['author']}"
puts "Current version: #{metadata['version']}"
else
puts "No Module Metadata Found"
end
if forge_version
puts "FORGE DATA FOUND"
puts "Forge Version Available: #{forge_version}"
puts "\nNEW FORGE VERSION AVAILABLE!" if metadata['version'] != forge_version
end
puts "---------------------------------\n\n"
end
modules = Dir.entries(environment_path)
# Remove '.' and '..' from the list of known module
modules = modules.drop(2)
modules.each do |mod|
if File.exist?("#{mod}/metadata.json")
metadata = JSON.parse(File.read("#{mod}/metadata.json")) rescue {}
forge_name = metadata['name'].gsub(/\//,'-') if metadata['name']
forge_data = forge_request(forge_name) if forge_name
forge_version = forge_data['current_release']['version'] if forge_data
if !new_only
print_info(mod,metadata,forge_version)
elsif forge_data and metadata['version'] != forge_version
print_info(mod,metadata,forge_version)
end
else
print_info(mod) unless new_only
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment