cloudstack-cli 0.3.10 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
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: