class VagrantPlugins::DigitalOcean::Commands::List
Public Class Methods
synopsis()
click to toggle source
# File lib/vagrant-digitalocean/commands/list.rb, line 8 def self.synopsis "list available images and regions from DigitalOcean" end
Public Instance Methods
execute()
click to toggle source
# File lib/vagrant-digitalocean/commands/list.rb, line 12 def execute @token = nil @opts = OptionParser.new do |o| o.banner = 'Usage: vagrant digitalocean-list [options] <images|regions|sizes> <token>' o.on("-r", "--[no-]regions", "show the regions when listing images") do |r| @regions = r end end argv = parse_options(@opts) @token = argv[1] if @token.nil? usage return 1 end case argv[0] when "images" result = query('/v2/images') images = Array(result["images"]) if @regions images_table = images.map do |image| '%-50s %-20s %-20s %-50s' % ["#{image['distribution']} #{image['name']}", image['slug'], image['id'], image['regions'].join(', ')] end @env.ui.info I18n.t('vagrant_digital_ocean.info.images_with_regions', images: images_table.sort.join("\r\n")) else images_table = images.map do |image| '%-50s %-30s %-30s' % ["#{image['distribution']} #{image['name']}", image['slug'], image['id']] end @env.ui.info I18n.t('vagrant_digital_ocean.info.images', images: images_table.sort.join("\r\n")) end when "regions" result = query('/v2/regions') regions = Array(result["regions"]) regions_table = regions.map { |region| '%-30s %-12s' % [region['name'], region['slug']] } @env.ui.info I18n.t('vagrant_digital_ocean.info.regions', regions: regions_table.sort.join("\r\n")) when "sizes" result = query('/v2/sizes') sizes = Array(result["sizes"]) sizes_table = sizes.map { |size| '%-15s %-15s %-12s' % ["#{size['memory']}MB", size['vcpus'], size['slug']] } @env.ui.info I18n.t('vagrant_digital_ocean.info.sizes', sizes: sizes_table.sort_by{|s| s['memory']}.join("\r\n")) else usage return 1 end 0 rescue Faraday::Error::ConnectionFailed, RuntimeError => e @env.ui.error I18n.t('vagrant_digital_ocean.info.list_error', message: e.message) 1 end
query(path)
click to toggle source
# File lib/vagrant-digitalocean/commands/list.rb, line 67 def query(path) connection = Faraday.new({ :url => "https://api.digitalocean.com/" }) result = connection.get(path, per_page: 100) do |req| req.headers['Authorization'] = "Bearer #{@token}" end case result.status when 200 then JSON.parse(result.body) when 401 then raise("unauthorized access — is the token correct?") else raise("call returned with status #{result.status}") end end
usage()
click to toggle source
# File lib/vagrant-digitalocean/commands/list.rb, line 83 def usage @env.ui.info(@opts) end