cloudstack-cli 1.5.2 → 1.5.3
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 +3 -3
- data/README.md +11 -11
- data/lib/cloudstack-cli/base.rb +4 -3
- data/lib/cloudstack-cli/commands/virtual_machine.rb +23 -32
- data/lib/cloudstack-cli/commands/volume.rb +4 -2
- data/lib/cloudstack-cli/helper.rb +1 -1
- data/lib/cloudstack-cli/option_resolver.rb +12 -5
- data/lib/cloudstack-cli/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b75da05246b3ab3ac85f5ca8e93a28db01f8968
|
4
|
+
data.tar.gz: fc2d98e9c509876350509db6da5b5e7ab3b900b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 573c55dfed55ed68409424ef04562a9cd0dca835d23a458ce031c3f5fc0653fc87326f05cfd45c18e76ccbdb409dba6a90a1a5098f4c779ff81065514d50c804
|
7
|
+
data.tar.gz: 22dd3887d463b7b3e08792b1396ec08002ba65bf1a94d9bec2090f72776a64a6b03630cd4dc6c5dd363281d195550cceb991e1677c11b2bf6fe02935c2e6a982
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../cloudstack_client/
|
3
3
|
specs:
|
4
|
-
cloudstack_client (1.4.
|
4
|
+
cloudstack_client (1.4.1)
|
5
5
|
|
6
6
|
PATH
|
7
7
|
remote: .
|
8
8
|
specs:
|
9
|
-
cloudstack-cli (1.5.
|
9
|
+
cloudstack-cli (1.5.3)
|
10
10
|
cloudstack_client (~> 1.4)
|
11
11
|
thor (~> 0.19)
|
12
12
|
|
@@ -25,4 +25,4 @@ DEPENDENCIES
|
|
25
25
|
rake (~> 11.1)
|
26
26
|
|
27
27
|
BUNDLED WITH
|
28
|
-
1.
|
28
|
+
1.12.0
|
data/README.md
CHANGED
@@ -121,24 +121,23 @@ CloudStack CLI does support stack files in YAML or JSON.
|
|
121
121
|
group: "my_web_stack"
|
122
122
|
keypair: "mykeypair"
|
123
123
|
servers:
|
124
|
-
-
|
125
|
-
|
126
|
-
description: "Web nodes"
|
124
|
+
- name: "web-d1, web-d2"
|
125
|
+
description: "web node"
|
127
126
|
template: "CentOS-7-x64"
|
128
127
|
offering: "1cpu_1gb"
|
129
128
|
networks: "server_network"
|
130
129
|
port_rules: ":80, :443"
|
131
|
-
-
|
132
|
-
name: "db-01"
|
130
|
+
- name: "db-01"
|
133
131
|
description: "PostgreSQL Master"
|
134
132
|
iso: "CentOS-7-x64"
|
135
133
|
disk_offering: "Perf Storage"
|
136
134
|
disk_size: "5"
|
137
135
|
offering: "2cpu_4gb"
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
-
|
136
|
+
ip_network_list:
|
137
|
+
- name: FrontendNetwork
|
138
|
+
ip: 10.101.64.42
|
139
|
+
- name: BackendNetwork
|
140
|
+
ip: 10.102.1.11
|
142
141
|
```
|
143
142
|
|
144
143
|
*Create the stack of servers from the definition above:
|
@@ -163,15 +162,16 @@ Completed: 2/3 (15.4s)
|
|
163
162
|
### Example: Sort computing offerings
|
164
163
|
|
165
164
|
*Sort all computing offerings by CPU and Memory grouped by domain:*
|
165
|
+
(root admin privileges needed)
|
166
166
|
|
167
167
|
```bash
|
168
|
-
$ cloudstack-cli
|
168
|
+
$ cloudstack-cli compute_offer sort
|
169
169
|
```
|
170
170
|
|
171
171
|
### Example: Stop all backup routers of a given project
|
172
172
|
|
173
173
|
*Stop all virtual routers of project named Demo (you could filter by zone too):*
|
174
|
-
(
|
174
|
+
(this command is helpful if you have to deploy new major release of CloudStack when using redundant routers)
|
175
175
|
|
176
176
|
```bash
|
177
177
|
$ cloudstack-cli router list --project Demo --status running --redundant-state BACKUP --command STOP
|
data/lib/cloudstack-cli/base.rb
CHANGED
@@ -72,7 +72,7 @@ module CloudstackCli
|
|
72
72
|
end
|
73
73
|
|
74
74
|
unless config.key?(:url) && config.key?(:api_key) && config.key?(:secret_key)
|
75
|
-
say "The environment #{env || '\'-\''}
|
75
|
+
say "The environment #{env || '\'-\''} does not contain all required keys.", :red
|
76
76
|
say "Please check with 'cloudstack-cli environment list' and set a valid default environment."
|
77
77
|
exit 1
|
78
78
|
end
|
@@ -134,5 +134,6 @@ module CloudstackCli
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
end
|
137
|
-
|
138
|
-
end
|
137
|
+
|
138
|
+
end # class
|
139
|
+
end # module
|
@@ -63,15 +63,12 @@ class VirtualMachine < CloudstackCli::Base
|
|
63
63
|
option :project
|
64
64
|
def show(name)
|
65
65
|
resolve_project
|
66
|
-
options[:
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
table = virtual_machine.map do |key, value|
|
71
|
-
[ set_color("#{key}:", :yellow), "#{value}" ]
|
72
|
-
end
|
73
|
-
print_table table
|
66
|
+
options[:virtual_machine] = name
|
67
|
+
virtual_machine = resolve_virtual_machine(true)
|
68
|
+
table = virtual_machine.map do |key, value|
|
69
|
+
[ set_color("#{key}:", :yellow), "#{value}" ]
|
74
70
|
end
|
71
|
+
print_table table
|
75
72
|
end
|
76
73
|
|
77
74
|
desc "create NAME [NAME2 ...]", "create virtual machine(s)"
|
@@ -149,14 +146,13 @@ class VirtualMachine < CloudstackCli::Base
|
|
149
146
|
say "Please provide at least one virtual machine name.", :yellow
|
150
147
|
exit 1
|
151
148
|
end
|
152
|
-
|
153
149
|
resolve_project
|
154
150
|
names.each do |name|
|
155
|
-
unless virtual_machine =
|
151
|
+
unless virtual_machine = find_vm_by_name(name)
|
156
152
|
say "Virtual machine #{name} not found.", :red
|
157
153
|
else
|
158
154
|
action = options[:expunge] ? "Expunge" : "Destroy"
|
159
|
-
ask = "#{action} #{name} (#{virtual_machine['state']})? [y/N]:"
|
155
|
+
ask = "#{action} #{virtual_machine['name']} (#{virtual_machine['state']})? [y/N]:"
|
160
156
|
if options[:force] || yes?(ask, :yellow)
|
161
157
|
say "destroying #{name} "
|
162
158
|
client.destroy_virtual_machine(
|
@@ -179,13 +175,12 @@ class VirtualMachine < CloudstackCli::Base
|
|
179
175
|
option :force
|
180
176
|
def stop(name)
|
181
177
|
resolve_project
|
182
|
-
|
183
|
-
options[:listall] = true
|
184
|
-
exit unless options[:force] || yes?("Stop virtual machine #{name}? [y/N]:", :magenta)
|
185
|
-
unless virtual_machine = client.list_virtual_machines(options).first
|
178
|
+
unless virtual_machine = find_vm_by_name(name)
|
186
179
|
say "Virtual machine #{name} not found.", :red
|
187
180
|
exit 1
|
188
181
|
end
|
182
|
+
exit unless options[:force] ||
|
183
|
+
yes?("Stop virtual machine #{virtual_machine['name']}? [y/N]:", :magenta)
|
189
184
|
client.stop_virtual_machine(id: virtual_machine['id'])
|
190
185
|
puts
|
191
186
|
end
|
@@ -194,13 +189,11 @@ class VirtualMachine < CloudstackCli::Base
|
|
194
189
|
option :project
|
195
190
|
def start(name)
|
196
191
|
resolve_project
|
197
|
-
|
198
|
-
options[:listall] = true
|
199
|
-
unless virtual_machine = client.list_virtual_machines(options).first
|
192
|
+
unless virtual_machine = find_vm_by_name(name)
|
200
193
|
say "Virtual machine #{name} not found.", :red
|
201
194
|
exit 1
|
202
195
|
end
|
203
|
-
say("Starting virtual machine #{name}", :magenta)
|
196
|
+
say("Starting virtual machine #{virtual_machine['name']}", :magenta)
|
204
197
|
client.start_virtual_machine(id: virtual_machine['id'])
|
205
198
|
puts
|
206
199
|
end
|
@@ -210,13 +203,11 @@ class VirtualMachine < CloudstackCli::Base
|
|
210
203
|
option :force
|
211
204
|
def reboot(name)
|
212
205
|
resolve_project
|
213
|
-
|
214
|
-
options[:listall] = true
|
215
|
-
unless virtual_machine = client.list_virtual_machines(options).first
|
206
|
+
unless virtual_machine = find_vm_by_name(name)
|
216
207
|
say "Virtual machine #{name} not found.", :red
|
217
208
|
exit 1
|
218
209
|
end
|
219
|
-
exit unless options[:force] || yes?("Reboot virtual_machine #{name}? [y/N]:", :magenta)
|
210
|
+
exit unless options[:force] || yes?("Reboot virtual_machine #{virtual_machine["name"]}? [y/N]:", :magenta)
|
220
211
|
client.reboot_virtual_machine(id: virtual_machine['id'])
|
221
212
|
puts
|
222
213
|
end
|
@@ -248,30 +239,22 @@ class VirtualMachine < CloudstackCli::Base
|
|
248
239
|
desc: "optional binary data that can be sent to the virtual machine upon a successful deployment."
|
249
240
|
def update(name)
|
250
241
|
resolve_project
|
251
|
-
|
252
|
-
unless vm = client.list_virtual_machines(
|
253
|
-
name: name, project_id: options[:project_id], listall: true
|
254
|
-
).first
|
242
|
+
unless vm = find_vm_by_name(name)
|
255
243
|
say "Virtual machine #{name} not found.", :red
|
256
244
|
exit 1
|
257
245
|
end
|
258
|
-
|
259
246
|
unless vm["state"].downcase == "stopped"
|
260
247
|
say "Virtual machine #{name} (#{vm["state"]}) must be in a stopped state.", :red
|
261
248
|
exit 1
|
262
249
|
end
|
263
|
-
|
264
250
|
unless options[:force] || yes?("Update virtual_machine #{name}? [y/N]:", :magenta)
|
265
251
|
exit
|
266
252
|
end
|
267
|
-
|
268
253
|
if options[:user_data]
|
269
254
|
# base64 encode user_data
|
270
255
|
options[:user_data] = [options[:user_data]].pack("m")
|
271
256
|
end
|
272
|
-
|
273
257
|
vm = client.update_virtual_machine(options.merge(id: vm['id']))
|
274
|
-
|
275
258
|
say "Virtual machine \"#{name}\" has been updated:", :green
|
276
259
|
|
277
260
|
table = vm.select do |k, _|
|
@@ -284,6 +267,14 @@ class VirtualMachine < CloudstackCli::Base
|
|
284
267
|
|
285
268
|
no_commands do
|
286
269
|
|
270
|
+
def find_vm_by_name(name)
|
271
|
+
client.list_virtual_machines(
|
272
|
+
name: options[:virtual_machine],
|
273
|
+
listall: true,
|
274
|
+
project_id: options[:project_id]
|
275
|
+
).find {|vm| vm["name"] == name }
|
276
|
+
end
|
277
|
+
|
287
278
|
def print_virtual_machines(virtual_machines)
|
288
279
|
case options[:format].to_sym
|
289
280
|
when :yaml
|
@@ -113,7 +113,7 @@ class Volume < CloudstackCli::Base
|
|
113
113
|
|
114
114
|
desc "attach NAME", "attach volume to VM"
|
115
115
|
option :project, desc: 'project of volume'
|
116
|
-
option :virtual_machine, desc: 'virtual machine of volume'
|
116
|
+
option :virtual_machine, desc: 'virtual machine of volume', required: true
|
117
117
|
def attach(name)
|
118
118
|
resolve_project
|
119
119
|
resolve_virtual_machine
|
@@ -142,6 +142,7 @@ class Volume < CloudstackCli::Base
|
|
142
142
|
|
143
143
|
desc "detach NAME", "detach volume from VM"
|
144
144
|
option :project, desc: 'project of volume'
|
145
|
+
option :force
|
145
146
|
def detach(name)
|
146
147
|
resolve_project
|
147
148
|
|
@@ -158,7 +159,8 @@ class Volume < CloudstackCli::Base
|
|
158
159
|
say "Error: Volume #{name} currently not attached to any VM.", :red
|
159
160
|
exit 1
|
160
161
|
end
|
161
|
-
|
162
|
+
exit unless options[:force] ||
|
163
|
+
yes?("Detach volume #{name} from virtual_machine #{volume["vmname"]}? [y/N]:", :magenta)
|
162
164
|
say "Detach volume #{name} from VM #{volume["vmname"]} "
|
163
165
|
client.detach_volume id: volume['id']
|
164
166
|
say " OK.", :green
|
@@ -232,7 +232,7 @@ module CloudstackCli
|
|
232
232
|
print_options(server_offerings)
|
233
233
|
service_offering = ask_number("Offering Nr.: ")
|
234
234
|
|
235
|
-
templates = client.list_templates(project_id: project_id, zone_id: zones[zone]["id"], template_filter: "
|
235
|
+
templates = client.list_templates(project_id: project_id, zone_id: zones[zone]["id"], template_filter: "executable")
|
236
236
|
say "Select a template:", :yellow
|
237
237
|
print_options(templates)
|
238
238
|
template = ask_number("Template Nr.: ")
|
@@ -195,15 +195,22 @@ module CloudstackCli
|
|
195
195
|
options
|
196
196
|
end
|
197
197
|
|
198
|
-
def resolve_virtual_machine
|
198
|
+
def resolve_virtual_machine(return_vm = false)
|
199
199
|
if options[:virtual_machine]
|
200
|
-
|
201
|
-
|
202
|
-
|
200
|
+
unless vm = client.list_virtual_machines(
|
201
|
+
name: options[:virtual_machine],
|
202
|
+
listall: true,
|
203
|
+
project_id: options[:project_id]
|
204
|
+
).find {|vm| vm["name"] == options[:virtual_machine] }
|
203
205
|
say "Error: VM '#{options[:virtual_machine]}' not found.", :red
|
204
206
|
exit 1
|
205
207
|
end
|
206
|
-
|
208
|
+
|
209
|
+
if return_vm
|
210
|
+
return vm
|
211
|
+
else
|
212
|
+
options[:virtual_machine_id] = vm["id"]
|
213
|
+
end
|
207
214
|
end
|
208
215
|
options
|
209
216
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudstack-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nik Wolfgramm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04
|
11
|
+
date: 2016-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|