cloudstack-cli 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/cloudstack-cli/base.rb +11 -2
- data/lib/cloudstack-cli/commands/account.rb +19 -10
- data/lib/cloudstack-cli/commands/affinity_group.rb +18 -9
- data/lib/cloudstack-cli/commands/capacity.rb +1 -1
- data/lib/cloudstack-cli/commands/cluster.rb +18 -9
- data/lib/cloudstack-cli/commands/compute_offer.rb +14 -1
- data/lib/cloudstack-cli/commands/disk_offer.rb +23 -10
- data/lib/cloudstack-cli/commands/domain.rb +14 -5
- data/lib/cloudstack-cli/commands/host.rb +16 -7
- data/lib/cloudstack-cli/commands/ip_address.rb +14 -5
- data/lib/cloudstack-cli/commands/iso.rb +24 -11
- data/lib/cloudstack-cli/commands/job.rb +19 -10
- data/lib/cloudstack-cli/commands/load_balancer.rb +20 -11
- data/lib/cloudstack-cli/commands/network.rb +31 -21
- data/lib/cloudstack-cli/commands/physical_network.rb +19 -10
- data/lib/cloudstack-cli/commands/pod.rb +17 -8
- data/lib/cloudstack-cli/commands/port_rule.rb +21 -12
- data/lib/cloudstack-cli/commands/project.rb +21 -12
- data/lib/cloudstack-cli/commands/region.rb +17 -8
- data/lib/cloudstack-cli/commands/resource_limit.rb +12 -2
- data/lib/cloudstack-cli/commands/router.rb +2 -2
- data/lib/cloudstack-cli/commands/snapshot.rb +18 -9
- data/lib/cloudstack-cli/commands/ssh_key_pair.rb +13 -4
- data/lib/cloudstack-cli/commands/storage_pool.rb +30 -21
- data/lib/cloudstack-cli/commands/system_vm.rb +16 -7
- data/lib/cloudstack-cli/commands/template.rb +21 -12
- data/lib/cloudstack-cli/commands/user.rb +17 -8
- data/lib/cloudstack-cli/commands/virtual_machine.rb +3 -2
- data/lib/cloudstack-cli/commands/volume.rb +28 -15
- data/lib/cloudstack-cli/commands/zone.rb +17 -8
- data/lib/cloudstack-cli/version.rb +1 -1
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e7f07e2763e1098aebc86ef957def19af52e6439
         | 
| 4 | 
            +
              data.tar.gz: c7351b039d23832d297e18f4b3fad768f5dcf7f5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a043f85b78500aafed6ae9fed0e38629f18aa0a564ab832fe91f907576da8bcf91bfa8bb4aa47cf5c1399bf8c8b14af70537d03eb1d434693b308ae727275783
         | 
| 7 | 
            +
              data.tar.gz: f100042e728db5621e03dd6defd85fa7e4e80f8875f0d2daaddd44874dce6f85c5f9a69bea09fe364b066ff3af4818ca131da047029e744c47c4b950ad739e32
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/lib/cloudstack-cli/base.rb
    CHANGED
    
    | @@ -80,7 +80,7 @@ module CloudstackCli | |
| 80 80 | 
             
                  end
         | 
| 81 81 |  | 
| 82 82 | 
             
                  def filter_by(objects, key, value)
         | 
| 83 | 
            -
                    if objects.size  | 
| 83 | 
            +
                    if objects.size == 0
         | 
| 84 84 | 
             
                      return objects
         | 
| 85 85 | 
             
                    elsif !(keys = objects.map{|i| i.keys}.flatten.uniq).include?(key)
         | 
| 86 86 | 
             
                      say "WARNING: Filter invalid, no key \"#{key}\" found.", :yellow
         | 
| @@ -88,7 +88,7 @@ module CloudstackCli | |
| 88 88 | 
             
                      return objects
         | 
| 89 89 | 
             
                    end
         | 
| 90 90 | 
             
                    objects.select do |object|
         | 
| 91 | 
            -
                      object[key.to_s] =~ /#{value}/i
         | 
| 91 | 
            +
                      object[key.to_s].to_s =~ /#{value}/i
         | 
| 92 92 | 
             
                    end
         | 
| 93 93 | 
             
                  rescue RegexpError => e
         | 
| 94 94 | 
             
                    say "ERROR: Invalid regular expression in filter - #{e.message}", :red
         | 
| @@ -103,6 +103,15 @@ module CloudstackCli | |
| 103 103 | 
             
                    objects
         | 
| 104 104 | 
             
                  end
         | 
| 105 105 |  | 
| 106 | 
            +
                  def add_filters_to_options(command)
         | 
| 107 | 
            +
                    options[:filter].each do |filter_key, filter_value|
         | 
| 108 | 
            +
                      if client.api.params(command).find {|param| param["name"] == filter_key.downcase }
         | 
| 109 | 
            +
                        options[filter_key.downcase] = filter_value.gsub(/[^\w\s\.-]/, '')
         | 
| 110 | 
            +
                        options[:filter].delete(filter_key)
         | 
| 111 | 
            +
                      end
         | 
| 112 | 
            +
                    end
         | 
| 113 | 
            +
                  end
         | 
| 114 | 
            +
             | 
| 106 115 | 
             
                  def parse_file(file, extensions = %w(.json .yaml .yml))
         | 
| 107 116 | 
             
                    handler = case File.extname(file)
         | 
| 108 117 | 
             
                    when ".json"
         | 
| @@ -21,22 +21,31 @@ class Account < CloudstackCli::Base | |
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 23 | 
             
              desc 'list', 'list accounts'
         | 
| 24 | 
            +
              option :format, default: "table",
         | 
| 25 | 
            +
                enum: %w(table json yaml)
         | 
| 24 26 | 
             
              def list
         | 
| 25 27 | 
             
                accounts = client.list_accounts(listall: true)
         | 
| 26 28 | 
             
                if accounts.size < 1
         | 
| 27 29 | 
             
                  puts "No accounts found."
         | 
| 28 30 | 
             
                else
         | 
| 29 | 
            -
                   | 
| 30 | 
            -
                   | 
| 31 | 
            -
                     | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
                     | 
| 31 | 
            +
                  case options[:format].to_sym
         | 
| 32 | 
            +
                  when :yaml
         | 
| 33 | 
            +
                    puts({accounts: accounts}.to_yaml)
         | 
| 34 | 
            +
                  when :json
         | 
| 35 | 
            +
                    puts JSON.pretty_generate(accounts: accounts)
         | 
| 36 | 
            +
                  else
         | 
| 37 | 
            +
                    table = [%w(Name Type Domain State)]
         | 
| 38 | 
            +
                    accounts.each do |account|
         | 
| 39 | 
            +
                      table << [
         | 
| 40 | 
            +
                        account['name'],
         | 
| 41 | 
            +
                        TYPES[account['accounttype']],
         | 
| 42 | 
            +
                        account['domain'],
         | 
| 43 | 
            +
                        account['state']
         | 
| 44 | 
            +
                      ]
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                    print_table table
         | 
| 47 | 
            +
                    say "Total number of accounts: #{accounts.size}"
         | 
| 37 48 | 
             
                  end
         | 
| 38 | 
            -
                  print_table table
         | 
| 39 | 
            -
                  say "Total number of accounts: #{accounts.size}"
         | 
| 40 49 | 
             
                end
         | 
| 41 50 | 
             
              end
         | 
| 42 51 |  | 
| @@ -6,22 +6,31 @@ class AffinityGroup < CloudstackCli::Base | |
| 6 6 | 
             
              option :type
         | 
| 7 7 | 
             
              option :listall
         | 
| 8 8 | 
             
              option :keyword
         | 
| 9 | 
            +
              option :format, default: "table",
         | 
| 10 | 
            +
                enum: %w(table json yaml)
         | 
| 9 11 | 
             
              def list
         | 
| 10 12 | 
             
                resolve_account
         | 
| 11 13 | 
             
                affinity_groups = client.list_affinity_groups(options)
         | 
| 12 14 | 
             
                if affinity_groups.size < 1
         | 
| 13 15 | 
             
                  say "No affinity groups found."
         | 
| 14 16 | 
             
                else
         | 
| 15 | 
            -
                   | 
| 16 | 
            -
                   | 
| 17 | 
            -
                     | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
                    ]
         | 
| 17 | 
            +
                  case options[:format].to_sym
         | 
| 18 | 
            +
                  when :yaml
         | 
| 19 | 
            +
                    puts({affinity_groups: affinity_groups}.to_yaml)
         | 
| 20 | 
            +
                  when :json
         | 
| 21 | 
            +
                    puts JSON.pretty_generate(affinity_groups: affinity_groups)
         | 
| 22 | 
            +
                  else
         | 
| 23 | 
            +
                    table = [%w(Domain Account Name, Description, VMs)]
         | 
| 24 | 
            +
                    affinity_groups.each do |group|
         | 
| 25 | 
            +
                      table << [
         | 
| 26 | 
            +
                        group['domain'], group['account'],
         | 
| 27 | 
            +
                      	group['name'], group['description'],
         | 
| 28 | 
            +
                        group['virtualmachineIds'] ? group['virtualmachineIds'].size : nil
         | 
| 29 | 
            +
                      ]
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                    print_table table
         | 
| 32 | 
            +
                    say "Total number of affinity groups: #{affinity_groups.size}"
         | 
| 22 33 | 
             
                  end
         | 
| 23 | 
            -
                  print_table table
         | 
| 24 | 
            -
                  say "Total number of affinity groups: #{affinity_groups.size}"
         | 
| 25 34 | 
             
                end
         | 
| 26 35 | 
             
              end
         | 
| 27 36 |  | 
| @@ -13,7 +13,7 @@ class Capacity < CloudstackCli::Base | |
| 13 13 | 
             
              }
         | 
| 14 14 |  | 
| 15 15 | 
             
              desc "list", "list system capacity"
         | 
| 16 | 
            -
              option :zone, desc: " | 
| 16 | 
            +
              option :zone, desc: "list capacity by zone"
         | 
| 17 17 | 
             
              option :type, desc: "specify type, see types for a list of types"
         | 
| 18 18 | 
             
              def list
         | 
| 19 19 | 
             
                resolve_zone if options[:zone]
         | 
| @@ -2,22 +2,31 @@ class Cluster < CloudstackCli::Base | |
| 2 2 |  | 
| 3 3 | 
             
              desc 'list', 'list clusters'
         | 
| 4 4 | 
             
              option :zone, desc: "lists clusters by zone"
         | 
| 5 | 
            +
              option :format, default: "table",
         | 
| 6 | 
            +
                enum: %w(table json yaml)
         | 
| 5 7 | 
             
              def list
         | 
| 6 8 | 
             
                resolve_zone if options[:zone]
         | 
| 7 9 | 
             
                clusters = client.list_clusters(options)
         | 
| 8 10 | 
             
                if clusters.size < 1
         | 
| 9 11 | 
             
                  say "No clusters found."
         | 
| 10 12 | 
             
                else
         | 
| 11 | 
            -
                   | 
| 12 | 
            -
                   | 
| 13 | 
            -
                     | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                    ]
         | 
| 13 | 
            +
                  case options[:format].to_sym
         | 
| 14 | 
            +
                  when :yaml
         | 
| 15 | 
            +
                    puts({clusters: clusters}.to_yaml)
         | 
| 16 | 
            +
                  when :json
         | 
| 17 | 
            +
                    puts JSON.pretty_generate(clusters: clusters)
         | 
| 18 | 
            +
                  else
         | 
| 19 | 
            +
                    table = [%w(Name Pod_Name Type Zone State)]
         | 
| 20 | 
            +
                    clusters.each do |cluster|
         | 
| 21 | 
            +
                      table << [
         | 
| 22 | 
            +
                      	cluster['name'], cluster['podname'],
         | 
| 23 | 
            +
                        cluster['hypervisortype'], cluster['zonename'],
         | 
| 24 | 
            +
                        cluster['managedstate']
         | 
| 25 | 
            +
                      ]
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                    print_table table
         | 
| 28 | 
            +
                    say "Total number of clusters: #{clusters.size}"
         | 
| 18 29 | 
             
                  end
         | 
| 19 | 
            -
                  print_table table
         | 
| 20 | 
            -
                  say "Total number of clusters: #{clusters.size}"
         | 
| 21 30 | 
             
                end
         | 
| 22 31 | 
             
              end
         | 
| 23 32 |  | 
| @@ -2,13 +2,26 @@ class ComputeOffer < CloudstackCli::Base | |
| 2 2 |  | 
| 3 3 | 
             
              desc 'list', 'list compute offerings'
         | 
| 4 4 | 
             
              option :domain, desc: "the domain associated with the compute offering"
         | 
| 5 | 
            +
              option :format, default: "table",
         | 
| 6 | 
            +
                enum: %w(table json yaml)
         | 
| 7 | 
            +
              option :filter, type: :hash,
         | 
| 8 | 
            +
                desc: "filter objects based on arrtibutes: (attr1:regex attr2:regex ...)"
         | 
| 5 9 | 
             
              def list
         | 
| 6 10 | 
             
                resolve_domain
         | 
| 11 | 
            +
                add_filters_to_options("listServiceOfferings") if options[:filter]
         | 
| 7 12 | 
             
                offerings = client.list_service_offerings(options)
         | 
| 13 | 
            +
                offerings = filter_objects(offerings) if options[:filter]
         | 
| 8 14 | 
             
                if offerings.size < 1
         | 
| 9 15 | 
             
                  puts "No offerings found."
         | 
| 10 16 | 
             
                else
         | 
| 11 | 
            -
                   | 
| 17 | 
            +
                  case options[:format].to_sym
         | 
| 18 | 
            +
                  when :yaml
         | 
| 19 | 
            +
                    puts({compute_offers: offerings}.to_yaml)
         | 
| 20 | 
            +
                  when :json
         | 
| 21 | 
            +
                    puts JSON.pretty_generate(compute_offers: offerings)
         | 
| 22 | 
            +
                  else
         | 
| 23 | 
            +
                    print_compute_offerings(offerings)
         | 
| 24 | 
            +
                  end
         | 
| 12 25 | 
             
                end
         | 
| 13 26 | 
             
              end
         | 
| 14 27 |  | 
| @@ -2,23 +2,36 @@ class DiskOffer < CloudstackCli::Base | |
| 2 2 |  | 
| 3 3 | 
             
              desc 'list', 'list disk offerings'
         | 
| 4 4 | 
             
              option :domain, desc: "the domain of the disk offering"
         | 
| 5 | 
            +
              option :format, default: "table",
         | 
| 6 | 
            +
                enum: %w(table json yaml)
         | 
| 7 | 
            +
              option :filter, type: :hash,
         | 
| 8 | 
            +
                desc: "filter objects based on arrtibutes: (attr1:regex attr2:regex ...)"
         | 
| 5 9 | 
             
              def list
         | 
| 6 10 | 
             
                resolve_domain
         | 
| 11 | 
            +
                add_filters_to_options("listDiskOfferings") if options[:filter]
         | 
| 7 12 | 
             
                offerings = client.list_disk_offerings(options)
         | 
| 13 | 
            +
                offerings = filter_objects(offerings) if options[:filter]
         | 
| 8 14 | 
             
                if offerings.size < 1
         | 
| 9 15 | 
             
                  puts "No offerings found."
         | 
| 10 16 | 
             
                else
         | 
| 11 | 
            -
                   | 
| 12 | 
            -
                   | 
| 13 | 
            -
                     | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                     | 
| 17 | 
            +
                  case options[:format].to_sym
         | 
| 18 | 
            +
                  when :yaml
         | 
| 19 | 
            +
                    puts({disk_offers: offerings}.to_yaml)
         | 
| 20 | 
            +
                  when :json
         | 
| 21 | 
            +
                    puts JSON.pretty_generate(disk_offers: offerings)
         | 
| 22 | 
            +
                  else
         | 
| 23 | 
            +
                    table = [["Name", "Displaytext", "Domain", "ID"]]
         | 
| 24 | 
            +
                    offerings.each do |offering|
         | 
| 25 | 
            +
                      table << [
         | 
| 26 | 
            +
                        offering["name"],
         | 
| 27 | 
            +
                        offering["displaytext"],
         | 
| 28 | 
            +
                        offering["domain"],
         | 
| 29 | 
            +
                        offering["id"]
         | 
| 30 | 
            +
                      ]
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
                    print_table table
         | 
| 33 | 
            +
                    say "Total number of offerings: #{offerings.size}"
         | 
| 19 34 | 
             
                  end
         | 
| 20 | 
            -
                  print_table table
         | 
| 21 | 
            -
                  say "Total number of offerings: #{offerings.size}"
         | 
| 22 35 | 
             
                end
         | 
| 23 36 | 
             
              end
         | 
| 24 37 | 
             
            end
         | 
| @@ -1,17 +1,26 @@ | |
| 1 1 | 
             
            class Domain < CloudstackCli::Base
         | 
| 2 2 |  | 
| 3 3 | 
             
              desc 'list', 'list domains'
         | 
| 4 | 
            +
              option :format, default: "table",
         | 
| 5 | 
            +
                enum: %w(table json yaml)
         | 
| 4 6 | 
             
              def list
         | 
| 5 7 | 
             
                domains = client.list_domains
         | 
| 6 8 | 
             
                if domains.size < 1
         | 
| 7 9 | 
             
                  puts "No domains found."
         | 
| 8 10 | 
             
                else
         | 
| 9 | 
            -
                   | 
| 10 | 
            -
                   | 
| 11 | 
            -
                     | 
| 11 | 
            +
                  case options[:format].to_sym
         | 
| 12 | 
            +
                  when :yaml
         | 
| 13 | 
            +
                    puts({domains: domains}.to_yaml)
         | 
| 14 | 
            +
                  when :json
         | 
| 15 | 
            +
                    puts JSON.pretty_generate(domains: domains)
         | 
| 16 | 
            +
                  else
         | 
| 17 | 
            +
                    table = [%w(Name Path)]
         | 
| 18 | 
            +
                    domains.each do |domain|
         | 
| 19 | 
            +
                      table << [domain['name'], domain['path']]
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                    print_table table
         | 
| 22 | 
            +
                    say "Total number of domains: #{domains.size}"
         | 
| 12 23 | 
             
                  end
         | 
| 13 | 
            -
                  print_table table
         | 
| 14 | 
            -
                  say "Total number of domains: #{domains.size}"
         | 
| 15 24 | 
             
                end
         | 
| 16 25 | 
             
              end
         | 
| 17 26 |  | 
| @@ -3,20 +3,29 @@ class Host < CloudstackCli::Base | |
| 3 3 | 
             
              desc 'list', 'list hosts'
         | 
| 4 4 | 
             
              option :zone, desc: "lists hosts by zone"
         | 
| 5 5 | 
             
              option :type, desc: "the host type"
         | 
| 6 | 
            +
              option :format, default: "table",
         | 
| 7 | 
            +
                enum: %w(table json yaml)
         | 
| 6 8 | 
             
              def list
         | 
| 7 9 | 
             
                resolve_zone if options[:zone]
         | 
| 8 10 | 
             
                hosts = client.list_hosts(options)
         | 
| 9 11 | 
             
                if hosts.size < 1
         | 
| 10 12 | 
             
                  say "No hosts found."
         | 
| 11 13 | 
             
                else
         | 
| 12 | 
            -
                   | 
| 13 | 
            -
                   | 
| 14 | 
            -
                     | 
| 15 | 
            -
             | 
| 16 | 
            -
                     | 
| 14 | 
            +
                  case options[:format].to_sym
         | 
| 15 | 
            +
                  when :yaml
         | 
| 16 | 
            +
                    puts({hosts: hosts}.to_yaml)
         | 
| 17 | 
            +
                  when :json
         | 
| 18 | 
            +
                    puts JSON.pretty_generate(hosts: hosts)
         | 
| 19 | 
            +
                  else
         | 
| 20 | 
            +
                    table = [["Zone", "Type", "Cluster", "Name"]]
         | 
| 21 | 
            +
                    hosts.each do |host|
         | 
| 22 | 
            +
                      table << [
         | 
| 23 | 
            +
                      	host['zonename'], host['type'], host['clustername'], host['name']
         | 
| 24 | 
            +
                      ]
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                    print_table table
         | 
| 27 | 
            +
                    say "Total number of hosts: #{hosts.size}"
         | 
| 17 28 | 
             
                  end
         | 
| 18 | 
            -
                  print_table table
         | 
| 19 | 
            -
                  say "Total number of hosts: #{hosts.size}"
         | 
| 20 29 | 
             
                end
         | 
| 21 30 | 
             
              end
         | 
| 22 31 |  | 
| @@ -29,6 +29,8 @@ class IpAddress < CloudstackCli::Base | |
| 29 29 | 
             
              option :project
         | 
| 30 30 | 
             
              option :account
         | 
| 31 31 | 
             
              option :listall
         | 
| 32 | 
            +
              option :format, default: "table",
         | 
| 33 | 
            +
                enum: %w(table json yaml)
         | 
| 32 34 | 
             
              def list
         | 
| 33 35 | 
             
                resolve_account
         | 
| 34 36 | 
             
                resolve_project
         | 
| @@ -36,12 +38,19 @@ class IpAddress < CloudstackCli::Base | |
| 36 38 | 
             
                if addresses.size < 1
         | 
| 37 39 | 
             
                  say "No ip addresses found."
         | 
| 38 40 | 
             
                else
         | 
| 39 | 
            -
                   | 
| 40 | 
            -
                   | 
| 41 | 
            -
                     | 
| 41 | 
            +
                  case options[:format].to_sym
         | 
| 42 | 
            +
                  when :yaml
         | 
| 43 | 
            +
                    puts({ip_addresses: addresses}.to_yaml)
         | 
| 44 | 
            +
                  when :json
         | 
| 45 | 
            +
                    puts JSON.pretty_generate(ip_addresses: addresses)
         | 
| 46 | 
            +
                  else
         | 
| 47 | 
            +
                    table = [%w(ID Address Account Zone)]
         | 
| 48 | 
            +
                    addresses.each do |address|
         | 
| 49 | 
            +
                      table << [address["id"], address["ipaddress"], address["account"], address["zonename"]]
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
                    print_table table
         | 
| 52 | 
            +
                    say "Total number of addresses: #{addresses.size}"
         | 
| 42 53 | 
             
                  end
         | 
| 43 | 
            -
                  print_table table
         | 
| 44 | 
            -
                  say "Total number of addresses: #{addresses.size}"
         | 
| 45 54 | 
             
                end
         | 
| 46 55 | 
             
              end
         | 
| 47 56 |  | 
| @@ -6,28 +6,41 @@ class Iso < CloudstackCli::Base | |
| 6 6 | 
             
              option :account, desc: 'account name'
         | 
| 7 7 | 
             
              option :type, desc: 'type of ISO',
         | 
| 8 8 | 
             
                enum: %w(featured self selfexecutable sharedexecutable executable community all)
         | 
| 9 | 
            +
              option :format, default: "table",
         | 
| 10 | 
            +
                enum: %w(table json yaml)
         | 
| 11 | 
            +
              option :filter, type: :hash,
         | 
| 12 | 
            +
                desc: "filter objects based on arrtibutes: (attr1:regex attr2:regex ...)"
         | 
| 9 13 | 
             
              def list
         | 
| 14 | 
            +
                add_filters_to_options("listIsos") if options[:filter]
         | 
| 10 15 | 
             
                resolve_project
         | 
| 11 16 | 
             
                resolve_zone
         | 
| 12 17 | 
             
                resolve_account
         | 
| 13 18 | 
             
                options[:isofilter] = options[:type]
         | 
| 14 19 | 
             
                options.delete :type
         | 
| 15 20 | 
             
                isos = client.list_isos(options)
         | 
| 21 | 
            +
                isos = filter_objects(isos) if options[:filter]
         | 
| 16 22 | 
             
                if isos.size < 1
         | 
| 17 23 | 
             
                  puts "No ISO's found."
         | 
| 18 24 | 
             
                else
         | 
| 19 | 
            -
                   | 
| 20 | 
            -
                   | 
| 21 | 
            -
                     | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 25 | 
            +
                  case options[:format].to_sym
         | 
| 26 | 
            +
                  when :yaml
         | 
| 27 | 
            +
                    puts({isos: isos}.to_yaml)
         | 
| 28 | 
            +
                  when :json
         | 
| 29 | 
            +
                    puts JSON.pretty_generate(isos: isos)
         | 
| 30 | 
            +
                  else
         | 
| 31 | 
            +
                    table = [%w(Name Zone Bootable Public Featured)]
         | 
| 32 | 
            +
                    isos.each do |iso|
         | 
| 33 | 
            +
                      table <<  [
         | 
| 34 | 
            +
                        iso['name'],
         | 
| 35 | 
            +
                        iso['zonename'],
         | 
| 36 | 
            +
                        iso['bootable'],
         | 
| 37 | 
            +
                        iso['ispublic'],
         | 
| 38 | 
            +
                        iso['isfeatured']
         | 
| 39 | 
            +
                      ]
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                    print_table(table)
         | 
| 42 | 
            +
                    say "Total number of ISO's: #{isos.size}"
         | 
| 28 43 | 
             
                  end
         | 
| 29 | 
            -
                  print_table(table)
         | 
| 30 | 
            -
                  say "Total number of ISO's: #{isos.size}"
         | 
| 31 44 | 
             
                end
         | 
| 32 45 | 
             
              end
         | 
| 33 46 |  | 
| @@ -1,22 +1,31 @@ | |
| 1 1 | 
             
            class Job < CloudstackCli::Base
         | 
| 2 2 |  | 
| 3 3 | 
             
              desc 'list', 'list async jobs'
         | 
| 4 | 
            +
              option :format, default: "table",
         | 
| 5 | 
            +
                enum: %w(table json yaml)
         | 
| 4 6 | 
             
              def list
         | 
| 5 7 | 
             
                jobs = client.list_async_jobs
         | 
| 6 8 | 
             
                if jobs.size < 1
         | 
| 7 9 | 
             
                  say "No jobs found."
         | 
| 8 10 | 
             
                else
         | 
| 9 | 
            -
                   | 
| 10 | 
            -
                   | 
| 11 | 
            -
                     | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 11 | 
            +
                  case options[:format].to_sym
         | 
| 12 | 
            +
                  when :yaml
         | 
| 13 | 
            +
                    puts({jobs: jobs}.to_yaml)
         | 
| 14 | 
            +
                  when :json
         | 
| 15 | 
            +
                    puts JSON.pretty_generate(jobs: jobs)
         | 
| 16 | 
            +
                  else
         | 
| 17 | 
            +
                    table = [%w(Command Created Status ID User-ID)]
         | 
| 18 | 
            +
                    jobs.each do |job|
         | 
| 19 | 
            +
                      table << [
         | 
| 20 | 
            +
                        job['cmd'].split('.')[-1],
         | 
| 21 | 
            +
                        job['created'],
         | 
| 22 | 
            +
                        job['jobstatus'],
         | 
| 23 | 
            +
                        job['jobid'],
         | 
| 24 | 
            +
                        job['userid']
         | 
| 25 | 
            +
                      ]
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                    print_table table
         | 
| 18 28 | 
             
                  end
         | 
| 19 | 
            -
                  print_table table
         | 
| 20 29 | 
             
                end
         | 
| 21 30 | 
             
              end
         | 
| 22 31 |  | 
| @@ -2,24 +2,33 @@ class LoadBalancer < CloudstackCli::Base | |
| 2 2 |  | 
| 3 3 | 
             
              desc "list", "list load balancer rules"
         | 
| 4 4 | 
             
              option :project
         | 
| 5 | 
            +
              option :format, default: "table",
         | 
| 6 | 
            +
                enum: %w(table json yaml)
         | 
| 5 7 | 
             
              def list
         | 
| 6 8 | 
             
                resolve_project
         | 
| 7 9 | 
             
                rules = client.list_load_balancer_rules(options)
         | 
| 8 10 | 
             
                if rules.size < 1
         | 
| 9 11 | 
             
                  puts "No load balancer rules found."
         | 
| 10 12 | 
             
                else
         | 
| 11 | 
            -
                   | 
| 12 | 
            -
                   | 
| 13 | 
            -
                     | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 13 | 
            +
                  case options[:format].to_sym
         | 
| 14 | 
            +
                  when :yaml
         | 
| 15 | 
            +
                    puts({rules: rules}.to_yaml)
         | 
| 16 | 
            +
                  when :json
         | 
| 17 | 
            +
                    puts JSON.pretty_generate(rules: rules)
         | 
| 18 | 
            +
                  else
         | 
| 19 | 
            +
                    table = [%w(Name Public-IP Public-Port Private-Port Algorithm)]
         | 
| 20 | 
            +
                    rules.each do |rule|
         | 
| 21 | 
            +
                      table << [
         | 
| 22 | 
            +
                        rule['name'],
         | 
| 23 | 
            +
                        rule['publicip'],
         | 
| 24 | 
            +
                        rule['publicport'],
         | 
| 25 | 
            +
                        rule['privateport'],
         | 
| 26 | 
            +
                        rule['algorithm']
         | 
| 27 | 
            +
                      ]
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                    print_table table
         | 
| 30 | 
            +
                    say "Total number of rules: #{rules.count}"
         | 
| 20 31 | 
             
                  end
         | 
| 21 | 
            -
                  print_table table
         | 
| 22 | 
            -
                  say "Total number of rules: #{rules.count}"
         | 
| 23 32 | 
             
                end
         | 
| 24 33 | 
             
              end
         | 
| 25 34 |  | 
| @@ -4,37 +4,47 @@ class Network < CloudstackCli::Base | |
| 4 4 | 
             
              option :project, desc: 'the project name of the network'
         | 
| 5 5 | 
             
              option :account, desc: 'the owner of the network'
         | 
| 6 6 | 
             
              option :zone, desc: 'the name of the zone the network belongs to'
         | 
| 7 | 
            -
              option :type, desc: 'the type of the network'
         | 
| 8 7 | 
             
              option :showid, type: :boolean, desc: 'show the network id'
         | 
| 9 8 | 
             
              option :showvlan, type: :boolean, desc: 'show the VLAN'
         | 
| 9 | 
            +
              option :filter, type: :hash,
         | 
| 10 | 
            +
                desc: "filter objects based on arrtibutes: (attr1:regex attr2:regex ...)"
         | 
| 11 | 
            +
              option :format, default: "table",
         | 
| 12 | 
            +
                enum: %w(table json yaml)
         | 
| 10 13 | 
             
              def list
         | 
| 11 14 | 
             
                resolve_zone if options[:zone]
         | 
| 12 15 | 
             
                resolve_project
         | 
| 16 | 
            +
                add_filters_to_options("listNetworks") if options[:filter]
         | 
| 13 17 | 
             
                networks = client.list_networks(options)
         | 
| 14 | 
            -
             | 
| 18 | 
            +
                networks = filter_objects(networks) if options[:filter]
         | 
| 15 19 | 
             
                if networks.size < 1
         | 
| 16 20 | 
             
                  puts "No networks found."
         | 
| 17 21 | 
             
                else
         | 
| 18 | 
            -
                   | 
| 19 | 
            -
                   | 
| 20 | 
            -
             | 
| 21 | 
            -
                   | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
                       | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 22 | 
            +
                  case options[:format].to_sym
         | 
| 23 | 
            +
                  when :yaml
         | 
| 24 | 
            +
                    puts({networks: networks}.to_yaml)
         | 
| 25 | 
            +
                  when :json
         | 
| 26 | 
            +
                    puts JSON.pretty_generate(networks: networks)
         | 
| 27 | 
            +
                  else
         | 
| 28 | 
            +
                    table = [%w(Name Displaytext Account/Project Zone Domain State Type Offering)]
         | 
| 29 | 
            +
                    table[0] << "ID" if options[:showid]
         | 
| 30 | 
            +
                    table[0] << "VLAN" if options[:showvlan]
         | 
| 31 | 
            +
                    networks.each do |network|
         | 
| 32 | 
            +
                      table << [
         | 
| 33 | 
            +
                        network["name"],
         | 
| 34 | 
            +
                        network["displaytext"],
         | 
| 35 | 
            +
                        network["account"] || network["project"],
         | 
| 36 | 
            +
                        network["zonename"],
         | 
| 37 | 
            +
                        network["domain"],
         | 
| 38 | 
            +
                        network["state"],
         | 
| 39 | 
            +
                        network["type"],
         | 
| 40 | 
            +
                        network["networkofferingname"]
         | 
| 41 | 
            +
                      ]
         | 
| 42 | 
            +
                      table[-1] << network["id"] if options[:showid]
         | 
| 43 | 
            +
                      table[-1] << network["vlan"] if options[:showvlan]
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
                    print_table table
         | 
| 46 | 
            +
                    say "Total number of networks: #{networks.count}"
         | 
| 35 47 | 
             
                  end
         | 
| 36 | 
            -
                  print_table table
         | 
| 37 | 
            -
                  say "Total number of networks: #{networks.count}"
         | 
| 38 48 | 
             
                end
         | 
| 39 49 | 
             
              end
         | 
| 40 50 |  | 
| @@ -2,6 +2,8 @@ class PhysicalNetwork < CloudstackCli::Base | |
| 2 2 |  | 
| 3 3 | 
             
              desc "list", "list physical networks"
         | 
| 4 4 | 
             
              option :project
         | 
| 5 | 
            +
              option :format, default: "table",
         | 
| 6 | 
            +
                enum: %w(table json yaml)
         | 
| 5 7 | 
             
              def list
         | 
| 6 8 | 
             
                resolve_project
         | 
| 7 9 | 
             
                networks = client.list_physical_networks(options)
         | 
| @@ -9,17 +11,24 @@ class PhysicalNetwork < CloudstackCli::Base | |
| 9 11 | 
             
                if networks.size < 1
         | 
| 10 12 | 
             
                  puts "No networks found"
         | 
| 11 13 | 
             
                else
         | 
| 12 | 
            -
                   | 
| 13 | 
            -
                   | 
| 14 | 
            -
                     | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
                     | 
| 14 | 
            +
                  case options[:format].to_sym
         | 
| 15 | 
            +
                  when :yaml
         | 
| 16 | 
            +
                    puts({networks: networks}.to_yaml)
         | 
| 17 | 
            +
                  when :json
         | 
| 18 | 
            +
                    puts JSON.pretty_generate(networks: networks)
         | 
| 19 | 
            +
                  else
         | 
| 20 | 
            +
                    table = [['Name', 'State', 'Zone', 'ID']]
         | 
| 21 | 
            +
                    networks.each do |network|
         | 
| 22 | 
            +
                      table << [
         | 
| 23 | 
            +
                        network["name"],
         | 
| 24 | 
            +
                        network["state"],
         | 
| 25 | 
            +
                        zones.select{|zone| zone['id'] == network["zoneid"]}.first["name"],
         | 
| 26 | 
            +
                        network["id"]
         | 
| 27 | 
            +
                      ]
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                    print_table table
         | 
| 30 | 
            +
                    say "Total number of networks: #{networks.count}"
         | 
| 20 31 | 
             
                  end
         | 
| 21 | 
            -
                  print_table table
         | 
| 22 | 
            -
                  say "Total number of networks: #{networks.count}"
         | 
| 23 32 | 
             
                end
         | 
| 24 33 | 
             
              end
         | 
| 25 34 |  | 
| @@ -2,21 +2,30 @@ class Pod < CloudstackCli::Base | |
| 2 2 |  | 
| 3 3 | 
             
              desc 'list', 'list pods'
         | 
| 4 4 | 
             
              option :zone
         | 
| 5 | 
            +
              option :format, default: "table",
         | 
| 6 | 
            +
                enum: %w(table json yaml)
         | 
| 5 7 | 
             
              def list
         | 
| 6 8 | 
             
                resolve_zone
         | 
| 7 9 | 
             
                pods = client.list_pods(options)
         | 
| 8 10 | 
             
                if pods.size < 1
         | 
| 9 11 | 
             
                  say "No pods found."
         | 
| 10 12 | 
             
                else
         | 
| 11 | 
            -
                   | 
| 12 | 
            -
                   | 
| 13 | 
            -
                     | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 13 | 
            +
                  case options[:format].to_sym
         | 
| 14 | 
            +
                  when :yaml
         | 
| 15 | 
            +
                    puts({pods: pods}.to_yaml)
         | 
| 16 | 
            +
                  when :json
         | 
| 17 | 
            +
                    puts JSON.pretty_generate(pods: pods)
         | 
| 18 | 
            +
                  else
         | 
| 19 | 
            +
                    table = [["Name", "Start-IP", "End-IP", "Zone"]]
         | 
| 20 | 
            +
                    pods.each do |pod|
         | 
| 21 | 
            +
                      table << [
         | 
| 22 | 
            +
                      	pod['name'], pod['startip'],
         | 
| 23 | 
            +
                        pod['endip'], pod['zonename']
         | 
| 24 | 
            +
                      ]
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                    print_table table
         | 
| 27 | 
            +
                    say "Total number of pods: #{pods.count}"
         | 
| 17 28 | 
             
                  end
         | 
| 18 | 
            -
                  print_table table
         | 
| 19 | 
            -
                  say "Total number of pods: #{pods.count}"
         | 
| 20 29 | 
             
                end
         | 
| 21 30 | 
             
              end
         | 
| 22 31 |  | 
| @@ -44,25 +44,34 @@ class PortRule < CloudstackCli::Base | |
| 44 44 |  | 
| 45 45 | 
             
              desc "list", "list portforwarding rules"
         | 
| 46 46 | 
             
              option :project
         | 
| 47 | 
            +
              option :format, default: "table",
         | 
| 48 | 
            +
                enum: %w(table json yaml)
         | 
| 47 49 | 
             
              def list
         | 
| 48 50 | 
             
                resolve_project
         | 
| 49 51 | 
             
                rules = client.list_port_forwarding_rules(options)
         | 
| 50 52 | 
             
                if rules.size < 1
         | 
| 51 53 | 
             
                  puts "No rules found."
         | 
| 52 54 | 
             
                else
         | 
| 53 | 
            -
                   | 
| 54 | 
            -
                   | 
| 55 | 
            -
                     | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
                       | 
| 62 | 
            -
             | 
| 55 | 
            +
                  case options[:format].to_sym
         | 
| 56 | 
            +
                  when :yaml
         | 
| 57 | 
            +
                    puts({rules: rules}.to_yaml)
         | 
| 58 | 
            +
                  when :json
         | 
| 59 | 
            +
                    puts JSON.pretty_generate(rules: rules)
         | 
| 60 | 
            +
                  else
         | 
| 61 | 
            +
                    table = [["IP", "Server", "Public-Port", "Private-Port", "Protocol", "State"]]
         | 
| 62 | 
            +
                    rules.each do |rule|
         | 
| 63 | 
            +
                      table << [
         | 
| 64 | 
            +
                        rule['ipaddress'],
         | 
| 65 | 
            +
                        rule['virtualmachinename'],
         | 
| 66 | 
            +
                        print_ports(rule, 'public'),
         | 
| 67 | 
            +
                        print_ports(rule, 'private'),
         | 
| 68 | 
            +
                        rule['protocol'],
         | 
| 69 | 
            +
                        rule['state']
         | 
| 70 | 
            +
                      ]
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                    print_table table
         | 
| 73 | 
            +
                    say "Total number of rules: #{rules.count}"
         | 
| 63 74 | 
             
                  end
         | 
| 64 | 
            -
                  print_table table
         | 
| 65 | 
            -
                  say "Total number of rules: #{rules.count}"
         | 
| 66 75 | 
             
                end
         | 
| 67 76 | 
             
              end
         | 
| 68 77 |  | 
| @@ -14,25 +14,34 @@ class Project < CloudstackCli::Base | |
| 14 14 |  | 
| 15 15 | 
             
              desc "list", "list projects"
         | 
| 16 16 | 
             
              option :domain, desc: "List only resources belonging to the domain specified"
         | 
| 17 | 
            +
              option :format, default: "table",
         | 
| 18 | 
            +
                enum: %w(table json yaml)
         | 
| 17 19 | 
             
              def list
         | 
| 18 20 | 
             
                resolve_domain
         | 
| 19 21 | 
             
                projects = client.list_projects(options.merge listall: true)
         | 
| 20 22 | 
             
                if projects.size < 1
         | 
| 21 23 | 
             
                  puts "No projects found."
         | 
| 22 24 | 
             
                else
         | 
| 23 | 
            -
                   | 
| 24 | 
            -
                   | 
| 25 | 
            -
                     | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
                       | 
| 32 | 
            -
             | 
| 25 | 
            +
                  case options[:format].to_sym
         | 
| 26 | 
            +
                  when :yaml
         | 
| 27 | 
            +
                    puts({projects: projects}.to_yaml)
         | 
| 28 | 
            +
                  when :json
         | 
| 29 | 
            +
                    puts JSON.pretty_generate(projects: projects)
         | 
| 30 | 
            +
                  else
         | 
| 31 | 
            +
                    table = [%w(Name Displaytext VMs CPU Memory Domain)]
         | 
| 32 | 
            +
                    projects.each do |project|
         | 
| 33 | 
            +
                      table << [
         | 
| 34 | 
            +
                        project['name'],
         | 
| 35 | 
            +
                        project['displaytext'],
         | 
| 36 | 
            +
                        project['vmtotal'],
         | 
| 37 | 
            +
                        project['cputotal'],
         | 
| 38 | 
            +
                        project['memorytotal'] / 1024,
         | 
| 39 | 
            +
                        project['domain']
         | 
| 40 | 
            +
                      ]
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
                    print_table(table)
         | 
| 43 | 
            +
                    say "Total number of projects: #{projects.count}"
         | 
| 33 44 | 
             
                  end
         | 
| 34 | 
            -
                  print_table(table)
         | 
| 35 | 
            -
                  say "Total number of projects: #{projects.count}"
         | 
| 36 45 | 
             
                end
         | 
| 37 46 | 
             
              end
         | 
| 38 47 |  | 
| @@ -1,20 +1,29 @@ | |
| 1 1 | 
             
            class Region < CloudstackCli::Base
         | 
| 2 2 |  | 
| 3 3 | 
             
              desc 'list', 'list regions'
         | 
| 4 | 
            +
              option :format, default: "table",
         | 
| 5 | 
            +
                enum: %w(table json yaml)
         | 
| 4 6 | 
             
              def list
         | 
| 5 7 | 
             
                regions = client.list_regions
         | 
| 6 8 | 
             
                if regions.size < 1
         | 
| 7 9 | 
             
                  say "No regions found."
         | 
| 8 10 | 
             
                else
         | 
| 9 | 
            -
                   | 
| 10 | 
            -
                   | 
| 11 | 
            -
                     | 
| 12 | 
            -
             | 
| 13 | 
            -
                     | 
| 11 | 
            +
                  case options[:format].to_sym
         | 
| 12 | 
            +
                  when :yaml
         | 
| 13 | 
            +
                    puts({regions: regions}.to_yaml)
         | 
| 14 | 
            +
                  when :json
         | 
| 15 | 
            +
                    puts JSON.pretty_generate(regions: regions)
         | 
| 16 | 
            +
                  else
         | 
| 17 | 
            +
                    table = [%w(Name, Endpoint)]
         | 
| 18 | 
            +
                    regions.each do |region|
         | 
| 19 | 
            +
                      table << [
         | 
| 20 | 
            +
                      	region['name'], region['endpoint']
         | 
| 21 | 
            +
                      ]
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                    print_table table
         | 
| 24 | 
            +
                    say "Total number of regions: #{regions.size}"
         | 
| 14 25 | 
             
                  end
         | 
| 15 | 
            -
                  print_table table
         | 
| 16 | 
            -
                  say "Total number of regions: #{regions.size}"
         | 
| 17 26 | 
             
                end
         | 
| 18 27 | 
             
              end
         | 
| 19 28 |  | 
| 20 | 
            -
            end
         | 
| 29 | 
            +
            end
         | 
| @@ -18,6 +18,8 @@ class ResourceLimit < CloudstackCli::Base | |
| 18 18 | 
             
              option :account
         | 
| 19 19 | 
             
              option :project
         | 
| 20 20 | 
             
              option :type, desc: "specify type, see types for a list of types"
         | 
| 21 | 
            +
              option :format, default: "table",
         | 
| 22 | 
            +
                enum: %w(table json yaml)
         | 
| 21 23 | 
             
              def list
         | 
| 22 24 | 
             
                resolve_account
         | 
| 23 25 | 
             
                resolve_project
         | 
| @@ -34,8 +36,16 @@ class ResourceLimit < CloudstackCli::Base | |
| 34 36 | 
             
                    resource_to_s(limit, 'max')
         | 
| 35 37 | 
             
                  ]
         | 
| 36 38 | 
             
                end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                 | 
| 39 | 
            +
             | 
| 40 | 
            +
                case options[:format].to_sym
         | 
| 41 | 
            +
                when :yaml
         | 
| 42 | 
            +
                  puts({resource_limits: limits}.to_yaml)
         | 
| 43 | 
            +
                when :json
         | 
| 44 | 
            +
                  puts JSON.pretty_generate(resource_limits: limits)
         | 
| 45 | 
            +
                else
         | 
| 46 | 
            +
                  table = table.insert(0, header)
         | 
| 47 | 
            +
                  print_table table
         | 
| 48 | 
            +
                end
         | 
| 39 49 | 
             
              end
         | 
| 40 50 |  | 
| 41 51 | 
             
              desc "refresh", "refresh resource counts"
         | 
| @@ -167,9 +167,9 @@ class Router < CloudstackCli::Base | |
| 167 167 | 
             
                    options[:format] ||= "table"
         | 
| 168 168 | 
             
                    case options[:format].to_sym
         | 
| 169 169 | 
             
                    when :yaml
         | 
| 170 | 
            -
                      puts({ | 
| 170 | 
            +
                      puts({routers: routers}.to_yaml)
         | 
| 171 171 | 
             
                    when :json
         | 
| 172 | 
            -
                       | 
| 172 | 
            +
                      puts JSON.pretty_generate(routers: routers)
         | 
| 173 173 | 
             
                    else
         | 
| 174 174 | 
             
                      table = [%w(
         | 
| 175 175 | 
             
                        Name Zone Account/Project IP Linklocal-IP Status Version
         | 
| @@ -6,6 +6,8 @@ class Snapshot < CloudstackCli::Base | |
| 6 6 | 
             
              option :domain, desc: "the domain name of the snapshot's account"
         | 
| 7 7 | 
             
              option :listall, default: true, desc: "list all resources the caller has rights on"
         | 
| 8 8 | 
             
              option :state, desc: "filter snapshots by state"
         | 
| 9 | 
            +
              option :format, default: "table",
         | 
| 10 | 
            +
                enum: %w(table json yaml)
         | 
| 9 11 | 
             
              def list
         | 
| 10 12 | 
             
                resolve_account
         | 
| 11 13 | 
             
                resolve_project
         | 
| @@ -14,16 +16,23 @@ class Snapshot < CloudstackCli::Base | |
| 14 16 | 
             
                if snapshots.size < 1
         | 
| 15 17 | 
             
                  say "No snapshots found."
         | 
| 16 18 | 
             
                else
         | 
| 17 | 
            -
                   | 
| 18 | 
            -
                   | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                    ]
         | 
| 19 | 
            +
                  case options[:format].to_sym
         | 
| 20 | 
            +
                  when :yaml
         | 
| 21 | 
            +
                    puts({snapshots: snapshots}.to_yaml)
         | 
| 22 | 
            +
                  when :json
         | 
| 23 | 
            +
                    puts JSON.pretty_generate(snapshots: snapshots)
         | 
| 24 | 
            +
                  else
         | 
| 25 | 
            +
                    table = [%w(Account Name Volume Created Type State)]
         | 
| 26 | 
            +
                    snapshots = filter_by(snapshots, :state, options[:state]) if options[:state]
         | 
| 27 | 
            +
                    snapshots.each do |snapshot|
         | 
| 28 | 
            +
                      table << [
         | 
| 29 | 
            +
                      	snapshot['account'], snapshot['name'], snapshot['volumename'],
         | 
| 30 | 
            +
                      	snapshot['created'], snapshot['snapshottype'], snapshot['state']
         | 
| 31 | 
            +
                      ]
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                    print_table table
         | 
| 34 | 
            +
                    say "Total number of snapshots: #{snapshots.size}"
         | 
| 24 35 | 
             
                  end
         | 
| 25 | 
            -
                  print_table table
         | 
| 26 | 
            -
                  say "Total number of snapshots: #{snapshots.size}"
         | 
| 27 36 | 
             
                end
         | 
| 28 37 | 
             
              end
         | 
| 29 38 |  | 
| @@ -4,6 +4,8 @@ class SshKeyPair < CloudstackCli::Base | |
| 4 4 | 
             
              option :listall, default: true
         | 
| 5 5 | 
             
              option :account
         | 
| 6 6 | 
             
              option :project
         | 
| 7 | 
            +
              option :format, default: "table",
         | 
| 8 | 
            +
                enum: %w(table json yaml)
         | 
| 7 9 | 
             
              def list
         | 
| 8 10 | 
             
                resolve_account
         | 
| 9 11 | 
             
                resolve_project
         | 
| @@ -11,11 +13,18 @@ class SshKeyPair < CloudstackCli::Base | |
| 11 13 | 
             
                if pairs.size < 1
         | 
| 12 14 | 
             
                  say "No ssh key pairs found."
         | 
| 13 15 | 
             
                else
         | 
| 14 | 
            -
                   | 
| 15 | 
            -
                   | 
| 16 | 
            -
                     | 
| 16 | 
            +
                  case options[:format].to_sym
         | 
| 17 | 
            +
                  when :yaml
         | 
| 18 | 
            +
                    puts({ssh_key_pairs: pairs}.to_yaml)
         | 
| 19 | 
            +
                  when :json
         | 
| 20 | 
            +
                    puts JSON.pretty_generate(ssh_key_pairs: pairs)
         | 
| 21 | 
            +
                  else
         | 
| 22 | 
            +
                    table = [["Name", "Fingerprint"]]
         | 
| 23 | 
            +
                    pairs.each do |pair|
         | 
| 24 | 
            +
                      table << [pair['name'], pair['fingerprint']]
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                    print_table table
         | 
| 17 27 | 
             
                  end
         | 
| 18 | 
            -
                  print_table table
         | 
| 19 28 | 
             
                end
         | 
| 20 29 | 
             
              end
         | 
| 21 30 |  | 
| @@ -5,34 +5,43 @@ class StoragePool < CloudstackCli::Base | |
| 5 5 | 
             
              option :name, desc: "name of the storage pool"
         | 
| 6 6 | 
             
              option :keyword, desc: "list by keyword"
         | 
| 7 7 | 
             
              option :state, desc: "filter by state (Up, Maintenance)"
         | 
| 8 | 
            +
              option :format, default: "table",
         | 
| 9 | 
            +
                enum: %w(table json yaml)
         | 
| 8 10 | 
             
              def list
         | 
| 9 11 | 
             
                resolve_zone
         | 
| 10 12 | 
             
                storage_pools = client.list_storage_pools(options)
         | 
| 11 13 | 
             
                if storage_pools.size < 1
         | 
| 12 14 | 
             
                  say "No storage pools found."
         | 
| 13 15 | 
             
                else
         | 
| 14 | 
            -
                   | 
| 15 | 
            -
                   | 
| 16 | 
            -
             | 
| 17 | 
            -
                   | 
| 18 | 
            -
             | 
| 19 | 
            -
                   | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                     | 
| 24 | 
            -
                     | 
| 25 | 
            -
                     | 
| 26 | 
            -
                    table << [
         | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
                      total | 
| 30 | 
            -
                       | 
| 31 | 
            -
                      storage_pool[' | 
| 32 | 
            -
             | 
| 16 | 
            +
                  case options[:format].to_sym
         | 
| 17 | 
            +
                  when :yaml
         | 
| 18 | 
            +
                    puts({storage_pools: storage_pools}.to_yaml)
         | 
| 19 | 
            +
                  when :json
         | 
| 20 | 
            +
                    puts JSON.pretty_generate(storage_pools: storage_pools)
         | 
| 21 | 
            +
                  else
         | 
| 22 | 
            +
                    storage_pools = filter_by(storage_pools, "state", options[:state]) if options[:state]
         | 
| 23 | 
            +
                    table = [%w(Name Pod State Zone)]
         | 
| 24 | 
            +
                    table[0] << "Size [GB]"
         | 
| 25 | 
            +
                    table[0] << "Used [GB]"
         | 
| 26 | 
            +
                    table[0] << "Used [%]"
         | 
| 27 | 
            +
                    table[0] << "Alocated [GB]"
         | 
| 28 | 
            +
                    table[0] << "Alocated [%]"
         | 
| 29 | 
            +
                    table[0] << "Type"
         | 
| 30 | 
            +
                    storage_pools.each do |storage_pool|
         | 
| 31 | 
            +
                      total = storage_pool['disksizetotal'] / 1024**3
         | 
| 32 | 
            +
                      used = (storage_pool['disksizeused'] / 1024**3) rescue 0
         | 
| 33 | 
            +
                      allocated = (storage_pool['disksizeallocated'] / 1024**3) rescue 0
         | 
| 34 | 
            +
                      table << [
         | 
| 35 | 
            +
                      	storage_pool['name'], storage_pool['podname'],
         | 
| 36 | 
            +
                        storage_pool['state'], storage_pool['zonename'],
         | 
| 37 | 
            +
                        total, used, (100.0 / total * used).round(0),
         | 
| 38 | 
            +
                        allocated, (100.0 / total * allocated).round(0),
         | 
| 39 | 
            +
                        storage_pool['type']
         | 
| 40 | 
            +
                      ]
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
                    print_table table
         | 
| 43 | 
            +
                    say "Total number of storage_pools: #{storage_pools.size}"
         | 
| 33 44 | 
             
                  end
         | 
| 34 | 
            -
                  print_table table
         | 
| 35 | 
            -
                  say "Total number of storage_pools: #{storage_pools.size}"
         | 
| 36 45 | 
             
                end
         | 
| 37 46 | 
             
              end
         | 
| 38 47 |  | 
| @@ -5,20 +5,29 @@ class SystemVm < CloudstackCli::Base | |
| 5 5 | 
             
              option :state, desc: "state of the system VM"
         | 
| 6 6 | 
             
              option :type, desc: "the system VM type.",
         | 
| 7 7 | 
             
                enum: %w(consoleproxy secondarystoragevm)
         | 
| 8 | 
            +
              option :format, default: "table",
         | 
| 9 | 
            +
                enum: %w(table json yaml)
         | 
| 8 10 | 
             
              def list
         | 
| 9 11 | 
             
                resolve_zone
         | 
| 10 12 | 
             
                vms = client.list_system_vms(options)
         | 
| 11 13 | 
             
                if vms.size < 1
         | 
| 12 14 | 
             
                  say "No system VM's found."
         | 
| 13 15 | 
             
                else
         | 
| 14 | 
            -
                   | 
| 15 | 
            -
                   | 
| 16 | 
            -
                     | 
| 17 | 
            -
             | 
| 18 | 
            -
                     | 
| 16 | 
            +
                  case options[:format].to_sym
         | 
| 17 | 
            +
                  when :yaml
         | 
| 18 | 
            +
                    puts({system_vms: vms}.to_yaml)
         | 
| 19 | 
            +
                  when :json
         | 
| 20 | 
            +
                    puts JSON.pretty_generate(system_vms: vms)
         | 
| 21 | 
            +
                  else
         | 
| 22 | 
            +
                    table = [%w(Name Zone State Type)]
         | 
| 23 | 
            +
                    vms.each do |vm|
         | 
| 24 | 
            +
                      table << [
         | 
| 25 | 
            +
                        vm['name'], vm['zonename'], vm['state'], vm['systemvmtype']
         | 
| 26 | 
            +
                      ]
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                    print_table table
         | 
| 29 | 
            +
                    say "Total number of system VM's: #{vms.size}"
         | 
| 19 30 | 
             
                  end
         | 
| 20 | 
            -
                  print_table table
         | 
| 21 | 
            -
                  say "Total number of system VM's: #{vms.size}"
         | 
| 22 31 | 
             
                end
         | 
| 23 32 | 
             
              end
         | 
| 24 33 |  | 
| @@ -6,6 +6,8 @@ class Template < CloudstackCli::Base | |
| 6 6 | 
             
              option :type,
         | 
| 7 7 | 
             
                enum: %w(featured self self-executable executable community all),
         | 
| 8 8 | 
             
                default: "featured"
         | 
| 9 | 
            +
              option :format, default: "table",
         | 
| 10 | 
            +
                enum: %w(table json yaml)
         | 
| 9 11 | 
             
              def list(type='featured')
         | 
| 10 12 | 
             
                resolve_project
         | 
| 11 13 | 
             
                resolve_zone
         | 
| @@ -14,19 +16,26 @@ class Template < CloudstackCli::Base | |
| 14 16 | 
             
                if templates.size < 1
         | 
| 15 17 | 
             
                  puts "No templates found."
         | 
| 16 18 | 
             
                else
         | 
| 17 | 
            -
                   | 
| 18 | 
            -
                   | 
| 19 | 
            -
                     | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
                       | 
| 26 | 
            -
             | 
| 19 | 
            +
                  case options[:format].to_sym
         | 
| 20 | 
            +
                  when :yaml
         | 
| 21 | 
            +
                    puts({templates: templates}.to_yaml)
         | 
| 22 | 
            +
                  when :json
         | 
| 23 | 
            +
                    puts JSON.pretty_generate(templates: templates)
         | 
| 24 | 
            +
                  else
         | 
| 25 | 
            +
                    table = [%w(Name Created Zone Featured Public Format)]
         | 
| 26 | 
            +
                    templates.each do |template|
         | 
| 27 | 
            +
                      table << [
         | 
| 28 | 
            +
                        template['name'],
         | 
| 29 | 
            +
                        Time.parse(template['created']).strftime("%F"),
         | 
| 30 | 
            +
                        template['zonename'],
         | 
| 31 | 
            +
                        template['isfeatured'],
         | 
| 32 | 
            +
                        template['ispublic'],
         | 
| 33 | 
            +
                        template['format']
         | 
| 34 | 
            +
                      ]
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                    print_table(table)
         | 
| 37 | 
            +
                    say "Total number of templates: #{templates.size}"
         | 
| 27 38 | 
             
                  end
         | 
| 28 | 
            -
                  print_table(table)
         | 
| 29 | 
            -
                  say "Total number of templates: #{templates.size}"
         | 
| 30 39 | 
             
                end
         | 
| 31 40 | 
             
              end
         | 
| 32 41 |  | 
| @@ -3,21 +3,30 @@ class User < CloudstackCli::Base | |
| 3 3 | 
             
              desc 'list', 'list users'
         | 
| 4 4 | 
             
              option :listall
         | 
| 5 5 | 
             
              option :account
         | 
| 6 | 
            +
              option :format, default: "table",
         | 
| 7 | 
            +
                enum: %w(table json yaml)
         | 
| 6 8 | 
             
              def list
         | 
| 7 9 | 
             
                resolve_account
         | 
| 8 10 | 
             
                users = client.list_users(options)
         | 
| 9 11 | 
             
                if users.size < 1
         | 
| 10 12 | 
             
                  say "No users found."
         | 
| 11 13 | 
             
                else
         | 
| 12 | 
            -
                   | 
| 13 | 
            -
                   | 
| 14 | 
            -
                     | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 14 | 
            +
                  case options[:format].to_sym
         | 
| 15 | 
            +
                  when :yaml
         | 
| 16 | 
            +
                    puts({users: users}.to_yaml)
         | 
| 17 | 
            +
                  when :json
         | 
| 18 | 
            +
                    puts JSON.pretty_generate(users: users)
         | 
| 19 | 
            +
                  else
         | 
| 20 | 
            +
                    table = [["Account", "Type", "Name", "Email", "State", "Domain"]]
         | 
| 21 | 
            +
                    users.each do |user|
         | 
| 22 | 
            +
                      table << [
         | 
| 23 | 
            +
                        user['account'], Account::TYPES[user['accounttype']], "#{user['firstname']} #{user['lastname']}",
         | 
| 24 | 
            +
                        user['email'], user['state'], user['domain']
         | 
| 25 | 
            +
                      ]
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                    print_table table
         | 
| 28 | 
            +
                    say "Total number of users: #{users.size}"
         | 
| 18 29 | 
             
                  end
         | 
| 19 | 
            -
                  print_table table
         | 
| 20 | 
            -
                  say "Total number of users: #{users.size}"
         | 
| 21 30 | 
             
                end
         | 
| 22 31 | 
             
              end
         | 
| 23 32 |  | 
| @@ -19,6 +19,7 @@ class VirtualMachine < CloudstackCli::Base | |
| 19 19 | 
             
              option :format, default: "table",
         | 
| 20 20 | 
             
                enum: %w(table json yaml)
         | 
| 21 21 | 
             
              def list
         | 
| 22 | 
            +
                add_filters_to_options("listVirtualMachines") if options[:filter]
         | 
| 22 23 | 
             
                resolve_account
         | 
| 23 24 | 
             
                resolve_project
         | 
| 24 25 | 
             
                resolve_zone
         | 
| @@ -269,9 +270,9 @@ class VirtualMachine < CloudstackCli::Base | |
| 269 270 | 
             
                def print_virtual_machines(virtual_machines)
         | 
| 270 271 | 
             
                  case options[:format].to_sym
         | 
| 271 272 | 
             
                  when :yaml
         | 
| 272 | 
            -
                    puts({ | 
| 273 | 
            +
                    puts({virtual_machines: virtual_machines}.to_yaml)
         | 
| 273 274 | 
             
                  when :json
         | 
| 274 | 
            -
                     | 
| 275 | 
            +
                    puts JSON.pretty_generate(virtual_machines: virtual_machines)
         | 
| 275 276 | 
             
                  else
         | 
| 276 277 | 
             
                    with_i_name = virtual_machines.first['instancename']
         | 
| 277 278 | 
             
                    with_h_name = virtual_machines.first['hostname']
         | 
| @@ -7,30 +7,43 @@ class Volume < CloudstackCli::Base | |
| 7 7 | 
             
              option :keyword, desc: 'list by keyword'
         | 
| 8 8 | 
             
              option :name, desc: 'name of the disk volume'
         | 
| 9 9 | 
             
              option :type, desc: 'type of disk volume (ROOT or DATADISK)'
         | 
| 10 | 
            +
              option :filter, type: :hash,
         | 
| 11 | 
            +
                desc: "filter objects based on arrtibutes: (attr1:regex attr2:regex ...)"
         | 
| 12 | 
            +
              option :format, default: "table",
         | 
| 13 | 
            +
                enum: %w(table json yaml)
         | 
| 10 14 | 
             
              def list
         | 
| 11 15 | 
             
                resolve_project
         | 
| 12 16 | 
             
                resolve_account
         | 
| 13 17 | 
             
                resolve_zone
         | 
| 18 | 
            +
                add_filters_to_options("listVolumes") if options[:filter]
         | 
| 14 19 | 
             
                volumes = client.list_volumes(options)
         | 
| 20 | 
            +
                volumes = filter_objects(volumes) if options[:filter]
         | 
| 15 21 | 
             
                if volumes.size < 1
         | 
| 16 22 | 
             
                  say "No volumes found."
         | 
| 17 23 | 
             
                else
         | 
| 18 | 
            -
                   | 
| 19 | 
            -
                   | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
                       | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 24 | 
            +
                  case options[:format].to_sym
         | 
| 25 | 
            +
                  when :yaml
         | 
| 26 | 
            +
                    puts({volumes: volumes}.to_yaml)
         | 
| 27 | 
            +
                  when :json
         | 
| 28 | 
            +
                    puts JSON.pretty_generate(volumes: volumes)
         | 
| 29 | 
            +
                  else
         | 
| 30 | 
            +
                    table = [%w(Name Type Size VM Storage Offeringname Zone Status)]
         | 
| 31 | 
            +
                    table.first << 'Project' if options[:project]
         | 
| 32 | 
            +
                    volumes.each do |volume|
         | 
| 33 | 
            +
                      table << [
         | 
| 34 | 
            +
                        volume['name'], volume['type'],
         | 
| 35 | 
            +
                        (volume['size'] / 1024**3).to_s + 'GB',
         | 
| 36 | 
            +
                        volume['vmname'],
         | 
| 37 | 
            +
                        volume['storage'],
         | 
| 38 | 
            +
                        volume['diskofferingname'],
         | 
| 39 | 
            +
                        volume['zonename'],
         | 
| 40 | 
            +
                        volume['state']
         | 
| 41 | 
            +
                      ]
         | 
| 42 | 
            +
                      table.last << volume['project'] if options[:project]
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                    print_table(table)
         | 
| 45 | 
            +
                    say "Total number of volumes: #{volumes.size}"
         | 
| 31 46 | 
             
                  end
         | 
| 32 | 
            -
                  print_table(table)
         | 
| 33 | 
            -
                  say "Total number of volumes: #{volumes.size}"
         | 
| 34 47 | 
             
                end
         | 
| 35 48 | 
             
              end
         | 
| 36 49 |  | 
| @@ -1,21 +1,30 @@ | |
| 1 1 | 
             
            class Zone < CloudstackCli::Base
         | 
| 2 2 |  | 
| 3 3 | 
             
              desc "list", "list zones"
         | 
| 4 | 
            +
              option :format, default: "table",
         | 
| 5 | 
            +
                enum: %w(table json yaml)
         | 
| 4 6 | 
             
              def list
         | 
| 5 7 | 
             
                zones = client.list_zones
         | 
| 6 8 | 
             
                if zones.size < 1
         | 
| 7 9 | 
             
                  puts "No projects found"
         | 
| 8 10 | 
             
                else
         | 
| 9 | 
            -
                   | 
| 10 | 
            -
                   | 
| 11 | 
            -
                     | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
                    ]
         | 
| 11 | 
            +
                  case options[:format].to_sym
         | 
| 12 | 
            +
                  when :yaml
         | 
| 13 | 
            +
                    puts({zones: zones}.to_yaml)
         | 
| 14 | 
            +
                  when :json
         | 
| 15 | 
            +
                    puts JSON.pretty_generate(zones: zones)
         | 
| 16 | 
            +
                  else
         | 
| 17 | 
            +
                    table = [%w(Name Network-Type Description)]
         | 
| 18 | 
            +
                    zones.each do |zone|
         | 
| 19 | 
            +
                      table << [
         | 
| 20 | 
            +
                        zone['name'],
         | 
| 21 | 
            +
                        zone['networktype'],
         | 
| 22 | 
            +
                        zone['description']
         | 
| 23 | 
            +
                      ]
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                    print_table(table)
         | 
| 16 26 | 
             
                  end
         | 
| 17 27 | 
             
                end
         | 
| 18 | 
            -
                print_table(table)
         | 
| 19 28 | 
             
              end
         | 
| 20 29 |  | 
| 21 30 | 
             
            end
         |