cloudstack-cli 0.3.10 → 0.3.11

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.
Files changed (31) hide show
  1. data/Gemfile.lock +1 -1
  2. data/lib/cloudstack-cli/cli.rb +35 -29
  3. data/lib/cloudstack-cli/commands/account.rb +1 -1
  4. data/lib/cloudstack-cli/commands/capacity.rb +1 -1
  5. data/lib/cloudstack-cli/commands/cluster.rb +1 -1
  6. data/lib/cloudstack-cli/commands/disk_offering.rb +1 -1
  7. data/lib/cloudstack-cli/commands/domain.rb +1 -1
  8. data/lib/cloudstack-cli/commands/host.rb +1 -1
  9. data/lib/cloudstack-cli/commands/ip_address.rb +3 -3
  10. data/lib/cloudstack-cli/commands/iso.rb +1 -1
  11. data/lib/cloudstack-cli/commands/job.rb +2 -2
  12. data/lib/cloudstack-cli/commands/load_balancer.rb +3 -3
  13. data/lib/cloudstack-cli/commands/network.rb +42 -42
  14. data/lib/cloudstack-cli/commands/offering.rb +3 -3
  15. data/lib/cloudstack-cli/commands/physical_network.rb +1 -1
  16. data/lib/cloudstack-cli/commands/pod.rb +1 -1
  17. data/lib/cloudstack-cli/commands/port_rule.rb +2 -2
  18. data/lib/cloudstack-cli/commands/project.rb +2 -2
  19. data/lib/cloudstack-cli/commands/router.rb +5 -5
  20. data/lib/cloudstack-cli/commands/server.rb +9 -8
  21. data/lib/cloudstack-cli/commands/snapshot.rb +1 -1
  22. data/lib/cloudstack-cli/commands/ssh_key_pairs.rb +4 -3
  23. data/lib/cloudstack-cli/commands/stack.rb +1 -1
  24. data/lib/cloudstack-cli/commands/template.rb +1 -1
  25. data/lib/cloudstack-cli/commands/user.rb +1 -1
  26. data/lib/cloudstack-cli/commands/volume.rb +1 -1
  27. data/lib/cloudstack-cli/commands/zone.rb +1 -1
  28. data/lib/cloudstack-cli/version.rb +1 -1
  29. data/lib/cloudstack-client/commands/server.rb +10 -0
  30. data/lib/cloudstack-client/version.rb +1 -1
  31. metadata +1 -1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cloudstack-cli (0.3.9)
4
+ cloudstack-cli (0.3.11)
5
5
  thor (~> 0.18.1)
6
6
 
7
7
  GEM
@@ -3,7 +3,7 @@ module CloudstackCli
3
3
  include Thor::Actions
4
4
 
5
5
  package_name "cloudstack-cli"
6
- map %w(-v --version) => :version
6
+ map %w(-v --version) => :version
7
7
 
8
8
  class_option :config,
9
9
  default: File.join(Dir.home, '.cloudstack-cli.yml'),
@@ -68,10 +68,15 @@ module CloudstackCli
68
68
  error "Can't load configuration from file #{config_file}."
69
69
  exit 1
70
70
  end
71
- say "cloudstack-cli environments besides the default:", :yellow
72
- config.each_key {|key| puts key unless key.class == Symbol }
71
+ table = [%w(Name URL)]
72
+ table << ["default", config[:url]]
73
+ config.each_key do |key|
74
+ table << [key, config[key][:url]] unless key.class == Symbol
75
+ end
76
+ print_table table
73
77
  end
74
- end
78
+ end
79
+ map :envs => :environments
75
80
 
76
81
  desc "command COMMAND [arg1=val1 arg2=val2...]", "run a custom api command"
77
82
  def command(command, *args)
@@ -89,78 +94,79 @@ module CloudstackCli
89
94
  end
90
95
 
91
96
  desc "zone SUBCOMMAND ...ARGS", "Manage zones"
92
- subcommand "zone", Zone
97
+ subcommand :zone, Zone
93
98
 
94
99
  desc "pod SUBCOMMAND ...ARGS", "List pods"
95
- subcommand "pod", Pod
100
+ subcommand :pod, Pod
96
101
 
97
102
  desc "cluster SUBCOMMAND ...ARGS", "List clusters"
98
- subcommand "cluster", Cluster
103
+ subcommand :cluster, Cluster
99
104
 
100
105
  desc "host SUBCOMMAND ...ARGS", "List hosts"
101
- subcommand "host", Host
106
+ subcommand :host, Host
102
107
 
103
108
  desc "project SUBCOMMAND ...ARGS", "Manage servers"
104
- subcommand "project", Project
109
+ subcommand :project, Project
105
110
 
106
111
  desc "server SUBCOMMAND ...ARGS", "Manage servers"
107
- subcommand "server", Server
112
+ subcommand :server, Server
108
113
 
109
114
  desc "offering SUBCOMMAND ...ARGS", "Manage offerings"
110
- subcommand "offering", Offering
115
+ subcommand :offering, Offering
111
116
 
112
117
  desc "disk_offering SUBCOMMAND ...ARGS", "Manage disk offerings"
113
- subcommand "disk_offering", DiskOffering
118
+ subcommand :disk_offering, DiskOffering
114
119
 
115
120
  desc "network SUBCOMMAND ...ARGS", "Manage networks"
116
- subcommand "network", Network
121
+ subcommand :network, Network
122
+ map 'networks' => 'network'
117
123
 
118
124
  desc "physical_network SUBCOMMAND ...ARGS", "Manage physical networks"
119
- subcommand "physical_network", PhysicalNetwork
125
+ subcommand :physical_network, PhysicalNetwork
120
126
 
121
127
  desc "load_balancer SUBCOMMAND ...ARGS", "Manage load balancing rules"
122
- subcommand "load_balancer", LoadBalancer
128
+ subcommand :load_balancer, LoadBalancer
123
129
 
124
130
  desc "template SUBCOMMAND ...ARGS", "Manage templates"
125
- subcommand "template", Template
131
+ subcommand :template, Template
126
132
 
127
133
  desc "iso SUBCOMMAND ...ARGS", "Manage iso's"
128
- subcommand "iso", Iso
134
+ subcommand :iso, Iso
129
135
 
130
136
  desc "router SUBCOMMAND ...ARGS", "Manage virtual routers"
131
- subcommand "router", Router
137
+ subcommand :router, Router
132
138
 
133
139
  desc "volume SUBCOMMAND ...ARGS", "Manage volumes"
134
- subcommand "volume", Volume
140
+ subcommand :volume, Volume
135
141
 
136
142
  desc "snapshot SUBCOMMAND ...ARGS", "Manage snapshots"
137
- subcommand "snapshot", Snapshot
143
+ subcommand :snapshot, Snapshot
138
144
 
139
145
  desc "stack SUBCOMMAND ...ARGS", "Manage stacks"
140
- subcommand "stack", Stack
146
+ subcommand :stack, Stack
141
147
 
142
148
  desc "account SUBCOMMAND ...ARGS", "Manage accounts"
143
- subcommand "account", Account
149
+ subcommand :account, Account
144
150
 
145
151
  desc "user SUBCOMMAND ...ARGS", "Manage users"
146
- subcommand "user", User
152
+ subcommand :user, User
147
153
 
148
154
  desc "domain SUBCOMMAND ...ARGS", "Manage domains"
149
- subcommand "domain", Domain
155
+ subcommand :domain, Domain
150
156
 
151
157
  desc "ip_address SUBCOMMAND ...ARGS", "Manage ip addresses"
152
- subcommand "ip_address", IpAddress
158
+ subcommand :ip_address, IpAddress
153
159
 
154
160
  desc "capacity SUBCOMMAND ...ARGS", "Lists all the system wide capacities"
155
- subcommand "capacity", Capacity
161
+ subcommand :capacity, Capacity
156
162
 
157
163
  desc "port_rule SUBCOMMAND ...ARGS", "Manage portforwarding rules"
158
- subcommand "port_rule", PortRule
164
+ subcommand :port_rule, PortRule
159
165
 
160
166
  desc "job SUBCOMMAND ...ARGS", "Display async jobs"
161
- subcommand "job", Job
167
+ subcommand :job, Job
162
168
 
163
169
  desc "ssh_key_pair SUBCOMMAND ...ARGS", "Manage ssh key pairs"
164
- subcommand "ssh_key_pair", SshKeyPair
170
+ subcommand :ssh_key_pair, SshKeyPair
165
171
  end
166
172
  end
@@ -6,7 +6,7 @@ class Account < CloudstackCli::Base
6
6
  2 => 'admin'
7
7
  }
8
8
 
9
- desc 'list [NAME]', 'list accounts'
9
+ desc 'account list [NAME]', 'list accounts (by name)'
10
10
  def list(name = nil)
11
11
  accounts = client.list_accounts({name: name})
12
12
  if accounts.size < 1
@@ -12,7 +12,7 @@ class Capacity < CloudstackCli::Base
12
12
  9 => {name: "Local Storage", unit: "TB", divider: 1024.0**4}
13
13
  }
14
14
 
15
- desc "list", "list system capacity"
15
+ desc "capacity list", "list system capacity"
16
16
  option :zone
17
17
  def list
18
18
  capacities = client.list_capacity
@@ -1,6 +1,6 @@
1
1
  class Cluster < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list clusters'
3
+ desc 'cluster list', 'list clusters'
4
4
  def list
5
5
  clusters = client.list_clusters(options)
6
6
  if clusters.size < 1
@@ -1,6 +1,6 @@
1
1
  class DiskOffering < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list disk offerings'
3
+ desc 'disk_offering list', 'list disk offerings'
4
4
  option :domain
5
5
  def list
6
6
  offerings = client.list_disk_offerings(options[:domain])
@@ -1,6 +1,6 @@
1
1
  class Domain < CloudstackCli::Base
2
2
 
3
- desc 'list [NAME]', 'list domains'
3
+ desc 'domain list [NAME]', 'list domains'
4
4
  def list(name = nil)
5
5
  domains = client.list_domains(name)
6
6
  if domains.size < 1
@@ -1,6 +1,6 @@
1
1
  class Host < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list hosts'
3
+ desc 'host list', 'list hosts'
4
4
  option :zone
5
5
  def list
6
6
  hosts = client.list_hosts(options)
@@ -1,11 +1,11 @@
1
1
  class IpAddress < CloudstackCli::Base
2
2
 
3
- desc "release ID", "release public IP address"
3
+ desc "ip_address release ID", "release public IP address"
4
4
  def release(id)
5
5
  say("OK", :green) if client.disassociate_ip_address(id)
6
6
  end
7
7
 
8
- desc "assign NETWORK", "assign a public IP address"
8
+ desc "ip_address assign NETWORK", "assign a public IP address"
9
9
  option :project
10
10
  def assign(network)
11
11
  project = find_project if options[:project]
@@ -18,7 +18,7 @@ class IpAddress < CloudstackCli::Base
18
18
  say ip['ipaddress']
19
19
  end
20
20
 
21
- desc "list", "list public IP address"
21
+ desc "ip_address list", "list public IP address"
22
22
  option :project
23
23
  option :account
24
24
  option :listall
@@ -1,6 +1,6 @@
1
1
  class Iso < CloudstackCli::Base
2
2
 
3
- desc 'list [TYPE]', "list iso's by type [featured|self|self-executable|executable|community], default is featured"
3
+ desc 'iso list [TYPE]', "list iso's by type [featured|self|self-executable|executable|community], default is featured"
4
4
  option :project
5
5
  option :zone
6
6
  option :account
@@ -1,6 +1,6 @@
1
1
  class Job < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list async jobs'
3
+ desc 'job list', 'list async jobs'
4
4
  def list
5
5
  jobs = client.list_jobs()
6
6
  if jobs.size < 1
@@ -14,7 +14,7 @@ class Job < CloudstackCli::Base
14
14
  end
15
15
  end
16
16
 
17
- desc 'query ID', 'query async job'
17
+ desc 'job query ID', 'query async job'
18
18
  def query(id)
19
19
  job = client.query_job(id)
20
20
  job.each do |key, value|
@@ -1,6 +1,6 @@
1
1
  class LoadBalancer < CloudstackCli::Base
2
2
 
3
- desc "list", "list load balancer rules"
3
+ desc "load_balancer list", "list load balancer rules"
4
4
  option :project
5
5
  def list
6
6
  project = find_project if options[:project]
@@ -18,7 +18,7 @@ class LoadBalancer < CloudstackCli::Base
18
18
  end
19
19
  end
20
20
 
21
- desc "create NAME", "create load balancer rule"
21
+ desc "load_balancer create NAME", "create load balancer rule"
22
22
  option :project
23
23
  option :ip, required: true
24
24
  option :public_port, required: true
@@ -36,7 +36,7 @@ class LoadBalancer < CloudstackCli::Base
36
36
  say "OK!", :green
37
37
  end
38
38
 
39
- desc "add NAME", "assign servers to balancer rule"
39
+ desc "load_balancer add NAME", "assign servers to balancer rule"
40
40
  option :servers, required: true, type: :array, description: 'server names'
41
41
  def add(name)
42
42
  say "Add #{names.join(', ')} to rule #{id}...", :yellow
@@ -1,6 +1,44 @@
1
1
  class Network < CloudstackCli::Base
2
2
 
3
- desc "default", "get the default network"
3
+ desc "network list", "list networks"
4
+ option :project
5
+ option :account
6
+ option :showid, type: :boolean
7
+ option :isdefault, type: :boolean
8
+ def list
9
+ project = find_project if options[:project]
10
+ networks = []
11
+ if project
12
+ networks = client.list_networks(project_id: project['id'])
13
+ elsif options[:account]
14
+ networks = client.list_networks(account: options[:account])
15
+ else
16
+ networks = client.list_networks(isdefault: options[:isdefault])
17
+ networks += client.list_networks(project_id: -1, isdefault: options[:isdefault])
18
+ end
19
+
20
+ if networks.size < 1
21
+ puts "No networks found."
22
+ else
23
+ table = [["Name", "Displaytext", "Account", "Project", "Domain", "State", "Type"]]
24
+ table[0] << "ID" if options[:showid]
25
+ networks.each do |network|
26
+ table << [
27
+ network["name"],
28
+ network["displaytext"],
29
+ network["account"],
30
+ network["project"],
31
+ network["domain"],
32
+ network["state"],
33
+ network["type"]
34
+ ]
35
+ table[-1] << network["id"] if options[:showid]
36
+ end
37
+ print_table table
38
+ end
39
+ end
40
+
41
+ desc "network default", "get the default network"
4
42
  option :zone
5
43
  def default
6
44
  network = client.get_default_network(options[:zone])
@@ -20,7 +58,7 @@ class Network < CloudstackCli::Base
20
58
  end
21
59
  end
22
60
 
23
- desc "show NAME", "show detailed infos about a network"
61
+ desc "network show NAME", "show detailed infos about a network"
24
62
  option :project
25
63
  def show(name)
26
64
  if options[:project]
@@ -41,45 +79,7 @@ class Network < CloudstackCli::Base
41
79
  end
42
80
  end
43
81
 
44
- desc "list", "list networks"
45
- option :project
46
- option :account
47
- option :showid, type: :boolean
48
- option :isdefault, type: :boolean
49
- def list
50
- project = find_project if options[:project]
51
- networks = []
52
- if project
53
- networks = client.list_networks(project_id: project['id'])
54
- elsif options[:account]
55
- networks = client.list_networks(account: options[:account])
56
- else
57
- networks = client.list_networks(isdefault: options[:isdefault])
58
- networks += client.list_networks(project_id: -1, isdefault: options[:isdefault])
59
- end
60
-
61
- if networks.size < 1
62
- puts "No networks found."
63
- else
64
- table = [["Name", "Displaytext", "Account", "Project", "Domain", "State", "Type"]]
65
- table[0] << "ID" if options[:showid]
66
- networks.each do |network|
67
- table << [
68
- network["name"],
69
- network["displaytext"],
70
- network["account"],
71
- network["project"],
72
- network["domain"],
73
- network["state"],
74
- network["type"]
75
- ]
76
- table[-1] << network["id"] if options[:showid]
77
- end
78
- print_table table
79
- end
80
- end
81
-
82
- desc "restart NAME", "restart network"
82
+ desc "network restart NAME", "restart network"
83
83
  option :cleanup, type: :boolean, default: true
84
84
  def restart(name)
85
85
  network = client.get_network(name)
@@ -93,7 +93,7 @@ class Network < CloudstackCli::Base
93
93
  end
94
94
  end
95
95
 
96
- desc "delete NAME", "delete network"
96
+ desc "network delete NAME", "delete network"
97
97
  def delete(name)
98
98
  network = client.get_network(name)
99
99
  network = client.get_network(name, -1) unless network
@@ -1,6 +1,6 @@
1
1
  class Offering < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list compute offerings'
3
+ desc 'offering list', 'list compute offerings'
4
4
  option :domain
5
5
  def list
6
6
  offerings = client.list_service_offerings(options[:domain])
@@ -20,7 +20,7 @@ class Offering < CloudstackCli::Base
20
20
  end
21
21
  end
22
22
 
23
- desc 'create NAME', 'create offering'
23
+ desc 'offering create NAME', 'create offering'
24
24
  option :cpunumber, required: true
25
25
  option :cpuspeed, required: true
26
26
  option :displaytext, required: true
@@ -39,7 +39,7 @@ class Offering < CloudstackCli::Base
39
39
  end
40
40
 
41
41
 
42
- desc 'sort', 'sort by cpu and memory grouped by domain'
42
+ desc 'offering sort', 'sort by cpu and memory grouped by domain'
43
43
  def sort
44
44
  offerings = client.list_service_offerings(options[:domain])
45
45
  sortkey = -1
@@ -1,6 +1,6 @@
1
1
  class PhysicalNetwork < CloudstackCli::Base
2
2
 
3
- desc "list", "list physical networks"
3
+ desc "physical_network list", "list physical networks"
4
4
  option :project
5
5
  def list
6
6
  project = find_project if options[:project]
@@ -1,6 +1,6 @@
1
1
  class Pod < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list pods'
3
+ desc 'pod list', 'list pods'
4
4
  def list
5
5
  pods = client.list_pods(options)
6
6
  if pods.size < 1
@@ -1,6 +1,6 @@
1
1
  class PortRule < CloudstackCli::Base
2
2
 
3
- desc "create SERVER", "create portforwarding rules"
3
+ desc "port_rule create SERVER", "create portforwarding rules"
4
4
  option :rules, type: :array,
5
5
  required: true,
6
6
  desc: "Port Forwarding Rules [public_ip]:port ...",
@@ -35,7 +35,7 @@ class PortRule < CloudstackCli::Base
35
35
  end
36
36
  end
37
37
 
38
- desc "list", "list portforwarding rules"
38
+ desc "port_rule list", "list portforwarding rules"
39
39
  option :project
40
40
  def list
41
41
  project_id = find_project['id'] if options[:project]
@@ -1,6 +1,6 @@
1
1
  class Project < CloudstackCli::Base
2
2
 
3
- desc "show NAME", "show detailed infos about a project"
3
+ desc "project show NAME", "show detailed infos about a project"
4
4
  option :project
5
5
  def show(name)
6
6
  unless project = client.get_project(name)
@@ -13,7 +13,7 @@ class Project < CloudstackCli::Base
13
13
  end
14
14
  end
15
15
 
16
- desc "list", "list projects"
16
+ desc "project list", "list projects"
17
17
  def list
18
18
  projects = client.list_projects
19
19
  if projects.size < 1
@@ -1,6 +1,6 @@
1
1
  class Router < CloudstackCli::Base
2
2
 
3
- desc "list", "list virtual routers"
3
+ desc "router list", "list virtual routers"
4
4
  option :project
5
5
  option :account
6
6
  option :zone
@@ -64,7 +64,7 @@ class Router < CloudstackCli::Base
64
64
  end
65
65
  end
66
66
 
67
- desc "stop NAME [NAME2 ..]", "stop virtual router(s)"
67
+ desc "router stop NAME [NAME2 ..]", "stop virtual router(s)"
68
68
  option :force, description: "stop without asking", type: :boolean, aliases: '-f'
69
69
  def stop(*names)
70
70
  routers = names.map {|name| get_router(name)}
@@ -77,7 +77,7 @@ class Router < CloudstackCli::Base
77
77
  watch_jobs(jobs)
78
78
  end
79
79
 
80
- desc "start NAME [NAME2 ..]", "start virtual router(s)"
80
+ desc "router start NAME [NAME2 ..]", "start virtual router(s)"
81
81
  option :force, description: "start without asking", type: :boolean, aliases: '-f'
82
82
  def start(*names)
83
83
  routers = names.map {|name| get_router(name)}
@@ -90,7 +90,7 @@ class Router < CloudstackCli::Base
90
90
  watch_jobs(jobs)
91
91
  end
92
92
 
93
- desc "start NAME [NAME2 ..]", "restart virtual router(s) (stop and start)"
93
+ desc "router start NAME [NAME2 ..]", "restart virtual router(s) (stop and start)"
94
94
  option :force, description: "restart without asking", type: :boolean, aliases: '-f'
95
95
  def restart(*names)
96
96
  routers = names.map {|name| get_router(name)}
@@ -111,7 +111,7 @@ class Router < CloudstackCli::Base
111
111
  say "Finished.", :green
112
112
  end
113
113
 
114
- desc "destroy NAME [NAME2 ..]", "destroy virtual router(s)"
114
+ desc "router destroy NAME [NAME2 ..]", "destroy virtual router(s)"
115
115
  option :force, description: "destroy without asking", type: :boolean, aliases: '-f'
116
116
  def destroy(*names)
117
117
  routers = names.map {|name| get_router(name)}
@@ -1,8 +1,9 @@
1
1
  class Server < CloudstackCli::Base
2
2
 
3
- desc "list", "list servers"
3
+ desc "server list", "list servers"
4
4
  option :project
5
5
  option :account
6
+ option :zone
6
7
  def list
7
8
  if options[:project]
8
9
  if options[:project].downcase == "all"
@@ -31,7 +32,7 @@ class Server < CloudstackCli::Base
31
32
  end
32
33
  end
33
34
 
34
- desc "show NAME", "show detailed infos about a server"
35
+ desc "server show NAME", "show detailed infos about a server"
35
36
  option :project
36
37
  def show(name)
37
38
  if options[:project]
@@ -52,7 +53,7 @@ class Server < CloudstackCli::Base
52
53
  end
53
54
  end
54
55
 
55
- desc "create NAME [NAME2 ...]", "create server(s)"
56
+ desc "server create NAME [NAME2 ...]", "create server(s)"
56
57
  option :template, aliases: '-t', desc: "name of the template"
57
58
  option :iso, desc: "name of the iso", desc: "name of the iso template"
58
59
  option :offering, aliases: '-o', required: true, desc: "computing offering name"
@@ -106,7 +107,7 @@ class Server < CloudstackCli::Base
106
107
  say "Finished.", :green
107
108
  end
108
109
 
109
- desc "destroy NAME [NAME2 ..]", "destroy server(s)"
110
+ desc "server destroy NAME [NAME2 ..]", "destroy server(s)"
110
111
  option :project
111
112
  option :force, description: "destroy without asking", type: :boolean, aliases: '-f'
112
113
  def destroy(*names)
@@ -126,24 +127,24 @@ class Server < CloudstackCli::Base
126
127
  end
127
128
  end
128
129
 
129
- desc "bootstrap", "interactive creation of a server with network access"
130
+ desc "server bootstrap", "interactive creation of a server with network access"
130
131
  def bootstrap
131
132
  bootstrap_server_interactive
132
133
  end
133
134
 
134
- desc "stop NAME", "stop a server"
135
+ desc "server stop NAME", "stop a server"
135
136
  def stop(name)
136
137
  client.stop_server(name)
137
138
  puts
138
139
  end
139
140
 
140
- desc "start NAME", "start a server"
141
+ desc "server start NAME", "start a server"
141
142
  def start(name)
142
143
  client.start_server(name)
143
144
  puts
144
145
  end
145
146
 
146
- desc "reboot NAME", "reboot a server"
147
+ desc "server reboot NAME", "reboot a server"
147
148
  def restart(name)
148
149
  client.reboot_server(name)
149
150
  puts
@@ -1,6 +1,6 @@
1
1
  class Snapshot < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list snapshots'
3
+ desc 'snapshot list', 'list snapshots'
4
4
  option :account
5
5
  option :project
6
6
  option :domain
@@ -1,10 +1,11 @@
1
1
  class SshKeyPair < CloudstackCli::Base
2
2
 
3
- desc 'list', 'list ssh key pairs'
3
+ desc "ssh_key_pair list", 'list ssh key pairs'
4
4
  option :listall
5
5
  option :account
6
6
  option :project
7
7
  def list
8
+ puts self.methods
8
9
  pairs = client.list_ssh_key_pairs(options)
9
10
  if pairs.size < 1
10
11
  say "No ssh key pairs found."
@@ -17,7 +18,7 @@ class SshKeyPair < CloudstackCli::Base
17
18
  end
18
19
  end
19
20
 
20
- desc 'create NAME', 'create ssh key pair'
21
+ desc 'ssh_key_pair create NAME', 'create ssh key pair'
21
22
  option :account
22
23
  option :project
23
24
  option :public_key
@@ -29,7 +30,7 @@ class SshKeyPair < CloudstackCli::Base
29
30
  say pair['privatekey']
30
31
  end
31
32
 
32
- desc 'delete NAME', 'delete ssh key pair'
33
+ desc 'ssh_key_pair delete NAME', 'delete ssh key pair'
33
34
  option :account
34
35
  option :project
35
36
  option :force, aliases: '-f', desc: "delete without asking"
@@ -1,6 +1,6 @@
1
1
  class Stack < CloudstackCli::Base
2
2
 
3
- desc "create STACKFILE", "create a stack of servers"
3
+ desc "stack create STACKFILE", "create a stack of servers"
4
4
  def create(stackfile)
5
5
  stack = parse_stackfile(stackfile)
6
6
  say "Create stack #{stack["name"]}...", :green
@@ -1,6 +1,6 @@
1
1
  class Template < CloudstackCli::Base
2
2
 
3
- desc 'list [TYPE]', 'list templates by type [featured|self|self-executable|executable|community], default is featured'
3
+ desc 'template list [TYPE]', 'list templates by type [featured|self|self-executable|executable|community], default is featured'
4
4
  option :project
5
5
  option :zone
6
6
  def list(type='featured')
@@ -6,7 +6,7 @@ class User < CloudstackCli::Base
6
6
  2 => 'admin'
7
7
  }
8
8
 
9
- desc 'list', 'list async jobs'
9
+ desc 'user list', 'list users'
10
10
  option :listall
11
11
  option :account
12
12
  def list
@@ -1,6 +1,6 @@
1
1
  class Volume < CloudstackCli::Base
2
2
 
3
- desc "list", "list networks"
3
+ desc "volume list", "list volumes"
4
4
  option :project
5
5
  def list
6
6
  projectid = find_project['id'] if options[:project]
@@ -1,6 +1,6 @@
1
1
  class Zone < CloudstackCli::Base
2
2
 
3
- desc "list", "list zones"
3
+ desc "zone list", "list zones"
4
4
  def list
5
5
  zones = client.list_zones
6
6
  if zones.size < 1
@@ -1,3 +1,3 @@
1
1
  module CloudstackCli
2
- VERSION = "0.3.10"
2
+ VERSION = "0.3.11"
3
3
  end
@@ -93,6 +93,16 @@ module CloudstackClient
93
93
  'listAll' => true
94
94
  }
95
95
  params['projectid'] = options[:project_id] if options[:project_id]
96
+
97
+ if options[:zone]
98
+ zone = get_zone(options[:zone])
99
+ unless zone
100
+ puts "Error: Zone #{options[:zone]} not found"
101
+ exit 1
102
+ end
103
+ params['zoneid'] = zone['id']
104
+ end
105
+
96
106
  if options[:account]
97
107
  if account = list_accounts({name: options[:account]}).first
98
108
  params['domainid'] = account["domainid"]
@@ -1,3 +1,3 @@
1
1
  module CloudstackClient
2
- VERSION = "0.2.8"
2
+ VERSION = "0.2.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudstack-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
4
+ version: 0.3.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: