Skip to content

Instantly share code, notes, and snippets.

@djberg96
Created September 13, 2017 04:59
Show Gist options
  • Save djberg96/f44d2cb7b930c2898ce7a8466bd54956 to your computer and use it in GitHub Desktop.
Save djberg96/f44d2cb7b930c2898ce7a8466bd54956 to your computer and use it in GitHub Desktop.
require 'excon'
require 'json'
require 'awesome_print'
require 'addressable'
cred = JSON.parse(IO.read(File.join(Dir.home, '.azurerc')))['dev']
client_id = cred['client_id']
client_key = cred['client_key']
tenant_id = cred['tenant_id']
subscription_id = cred['subscription_id']
site_url = 'https://login.microsoftonline.com'
token_url = tenant_id + "/oauth2/token"
auth_url = File.join(site_url, tenant_id, 'oauth2', 'token')
resource_url = 'https://management.azure.com/'
### GET THE TOKEN
client = Excon.new(auth_url, :debug_request => true, :debug_response => true)
body = {
:grant_type => 'client_credentials',
:client_id => client_id,
:client_secret => client_key,
:resource => resource_url
}
response = client.post(:body => Addressable::URI.form_encode(body))
token = JSON.parse(response.body)['access_token']
### CREATE A PERSISTENT CONNECTION
connection = Excon.new(
resource_url,
:persistent => true,
:headers => {'Authorization' => "Bearer #{token}"},
#:write_timeout => 360
)
### MAKE REQUESTS
location = "eastus2"
path = "/subscriptions/#{subscription_id}/providers/Microsoft.Compute/locations/#{location}/publishers"
query = {'api-version' => '2017-03-30'}
response = connection.get(:path => path, :query => query)
#publishers = JSON.parse(response.body)[0..4]
publishers = JSON.parse(response.body)[0..99]
path_requests = []
publishers.each do |publisher|
offer_path = File.join(publisher['id'], 'artifacttypes/vmimage/offers')
path_requests << {:method => :get, :path => offer_path, :query => query}
publisher['offers'] = []
end
responses = connection.requests(path_requests)
offers = []
responses.each do |response|
offers.concat(JSON.parse(response.body))
end
sku_requests = []
offers.each do |offer|
sku_path = File.join(offer['id'], 'skus')
sku_requests << {:method => :get, :path => sku_path, :query => query}
publisher = publishers.find{ |pub| offer['id'].include?(pub['id']) }
publisher['offers'] << offer
offer['skus'] = []
end
responses = connection.requests(sku_requests)
skus = []
responses.each do |response|
skus.concat(JSON.parse(response.body))
end
version_requests = []
skus.each do |sku|
version_path = File.join(sku['id'], 'versions')
version_requests << {:method => :get, :path => version_path, :query => query}
offer = offers.find{ |o| sku['id'].include?(o['id']) }
offer['skus'] << sku
sku['versions'] = []
end
responses = connection.requests(version_requests)
versions = []
responses.each do |response|
versions.concat(JSON.parse(response.body))
end
versions.each do |version|
sku = skus.find{ |s| version['id'].include?(s['id']) }
sku['versions'] << version
end
### PRINT OUT URNS FOR A10NETWORKS
a10 = publishers.find{ |pub| pub['name'] == 'a10networks' }
urns = []
a10['offers'].each do |offer|
offer['skus'].each do |sku|
sku['versions'].each do |version|
urns << a10['name'] + ':' + offer['name'] + ':' + sku['name'] + ':' + version['name']
end
end
end
ap urns
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment