opennebula-cli 4.2.0 → 4.3.80.beta

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.
data/bin/onecluster CHANGED
@@ -197,4 +197,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
197
197
  obj.update(str, options[:append])
198
198
  end
199
199
  end
200
+
201
+ rename_desc = <<-EOT.unindent
202
+ Renames the Cluster
203
+ EOT
204
+
205
+ command :rename, rename_desc, :clusterid, :name do
206
+ helper.perform_action(args[0],options,"renamed") do |o|
207
+ o.rename(args[1])
208
+ end
209
+ end
200
210
  end
data/bin/onedatastore CHANGED
@@ -174,4 +174,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
174
174
  obj.update(str, options[:append])
175
175
  end
176
176
  end
177
+
178
+ rename_desc = <<-EOT.unindent
179
+ Renames the Datastore
180
+ EOT
181
+
182
+ command :rename, rename_desc, :datastoreid, :name do
183
+ helper.perform_action(args[0],options,"renamed") do |o|
184
+ o.rename(args[1])
185
+ end
186
+ end
177
187
  end
data/bin/onehost CHANGED
@@ -20,8 +20,10 @@ ONE_LOCATION=ENV["ONE_LOCATION"]
20
20
 
21
21
  if !ONE_LOCATION
22
22
  RUBY_LIB_LOCATION="/usr/lib/one/ruby"
23
+ REMOTES_LOCATION="/var/lib/one/remotes"
23
24
  else
24
25
  RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
26
+ REMOTES_LOCATION=ONE_LOCATION+"/var/remotes/"
25
27
  end
26
28
 
27
29
  $: << RUBY_LIB_LOCATION
@@ -72,6 +74,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
72
74
  }
73
75
 
74
76
  CREAT_OPTIONS = [ IM, VMM, VNET, OneClusterHelper::CLUSTER ]
77
+ SYNC_OPTIONS = [ OneClusterHelper::CLUSTER ]
75
78
 
76
79
  ########################################################################
77
80
  # Formatters for arguments
@@ -164,16 +167,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
164
167
  sync_desc = <<-EOT.unindent
165
168
  Synchronizes probes in /var/lib/one/remotes ($ONE_LOCATION/var/remotes
166
169
  in self-contained installations) with Hosts.
167
- The copy is performed the next time the Host is monitored
170
+ Examples:
171
+ onehost sync
172
+ onehost sync -c myCluster
173
+ onehost sync host01,host02,host03
168
174
  EOT
169
175
 
170
- command :sync, sync_desc do
171
- if ONE_LOCATION
172
- FileUtils.touch "#{ONE_LOCATION}/var/remotes"
173
- else
174
- FileUtils.touch "/var/lib/one/remotes"
175
- end
176
- 0
176
+ command :sync, sync_desc, [:range,:hostid_list, nil], :options=>SYNC_OPTIONS do
177
+ helper.sync(args[0],options)
177
178
  end
178
179
 
179
180
  list_desc = <<-EOT.unindent
@@ -213,4 +214,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
213
214
  host.flush
214
215
  end
215
216
  end
217
+
218
+ rename_desc = <<-EOT.unindent
219
+ Renames the Host
220
+ EOT
221
+
222
+ command :rename, rename_desc, :hostid, :name do
223
+ helper.perform_action(args[0],options,"renamed") do |o|
224
+ o.rename(args[1])
225
+ end
226
+ end
216
227
  end
data/bin/oneuser CHANGED
@@ -380,7 +380,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
380
380
  end
381
381
 
382
382
  chgrp_desc = <<-EOT.unindent
383
- Changes the User's main group
383
+ Changes the User's primary group
384
384
  EOT
385
385
 
386
386
  command :chgrp, chgrp_desc, [:range, :userid_list], :groupid do
@@ -389,6 +389,30 @@ cmd=CommandParser::CmdParser.new(ARGV) do
389
389
  end
390
390
  end
391
391
 
392
+ addgroup_desc = <<-EOT.unindent
393
+ Adds the User to a secondary group
394
+ EOT
395
+
396
+ command :addgroup, addgroup_desc, [:range, :userid_list], :groupid do
397
+ gid = args[1]
398
+
399
+ helper.perform_actions(args[0],options,"group added") do |user|
400
+ user.addgroup( gid )
401
+ end
402
+ end
403
+
404
+ delgroup_desc = <<-EOT.unindent
405
+ Removes the User from a secondary group
406
+ EOT
407
+
408
+ command :delgroup, delgroup_desc, [:range, :userid_list], :groupid do
409
+ gid = args[1]
410
+
411
+ helper.perform_actions(args[0],options,"group deleted") do |user|
412
+ user.delgroup( gid )
413
+ end
414
+ end
415
+
392
416
  chauth_desc = <<-EOT.unindent
393
417
  Changes the User's auth driver and its password (optional)
394
418
  Examples:
data/bin/onevm CHANGED
@@ -111,6 +111,10 @@ cmd=CommandParser::CmdParser.new(ARGV) do
111
111
  OpenNebulaHelper.rname_to_id(arg, "USER")
112
112
  end
113
113
 
114
+ set :format, :datastoreid, OpenNebulaHelper.rname_to_id_desc("DATASTORE") do |arg|
115
+ OpenNebulaHelper.rname_to_id(arg, "DATASTORE")
116
+ end
117
+
114
118
  set :format, :vmid, OneVMHelper.to_id_desc do |arg|
115
119
  helper.to_id(arg)
116
120
  end
@@ -318,7 +322,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
318
322
 
319
323
  With --hard it unplugs the VM.
320
324
 
321
- States: RUNNING
325
+ States: RUNNING, UNKNOWN (with --hard)
322
326
  EOT
323
327
 
324
328
  command :shutdown, shutdown_desc, [:range,:vmid_list],
@@ -413,17 +417,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do
413
417
  States: PENDING
414
418
  EOT
415
419
 
416
- command :deploy, deploy_desc, [:range,:vmid_list], :hostid,
420
+ command :deploy, deploy_desc, [:range,:vmid_list], :hostid, [:datastoreid,nil],
417
421
  :options=>[ENFORCE] do
418
422
  host_id = args[1]
419
423
  verbose = "deploying in host #{host_id}"
420
424
 
425
+ enforce = options[:enforce].nil? ? false : options[:enforce]
426
+ ds_id = args[2].nil? ? -1 : args[2]
427
+
421
428
  helper.perform_actions(args[0],options,verbose) do |vm|
422
- if !options[:enforce].nil?
423
- vm.deploy(host_id, options[:enforce])
424
- else
425
- vm.deploy(host_id)
426
- end
429
+ vm.deploy(host_id, enforce, ds_id)
427
430
  end
428
431
  end
429
432
 
data/lib/one_helper.rb CHANGED
@@ -186,6 +186,37 @@ EOT
186
186
  :large => '--vnc',
187
187
  :description => 'Add VNC server to the VM'
188
188
  },
189
+ {
190
+ :name => 'vnc_password',
191
+ :large => '--vnc-password password',
192
+ :format => String,
193
+ :description => 'VNC password'
194
+ },
195
+ {
196
+ :name => 'vnc_listen',
197
+ :large => '--vnc-listen ip',
198
+ :format => String,
199
+ :description => 'VNC IP where to listen for connections. '<<
200
+ 'By default is 0.0.0.0 (all interfaces).'
201
+ },
202
+ {
203
+ :name => 'spice',
204
+ :large => '--spice',
205
+ :description => 'Add spice server to the VM'
206
+ },
207
+ {
208
+ :name => 'spice_password',
209
+ :large => '--spice-password password',
210
+ :format => String,
211
+ :description => 'spice password'
212
+ },
213
+ {
214
+ :name => 'spice_listen',
215
+ :large => '--spice-listen ip',
216
+ :format => String,
217
+ :description => 'spice IP where to listen for connections. '<<
218
+ 'By default is 0.0.0.0 (all interfaces).'
219
+ },
189
220
  {
190
221
  :name => 'ssh',
191
222
  :large => '--ssh [file]',
@@ -217,6 +248,19 @@ EOT
217
248
  :large => '--boot device',
218
249
  :description => 'Select boot device (hd|fd|cdrom|network)',
219
250
  :format => String
251
+ },
252
+ {
253
+ :name => 'files_ds',
254
+ :large => '--files_ds file1,file2',
255
+ :format => Array,
256
+ :description => 'Add files to the contextualization CD from the' <<
257
+ 'files datastore'
258
+ },
259
+ {
260
+ :name => 'init',
261
+ :large => '--init script1,script2',
262
+ :format => Array,
263
+ :description => 'Script or scripts to start in context'
220
264
  }
221
265
  ]
222
266
 
@@ -743,7 +787,8 @@ EOT
743
787
  end
744
788
 
745
789
  def self.create_context(options)
746
- if !(options.keys & [:ssh, :net_context, :context]).empty?
790
+ context_options = [:ssh, :net_context, :context, :init, :files_ds]
791
+ if !(options.keys & context_options).empty?
747
792
  lines=[]
748
793
 
749
794
  if options[:ssh]
@@ -761,11 +806,25 @@ EOT
761
806
  end
762
807
 
763
808
  if options[:net_context]
764
- lines << "NETWORK = \"YES\""
809
+ lines << "NETWORK = \"YES\""
765
810
  end
766
811
 
767
812
  lines+=options[:context] if options[:context]
768
813
 
814
+ if options[:files_ds]
815
+ text='FILES_DS="'
816
+ text << options[:files_ds].map do |file|
817
+ %Q<$FILE[IMAGE=\\"#{file}\\"]>
818
+ end.join(' ')
819
+ text << '"'
820
+
821
+ lines << text
822
+ end
823
+
824
+ if options[:init]
825
+ lines << %Q<INIT_SCRIPTS="#{options[:init].join(' ')}">
826
+ end
827
+
769
828
  if !lines.empty?
770
829
  "CONTEXT=[\n"<<lines.map{|l| " "<<l }.join(",\n")<<"\n]\n"
771
830
  else
@@ -813,7 +872,21 @@ EOT
813
872
  end
814
873
 
815
874
  if options[:vnc]
816
- template<<'GRAPHICS=[ TYPE="vnc", LISTEN="0.0.0.0" ]'<<"\n"
875
+ vnc_listen=options[:vnc_listen] || "0.0.0.0"
876
+ template<<"GRAPHICS=[ TYPE=\"vnc\", LISTEN=\"#{vnc_listen}\""
877
+ if options[:vnc_password]
878
+ template << ", PASSWD=\"#{options[:vnc_password]}\""
879
+ end
880
+ template<<' ]'<<"\n"
881
+ end
882
+
883
+ if options[:spice]
884
+ spice_listen=options[:spice_listen] || "0.0.0.0"
885
+ template<<"GRAPHICS=[ TYPE=\"spice\", LISTEN=\"#{spice_listen}\""
886
+ if options[:spice_password]
887
+ template << ", PASSWD=\"#{options[:spice_password]}\""
888
+ end
889
+ template<<' ]'<<"\n"
817
890
  end
818
891
 
819
892
  context=create_context(options)
@@ -102,7 +102,6 @@ class OneClusterHelper < OpenNebulaHelper::OneHelper
102
102
  CLIHelper.print_header(str_h1 % "CLUSTER #{cluster['ID']} INFORMATION")
103
103
  puts str % ["ID", cluster.id.to_s]
104
104
  puts str % ["NAME", cluster.name]
105
- puts str % ["SYSTEM DS", cluster['SYSTEM_DS']]
106
105
  puts
107
106
 
108
107
  CLIHelper.print_header(str_h1 % "CLUSTER TEMPLATE", false)
@@ -49,7 +49,8 @@ class OneDatastoreHelper < OpenNebulaHelper::OneHelper
49
49
  end
50
50
 
51
51
  column :SIZE, "Datastore total size", :size =>10 do |d|
52
- if d['TEMPLATE']['TYPE'] == 'SYSTEM_DS'
52
+ shared = d['TEMPLATE']['SHARED']
53
+ if shared != nil && shared.upcase == 'NO'
53
54
  "-"
54
55
  else
55
56
  OpenNebulaHelper.unit_to_str(d['TOTAL_MB'].to_i, {}, 'M')
@@ -115,8 +116,6 @@ class OneDatastoreHelper < OpenNebulaHelper::OneHelper
115
116
  str="%-15s: %-20s"
116
117
  str_h1="%-80s"
117
118
 
118
- system = datastore.type == 1
119
-
120
119
  CLIHelper.print_header(str_h1 % "DATASTORE #{datastore['ID']} INFORMATION")
121
120
  puts str % ["ID", datastore.id.to_s]
122
121
  puts str % ["NAME", datastore.name]
@@ -132,9 +131,13 @@ class OneDatastoreHelper < OpenNebulaHelper::OneHelper
132
131
  puts
133
132
 
134
133
  CLIHelper.print_header(str_h1 % "DATASTORE CAPACITY", false)
135
- puts str % ["TOTAL:", system ? '-' : OpenNebulaHelper.unit_to_str(datastore['TOTAL_MB'].to_i, {},'M')]
136
- puts str % ["USED: ", system ? '-' : OpenNebulaHelper.unit_to_str(datastore['USED_MB'].to_i, {},'M')]
137
- puts str % ["FREE:", system ? '-' : OpenNebulaHelper.unit_to_str(datastore['FREE_MB'].to_i, {},'M')]
134
+
135
+ shared = datastore['TEMPLATE/SHARED']
136
+ local = shared != nil && shared.upcase == 'NO'
137
+
138
+ puts str % ["TOTAL:", local ? '-' : OpenNebulaHelper.unit_to_str(datastore['TOTAL_MB'].to_i, {},'M')]
139
+ puts str % ["USED: ", local ? '-' : OpenNebulaHelper.unit_to_str(datastore['USED_MB'].to_i, {},'M')]
140
+ puts str % ["FREE:", local ? '-' : OpenNebulaHelper.unit_to_str(datastore['FREE_MB'].to_i, {},'M')]
138
141
  puts
139
142
 
140
143
  CLIHelper.print_header(str_h1 % "PERMISSIONS",false)
@@ -61,10 +61,15 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
61
61
  end
62
62
 
63
63
  column :USERS, "Number of Users in this group", :size=>5 do |d|
64
- if d["USERS"]["ID"].nil?
65
- "0"
64
+ ids = d["USERS"]["ID"]
65
+
66
+ case ids
67
+ when String
68
+ "1"
69
+ when Array
70
+ ids.size
66
71
  else
67
- d["USERS"]["ID"].size
72
+ "0"
68
73
  end
69
74
  end
70
75
 
@@ -29,7 +29,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
29
29
  def self.state_to_str(id)
30
30
  id = id.to_i
31
31
  state_str = Host::HOST_STATES[id]
32
-
32
+
33
33
  return Host::SHORT_HOST_STATES[state_str]
34
34
  end
35
35
 
@@ -114,7 +114,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
114
114
  "#{cpu_usage} / #{max_cpu} (#{ratio}%)"
115
115
  else
116
116
  "#{cpu_usage} / -"
117
- end
117
+ end
118
118
  end
119
119
  end
120
120
 
@@ -156,6 +156,84 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
156
156
  table
157
157
  end
158
158
 
159
+
160
+ NUM_THREADS = 15
161
+ def sync(host_ids, options)
162
+ cluster_id = options[:cluster]
163
+
164
+ # Get remote_dir (implies oneadmin group)
165
+ rc = OpenNebula::System.new(@client).get_configuration
166
+ return -1, rc.message if OpenNebula.is_error?(rc)
167
+
168
+ conf = rc
169
+ remote_dir = conf['SCRIPTS_REMOTE_DIR']
170
+
171
+ # Verify the existence of REMOTES_LOCATION
172
+ if !File.directory? REMOTES_LOCATION
173
+ error_msg = "'#{REMOTES_LOCATION}' does not exist. " <<
174
+ "This command must be run in the frontend."
175
+ return -1,error_msg
176
+ end
177
+
178
+ # Touch the update file
179
+ FileUtils.touch(File.join(REMOTES_LOCATION,'.update'))
180
+
181
+ # Get the Host pool
182
+ filter_flag ||= OpenNebula::Pool::INFO_ALL
183
+
184
+ pool = factory_pool(filter_flag)
185
+
186
+ rc = pool.info
187
+ return -1, rc.message if OpenNebula.is_error?(rc)
188
+
189
+ # Assign hosts to threads
190
+ i = 0
191
+ hs_threads = Array.new
192
+
193
+ pool.each do |host|
194
+ if host_ids
195
+ next if !host_ids.include?(host['ID'].to_i)
196
+ elsif cluster_id
197
+ next if host['CLUSTER_ID'].to_i != cluster_id
198
+ end
199
+
200
+ hs_threads[i % NUM_THREADS] ||= []
201
+ hs_threads[i % NUM_THREADS] << host['NAME']
202
+ i+=1
203
+ end
204
+
205
+ # Run the jobs in threads
206
+ host_errors = Array.new
207
+ lock = Mutex.new
208
+
209
+ ts = hs_threads.map do |t|
210
+ Thread.new {
211
+ t.each do |host|
212
+ sync_cmd = "scp -rp #{REMOTES_LOCATION}/. #{host}:#{remote_dir} 2> /dev/null"
213
+ `#{sync_cmd} 2>/dev/null`
214
+
215
+ if !$?.success?
216
+ lock.synchronize {
217
+ host_errors << host
218
+ }
219
+ end
220
+ end
221
+ }
222
+ end
223
+
224
+ # Wait for threads to finish
225
+ ts.each{|t| t.join}
226
+
227
+ if host_errors.empty?
228
+ puts "All hosts updated successfully."
229
+ 0
230
+ else
231
+ STDERR.puts "Failed to update the following hosts:"
232
+ host_errors.each{|h| STDERR.puts "* #{h}"}
233
+ -1
234
+ end
235
+ end
236
+
159
237
  private
160
238
 
161
239
  def factory(id=nil)
@@ -200,6 +278,22 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
200
278
  puts str % ["RUNNING VMS", host['HOST_SHARE/RUNNING_VMS']]
201
279
  puts
202
280
 
281
+ datastores = host.to_hash['HOST']['HOST_SHARE']['DATASTORES']['DS']
282
+
283
+ if datastores.nil?
284
+ datastores = []
285
+ else
286
+ datastores = [datastores].flatten
287
+ end
288
+
289
+ datastores.each do |datastore|
290
+ CLIHelper.print_header(str_h1 % "LOCAL SYSTEM DATASTORE ##{datastore['ID']} CAPACITY", false)
291
+ puts str % ["TOTAL:", OpenNebulaHelper.unit_to_str(datastore['TOTAL_MB'].to_i, {},'M')]
292
+ puts str % ["USED: ", OpenNebulaHelper.unit_to_str(datastore['USED_MB'].to_i, {},'M')]
293
+ puts str % ["FREE:", OpenNebulaHelper.unit_to_str(datastore['FREE_MB'].to_i, {},'M')]
294
+ puts
295
+ end
296
+
203
297
  CLIHelper.print_header(str_h1 % "MONITORING INFORMATION", false)
204
298
 
205
299
  puts host.template_str
@@ -31,9 +31,10 @@ class OneQuotaHelper
31
31
  # ]
32
32
  #
33
33
  # VM = [
34
- # VMS = <Max. number of VMs>
35
- # MEMORY = <Max. allocated memory (Mb)>
36
- # CPU = <Max. allocated CPU>
34
+ # VMS = <Max. number of VMs>
35
+ # MEMORY = <Max. allocated memory (MB)>
36
+ # CPU = <Max. allocated CPU>
37
+ # VOLATILE_SIZE = <Max. allocated volatile disks (MB)>
37
38
  # ]
38
39
  #
39
40
  # NETWORK = [
@@ -180,14 +181,14 @@ class OneQuotaHelper
180
181
 
181
182
  if !vm_quotas[0].nil?
182
183
  CLIHelper::ShowTable.new(nil, self) do
183
- column :"NUMBER OF VMS", "", :right, :size=>20 do |d|
184
+ column :"NUMBER OF VMS", "", :right, :size=>17 do |d|
184
185
  if !d.nil?
185
186
  elem = 'VMS'
186
187
  limit = d[elem]
187
188
  limit = helper.get_default_limit(
188
189
  limit, "VM_QUOTA/VM/#{elem}")
189
190
 
190
- "%8d / %8d" % [d["VMS_USED"], limit]
191
+ "%7d / %7d" % [d["VMS_USED"], limit]
191
192
  end
192
193
  end
193
194
 
@@ -215,6 +216,20 @@ class OneQuotaHelper
215
216
  "%8.2f / %8.2f" % [d["CPU_USED"], limit]
216
217
  end
217
218
  end
219
+
220
+ column :"VOLATILE_SIZE", "", :right, :size=>20 do |d|
221
+ if !d.nil?
222
+ elem = 'VOLATILE_SIZE'
223
+ limit = d[elem]
224
+ limit = helper.get_default_limit(
225
+ limit, "VM_QUOTA/VM/#{elem}")
226
+
227
+ "%8s / %8s" % [
228
+ OpenNebulaHelper.unit_to_str(d["VOLATILE_SIZE_USED"].to_i,{},"M"),
229
+ OpenNebulaHelper.unit_to_str(limit.to_i,{},"M")
230
+ ]
231
+ end
232
+ end
218
233
  end.show(vm_quotas, {})
219
234
 
220
235
  puts
@@ -245,13 +245,15 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
245
245
  def format_resource(user, options = {})
246
246
  system = System.new(@client)
247
247
 
248
- str="%-15s: %-20s"
248
+ str="%-16s: %-20s"
249
249
  str_h1="%-80s"
250
250
 
251
251
  CLIHelper.print_header(str_h1 % "USER #{user['ID']} INFORMATION")
252
252
  puts str % ["ID", user.id.to_s]
253
253
  puts str % ["NAME", user.name]
254
254
  puts str % ["GROUP", user['GNAME']]
255
+ groups = user.retrieve_elements("GROUPS/ID")
256
+ puts str % ["SECONDARY GROUPS", groups.join(',') ] if groups.size > 1
255
257
  puts str % ["PASSWORD", user['PASSWORD']]
256
258
  puts str % ["AUTH_DRIVER", user['AUTH_DRIVER']]
257
259
 
@@ -248,6 +248,9 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
248
248
  puts str % ["HOST",
249
249
  vm['/VM/HISTORY_RECORDS/HISTORY[last()]/HOSTNAME']] if
250
250
  %w{ACTIVE SUSPENDED POWEROFF}.include? vm.state_str
251
+ puts str % ["CLUSTER ID",
252
+ vm['/VM/HISTORY_RECORDS/HISTORY[last()]/CID'] ] if
253
+ %w{ACTIVE SUSPENDED POWEROFF}.include? vm.state_str
251
254
  puts str % ["START TIME",
252
255
  OpenNebulaHelper.time_to_str(vm['/VM/STIME'])]
253
256
  puts str % ["END TIME",
@@ -547,6 +550,10 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
547
550
  VirtualMachine.get_reason d["REASON"]
548
551
  end
549
552
 
553
+ column :DS, "System Datastore", :size=>4 do |d|
554
+ d["DS_ID"]
555
+ end
556
+
550
557
  column :START, "Time when the state changed", :size=>15 do |d|
551
558
  OpenNebulaHelper.time_to_str(d['STIME'])
552
559
  end
@@ -569,7 +576,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
569
576
  OpenNebulaHelper.short_period_to_str(dtime)
570
577
  end
571
578
 
572
- default :SEQ, :HOST, :ACTION, :REASON, :START, :TIME, :PROLOG
579
+ default :SEQ, :HOST, :ACTION, :DS, :START, :TIME, :PROLOG
573
580
  end
574
581
 
575
582
  vm_hash=vm.to_hash
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opennebula-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
5
- prerelease:
4
+ version: 4.3.80.beta
5
+ prerelease: 7
6
6
  platform: ruby
7
7
  authors:
8
8
  - OpenNebula
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-26 00:00:00.000000000 Z
12
+ date: 2013-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: opennebula
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 4.2.0
21
+ version: 4.3.80.beta
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 4.2.0
29
+ version: 4.3.80.beta
30
30
  description: Commands used to talk to OpenNebula
31
31
  email: contact@opennebula.org
32
32
  executables:
@@ -91,9 +91,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
91
  required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  none: false
93
93
  requirements:
94
- - - ! '>='
94
+ - - ! '>'
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 1.3.1
97
97
  requirements: []
98
98
  rubyforge_project:
99
99
  rubygems_version: 1.8.25