rvc 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.1
1
+ 1.2.2
@@ -36,6 +36,7 @@ opts :connect do
36
36
  summary 'Open a connection to ESX/VC'
37
37
  arg :uri, "Host to connect to"
38
38
  opt :insecure, "don't verify ssl certificate", :short => 'k', :default => (ENV['RBVMOMI_INSECURE'] == '1')
39
+ opt :rev, "Override protocol revision", :type => :string
39
40
  end
40
41
 
41
42
  rvc_alias :connect
@@ -57,7 +58,7 @@ def connect uri, opts
57
58
  :port => 443,
58
59
  :path => '/sdk',
59
60
  :ns => 'urn:vim25',
60
- :rev => '4.0',
61
+ :rev => (opts[:rev]||'4.0'),
61
62
  :ssl => true,
62
63
  :insecure => insecure
63
64
  break
@@ -69,9 +70,12 @@ def connect uri, opts
69
70
  end
70
71
  end
71
72
 
72
- # negotiate API version
73
- rev = vim.serviceContent.about.apiVersion
74
- vim.rev = [rev, '4.1'].min
73
+ unless opts[:rev]
74
+ # negotiate API version
75
+ rev = vim.serviceContent.about.apiVersion
76
+ vim.rev = [rev, '4.1'].min
77
+ end
78
+
75
79
  isVC = vim.serviceContent.about.apiType == "VirtualCenter"
76
80
 
77
81
  # authenticate
@@ -379,7 +379,8 @@ rvc_alias :ssh
379
379
 
380
380
  def ssh vm, cmd, opts
381
381
  ip = vm_ip vm
382
- ssh_cmd = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -l #{opts[:login]} #{ip} #{cmd}"
382
+ cmd_arg = cmd ? Shellwords.escape(cmd) : ""
383
+ ssh_cmd = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -l #{Shellwords.escape opts[:login]} #{Shellwords.escape ip} #{cmd_arg}"
383
384
  system_fg(ssh_cmd)
384
385
  end
385
386
 
@@ -397,7 +398,7 @@ def rvc vm
397
398
  env = Hash[%w(RBVMOMI_PASSWORD RBVMOMI_HOST RBVMOMI_USER RBVMOMI_SSL RBVMOMI_PORT
398
399
  RBVMOMI_FOLDER RBVMOMI_DATASTORE RBVMOMI_PATH RBVMOMI_DATACENTER
399
400
  RBVMOMI_COMPUTER).map { |k| [k,nil] }]
400
- cmd = "rvc #{ip}"
401
+ cmd = "rvc #{Shellwords.escape ip}"
401
402
  system_fg(cmd, env)
402
403
  end
403
404
 
@@ -411,7 +412,7 @@ rvc_alias :ping
411
412
 
412
413
  def ping vm
413
414
  ip = vm_ip vm
414
- system_fg "ping #{ip}"
415
+ system_fg "ping #{Shellwords.escape ip}"
415
416
  end
416
417
 
417
418
 
@@ -567,7 +568,7 @@ end
567
568
  opts :clone do
568
569
  summary "Clone a VM"
569
570
  arg :src, nil, :lookup => VIM::VirtualMachine
570
- arg :dst, "Path to new VM"
571
+ arg :dst, "Path to new VM", :lookup_parent => VIM::Folder
571
572
  opt :pool, "Resource pool", :short => 'p', :type => :string, :lookup => VIM::ResourcePool
572
573
  opt :host, "Host", :short => 'h', :type => :string, :lookup => VIM::HostSystem
573
574
  opt :template, "Create a template", :short => 't'
@@ -576,7 +577,7 @@ opts :clone do
576
577
  end
577
578
 
578
579
  def clone src, dst, opts
579
- folder = lookup! File.dirname(dst), VIM::Folder
580
+ folder, name = *dst
580
581
  diskMoveType = nil
581
582
 
582
583
  if opts[:linked]
@@ -585,7 +586,7 @@ def clone src, dst, opts
585
586
  end
586
587
 
587
588
  task = src.CloneVM_Task(:folder => folder,
588
- :name => File.basename(dst),
589
+ :name => name,
589
590
  :spec => {
590
591
  :location => {
591
592
  :diskMoveType => diskMoveType,
@@ -91,7 +91,7 @@ class OptionParser < Trollop::Parser
91
91
  if spec[:multi]
92
92
  err "missing argument '#{name}'" if spec[:required] and argv.empty?
93
93
  a = (argv.empty? ? spec[:default] : argv.dup)
94
- a = a.map { |x| postprocess_arg x, spec }.inject(:+)
94
+ a = a.map { |x| postprocess_arg x, spec }.inject([], :+)
95
95
  err "no matches for '#{name}'" if spec[:required] and a.empty?
96
96
  args << a
97
97
  argv.clear
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rvc
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.2.1
5
+ version: 1.2.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Rich Lane
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-12 00:00:00 -07:00
13
+ date: 2011-04-14 00:00:00 -07:00
14
14
  default_executable: rvc
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency