vmc 0.4.0.beta.9 → 0.4.0.beta.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/bin/vmc +11 -10
  2. data/{LICENSE → vmc-ng/LICENSE} +0 -0
  3. data/{Rakefile → vmc-ng/Rakefile} +0 -0
  4. data/vmc-ng/bin/vmc +14 -0
  5. data/{lib → vmc-ng/lib}/vmc.rb +0 -0
  6. data/{lib → vmc-ng/lib}/vmc/cli.rb +0 -0
  7. data/{lib → vmc-ng/lib}/vmc/cli/app.rb +0 -0
  8. data/{lib → vmc-ng/lib}/vmc/cli/better_help.rb +0 -0
  9. data/{lib → vmc-ng/lib}/vmc/cli/command.rb +0 -0
  10. data/{lib → vmc-ng/lib}/vmc/cli/dots.rb +0 -0
  11. data/{lib → vmc-ng/lib}/vmc/cli/service.rb +0 -0
  12. data/{lib → vmc-ng/lib}/vmc/cli/user.rb +0 -0
  13. data/{lib → vmc-ng/lib}/vmc/constants.rb +0 -0
  14. data/{lib → vmc-ng/lib}/vmc/detect.rb +0 -0
  15. data/{lib → vmc-ng/lib}/vmc/errors.rb +0 -0
  16. data/{lib → vmc-ng/lib}/vmc/plugin.rb +0 -0
  17. data/vmc-ng/lib/vmc/version.rb +3 -0
  18. data/vmc/LICENSE +24 -0
  19. data/vmc/README.md +102 -0
  20. data/vmc/Rakefile +101 -0
  21. data/vmc/bin/vmc +6 -0
  22. data/vmc/caldecott_helper/Gemfile +10 -0
  23. data/vmc/caldecott_helper/Gemfile.lock +48 -0
  24. data/vmc/caldecott_helper/server.rb +43 -0
  25. data/vmc/config/clients.yml +17 -0
  26. data/vmc/config/micro/offline.conf +2 -0
  27. data/vmc/config/micro/paths.yml +22 -0
  28. data/vmc/config/micro/refresh_ip.rb +20 -0
  29. data/vmc/lib/cli.rb +47 -0
  30. data/vmc/lib/cli/commands/admin.rb +80 -0
  31. data/vmc/lib/cli/commands/apps.rb +1126 -0
  32. data/vmc/lib/cli/commands/base.rb +227 -0
  33. data/vmc/lib/cli/commands/manifest.rb +56 -0
  34. data/vmc/lib/cli/commands/micro.rb +115 -0
  35. data/vmc/lib/cli/commands/misc.rb +129 -0
  36. data/vmc/lib/cli/commands/services.rb +180 -0
  37. data/vmc/lib/cli/commands/user.rb +65 -0
  38. data/vmc/lib/cli/config.rb +173 -0
  39. data/vmc/lib/cli/console_helper.rb +160 -0
  40. data/vmc/lib/cli/core_ext.rb +122 -0
  41. data/vmc/lib/cli/errors.rb +19 -0
  42. data/vmc/lib/cli/frameworks.rb +265 -0
  43. data/vmc/lib/cli/manifest_helper.rb +302 -0
  44. data/vmc/lib/cli/runner.rb +531 -0
  45. data/vmc/lib/cli/services_helper.rb +84 -0
  46. data/vmc/lib/cli/tunnel_helper.rb +332 -0
  47. data/vmc/lib/cli/usage.rb +115 -0
  48. data/vmc/lib/cli/version.rb +7 -0
  49. data/vmc/lib/cli/zip_util.rb +77 -0
  50. data/vmc/lib/vmc.rb +3 -0
  51. data/vmc/lib/vmc/client.rb +471 -0
  52. data/vmc/lib/vmc/const.rb +22 -0
  53. data/vmc/lib/vmc/micro.rb +56 -0
  54. data/vmc/lib/vmc/micro/switcher/base.rb +97 -0
  55. data/vmc/lib/vmc/micro/switcher/darwin.rb +19 -0
  56. data/vmc/lib/vmc/micro/switcher/dummy.rb +15 -0
  57. data/vmc/lib/vmc/micro/switcher/linux.rb +16 -0
  58. data/vmc/lib/vmc/micro/switcher/windows.rb +31 -0
  59. data/vmc/lib/vmc/micro/vmrun.rb +158 -0
  60. metadata +267 -35
  61. data/lib/vmc/version.rb +0 -3
@@ -0,0 +1,22 @@
1
+ module VMC
2
+
3
+ # This is the internal VMC version number, and is not necessarily
4
+ # the same as the RubyGem version (VMC::Cli::VERSION).
5
+ VERSION = '0.3.2'
6
+
7
+ # Targets
8
+ DEFAULT_TARGET = 'https://api.cloudfoundry.com'
9
+ DEFAULT_LOCAL_TARGET = 'http://api.vcap.me'
10
+
11
+ # General Paths
12
+ INFO_PATH = 'info'
13
+ GLOBAL_SERVICES_PATH = ['info', 'services']
14
+ GLOBAL_RUNTIMES_PATH = ['info', 'runtimes']
15
+ RESOURCES_PATH = 'resources'
16
+
17
+ # User specific paths
18
+ APPS_PATH = 'apps'
19
+ SERVICES_PATH = 'services'
20
+ USERS_PATH = 'users'
21
+
22
+ end
@@ -0,0 +1,56 @@
1
+ require 'find'
2
+
3
+ module VMC::Micro
4
+ def config_file(file)
5
+ File.join(File.dirname(__FILE__), '..', '..', 'config', 'micro', file)
6
+ end
7
+
8
+ def escape_path(path)
9
+ path = File.expand_path(path)
10
+ if RUBY_PLATFORM =~ /mingw|mswin32|cygwin/
11
+ if path.include?(' ')
12
+ return '"' + path + '"'
13
+ else
14
+ return path
15
+ end
16
+ else
17
+ return path.gsub(' ', '\ ')
18
+ end
19
+ end
20
+
21
+ def locate_file(file, directory, search_paths)
22
+ search_paths.each do |path|
23
+ expanded_path = File.expand_path(path)
24
+ if File.exists?(expanded_path)
25
+ Find.find(expanded_path) do |current|
26
+ if File.directory?(current) && current.include?(directory)
27
+ full_path = File.join(current, file)
28
+ return self.escape_path(full_path) if File.exists?(full_path)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ false
35
+ end
36
+
37
+ def run_command(command, args=nil)
38
+ # TODO switch to using posix-spawn instead
39
+ result = %x{#{command} #{args} 2>&1}
40
+ unless $?.exitstatus == 0
41
+ if block_given?
42
+ yield
43
+ else
44
+ raise "failed to execute #{command} #{args}:\n#{result}"
45
+ end
46
+ else
47
+ result.split(/\n/)
48
+ end
49
+ end
50
+
51
+ module_function :config_file
52
+ module_function :escape_path
53
+ module_function :locate_file
54
+ module_function :run_command
55
+
56
+ end
@@ -0,0 +1,97 @@
1
+ require 'interact'
2
+
3
+ module VMC::Micro::Switcher
4
+ class Base
5
+ include Interactive
6
+
7
+ def initialize(config)
8
+ @config = config
9
+
10
+ @vmrun = VMC::Micro::VMrun.new(config)
11
+ unless @vmrun.running?
12
+ if ask("Micro Cloud Foundry VM is not running. Do you want to start it?", :choices => ['y', 'n']) == 'y'
13
+ display "Starting Micro Cloud Foundry VM: ", false
14
+ @vmrun.start
15
+ say "done".green
16
+ else
17
+ err "Micro Cloud Foundry VM needs to be running."
18
+ end
19
+ end
20
+
21
+ err "Micro Cloud Foundry VM initial setup needs to be completed before using 'vmc micro'" unless @vmrun.ready?
22
+ end
23
+
24
+ def offline
25
+ unless @vmrun.offline?
26
+ # save online connection type so we can restore it later
27
+ @config['online_connection_type'] = @vmrun.connection_type
28
+
29
+ if (@config['online_connection_type'] != 'nat')
30
+ if ask("Reconfigure Micro Cloud Foundry VM network to nat mode and reboot?", :choices => ['y', 'n']) == 'y'
31
+ display "Rebooting Micro Cloud Foundry VM: ", false
32
+ @vmrun.connection_type = 'nat'
33
+ @vmrun.reset
34
+ say "done".green
35
+ else
36
+ err "Aborted"
37
+ end
38
+ end
39
+
40
+ display "Setting Micro Cloud Foundry VM to offline mode: ", false
41
+ @vmrun.offline!
42
+ say "done".green
43
+ display "Setting host DNS server: ", false
44
+
45
+ @config['domain'] = @vmrun.domain
46
+ @config['ip'] = @vmrun.ip
47
+ set_nameserver(@config['domain'], @config['ip'])
48
+ say "done".green
49
+ else
50
+ say "Micro Cloud Foundry VM already in offline mode".yellow
51
+ end
52
+ end
53
+
54
+ def online
55
+ if @vmrun.offline?
56
+ current_connection_type = @vmrun.connection_type
57
+ @config['online_connection_type'] ||= current_connection_type
58
+
59
+ if (@config['online_connection_type'] != current_connection_type)
60
+ # TODO handle missing connection type in saved config
61
+ question = "Reconfigure Micro Cloud Foundry VM network to #{@config['online_connection_type']} mode and reboot?"
62
+ if ask(question, :choices => ['y', 'n']) == 'y'
63
+ display "Rebooting Micro Cloud Foundry VM: ", false
64
+ @vmrun.connection_type = @config['online_connection_type']
65
+ @vmrun.reset
66
+ say "done".green
67
+ else
68
+ err "Aborted"
69
+ end
70
+ end
71
+
72
+ display "Unsetting host DNS server: ", false
73
+ # TODO handle missing domain and ip in saved config (look at the VM)
74
+ @config['domain'] ||= @vmrun.domain
75
+ @config['ip'] ||= @vmrun.ip
76
+ unset_nameserver(@config['domain'], @config['ip'])
77
+ say "done".green
78
+
79
+ display "Setting Micro Cloud Foundry VM to online mode: ", false
80
+ @vmrun.online!
81
+ say "done".green
82
+ else
83
+ say "Micro Cloud Foundry already in online mode".yellow
84
+ end
85
+ end
86
+
87
+ def status
88
+ mode = @vmrun.offline? ? 'offline' : 'online'
89
+ say "Micro Cloud Foundry VM currently in #{mode.green} mode"
90
+ # should the VMX path be unescaped?
91
+ say "VMX Path: #{@vmrun.vmx}"
92
+ say "Domain: #{@vmrun.domain.green}"
93
+ say "IP Address: #{@vmrun.ip.green}"
94
+ end
95
+ end
96
+
97
+ end
@@ -0,0 +1,19 @@
1
+ module VMC::Micro::Switcher
2
+
3
+ class Darwin < Base
4
+ def adminrun(command)
5
+ VMC::Micro.run_command("osascript", "-e 'do shell script \"#{command}\" with administrator privileges'")
6
+ end
7
+
8
+ def set_nameserver(domain, ip)
9
+ File.open("/tmp/#{domain}", 'w') { |file| file.write("nameserver #{ip}") }
10
+ adminrun("mkdir -p /etc/resolver;mv /tmp/#{domain} /etc/resolver/")
11
+ end
12
+
13
+ def unset_nameserver(domain, ip)
14
+ err "domain missing" unless domain
15
+ adminrun("rm -f /etc/resolver/#{domain}")
16
+ end
17
+ end
18
+
19
+ end
@@ -0,0 +1,15 @@
1
+ # only used for testing
2
+ module VMC::Micro::Switcher
3
+
4
+ class Dummy < Base
5
+ def adminrun(command)
6
+ end
7
+
8
+ def set_nameserver(domain, ip)
9
+ end
10
+
11
+ def unset_nameserver(domain, ip)
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,16 @@
1
+ module VMC::Micro::Switcher
2
+
3
+ class Linux < Base
4
+ def set_nameserver(domain, ip)
5
+ VMC::Micro.run_command("sudo", "sed -i'.backup' '1 i nameserver #{ip}' /etc/resolv.conf")
6
+ # lock resolv.conf so Network Manager doesn't clear out the file when offline
7
+ VMC::Micro.run_command("sudo", "chattr +i /etc/resolv.conf")
8
+ end
9
+
10
+ def unset_nameserver(domain, ip)
11
+ VMC::Micro.run_command("sudo", "chattr -i /etc/resolv.conf")
12
+ VMC::Micro.run_command("sudo", "sed -i'.backup' '/#{ip}/d' /etc/resolv.conf")
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,31 @@
1
+ module VMC::Micro::Switcher
2
+
3
+ class Windows < Base
4
+ def version?
5
+ VMC::Micro.run_command("cmd", "/c ver").to_s.scan(/\d+\.\d+/).first.to_f
6
+ end
7
+
8
+ def adminrun(command, args=nil)
9
+ if version? > 5.2
10
+ require 'win32ole'
11
+ shell = WIN32OLE.new("Shell.Application")
12
+ shell.ShellExecute(command, args, nil, "runas", 0)
13
+ else
14
+ # on older version this will try to run the command, and if you don't have
15
+ # admin privilges it will tell you so and exit
16
+ VMC::Micro.run_command(command, args)
17
+ end
18
+ end
19
+
20
+ # TODO better method to figure out the interface name is to get the NAT ip and find the
21
+ # interface with the correct subnet
22
+ def set_nameserver(domain, ip)
23
+ adminrun("netsh", "interface ip set dns \"VMware Network Adapter VMnet8\" static #{ip}")
24
+ end
25
+
26
+ def unset_nameserver(domain, ip)
27
+ adminrun("netsh", "interface ip set dns \"VMware Network Adapter VMnet8\" static none")
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,158 @@
1
+ module VMC::Micro
2
+ class VMrun
3
+ attr_reader :vmx, :vmrun
4
+
5
+ def initialize(config)
6
+ @platform = config['platform']
7
+ @user = 'root' # must use root as we muck around with system settings
8
+ @password = config['password']
9
+ @vmrun = config['vmrun']
10
+ @vmx = config['vmx']
11
+
12
+ # TODO honor TMPDIR
13
+ if @platform == :windows
14
+ @temp_dir = ENV['temp']
15
+ else
16
+ @temp_dir = '/tmp'
17
+ end
18
+ end
19
+
20
+ def connection_type
21
+ read_variable('ethernet0.connectionType')
22
+ end
23
+
24
+ def connection_type=(type)
25
+ write_variable("ethernet0.connectionType", type)
26
+ end
27
+
28
+ def nat?
29
+ connection_type == "nat"
30
+ end
31
+
32
+ def bridged?
33
+ connection_type == "bridged"
34
+ end
35
+
36
+ def domain
37
+ # switch to Dir.mktmpdir
38
+ state_config = VMC::Micro.escape_path(File.join(@temp_dir, 'state.yml'))
39
+ run('CopyFileFromGuestToHost', "/var/vcap/bosh/state.yml #{state_config}")
40
+ bosh_config = YAML.load_file(state_config)
41
+ bosh_config['properties']['domain']
42
+ end
43
+
44
+ def ip
45
+ # switch to Dir.mktmpdir
46
+ path = VMC::Micro.escape_path(VMC::Micro.config_file('refresh_ip.rb'))
47
+ ip_file = VMC::Micro.escape_path(File.join(@temp_dir, 'ip.txt'))
48
+ run('CopyFileFromHostToGuest', "#{path} /tmp/refresh_ip.rb")
49
+ run('runProgramInGuest', '/tmp/refresh_ip.rb')
50
+ run('CopyFileFromGuestToHost', "/tmp/ip.txt #{ip_file}")
51
+ File.open(ip_file, 'r') { |file| file.read }
52
+ end
53
+
54
+ def list
55
+ vms = run("list")
56
+ vms.delete_if { |line| line =~ /^Total/ }
57
+ vms.map { |line| VMC::Micro.escape_path(File.expand_path(line)) }
58
+ end
59
+
60
+ def offline?
61
+ command = "-gu #{@user} -gp #{@password} runProgramInGuest"
62
+ args = '/usr/bin/test -e /var/vcap/micro/offline'
63
+ # why not use run_command?
64
+ result = %x{#{@vmrun} #{command} #{@vmx} #{args}}
65
+
66
+ if result.include?('Guest program exited with non-zero exit code: 1')
67
+ return false
68
+ elsif $?.exitstatus == 0
69
+ return true
70
+ else
71
+ raise "failed to execute vmrun:\n#{result}"
72
+ end
73
+ end
74
+
75
+ def offline!
76
+ path = VMC::Micro.escape_path(VMC::Micro.config_file('offline.conf'))
77
+ run('CopyFileFromHostToGuest', "#{path} /etc/dnsmasq.d/offline.conf")
78
+ run('runProgramInGuest', '/usr/bin/touch /var/vcap/micro/offline')
79
+ restart_dnsmasq
80
+ end
81
+
82
+ def online!
83
+ run('runProgramInGuest', '/bin/rm -f /etc/dnsmasq.d/offline.conf')
84
+ run('runProgramInGuest', '/bin/rm -f /var/vcap/micro/offline')
85
+ restart_dnsmasq
86
+ end
87
+
88
+ # check to see if the micro cloud has been configured
89
+ # uses default password to check
90
+ def ready?
91
+ command = "-gu root -gp 'ca$hc0w' runProgramInGuest"
92
+ args = '/usr/bin/test -e /var/vcap/micro/micro.json'
93
+ result = %x{#{@vmrun} #{command} #{@vmx} #{args}}
94
+
95
+ if result.include?('Invalid user name or password for the guest OS') || $?.exitstatus == 0
96
+ return true
97
+ elsif $?.exitstatus == 1
98
+ return false
99
+ else
100
+ raise "failed to execute vmrun:\n#{result}"
101
+ end
102
+ end
103
+
104
+ def read_variable(var)
105
+ # TODO deal with non-ok return
106
+ run("readVariable", "runtimeConfig #{var}").first
107
+ end
108
+
109
+ def write_variable(var, value)
110
+ run('writeVariable', "runtimeConfig #{var} #{value}")
111
+ end
112
+
113
+ def reset
114
+ run('reset', 'soft')
115
+ end
116
+
117
+ def restart_dnsmasq
118
+ # restart command doesn't always work, start and stop seems to be more reliable
119
+ run('runProgramInGuest', '/etc/init.d/dnsmasq stop')
120
+ run('runProgramInGuest', '/etc/init.d/dnsmasq start')
121
+ end
122
+
123
+ def run(command, args=nil)
124
+ if command.include?('Guest')
125
+ command = "-gu #{@user} -gp #{@password} #{command}"
126
+ end
127
+ VMC::Micro.run_command(@vmrun, "#{command} #{@vmx} #{args}")
128
+ end
129
+
130
+ def running?
131
+ vms = list
132
+ if @platform == :windows
133
+ vms.map! { |x| x.downcase }
134
+ vms.include?(@vmx.downcase)
135
+ else
136
+ vms.include?(@vmx)
137
+ end
138
+ end
139
+
140
+ def start
141
+ run('start') unless running?
142
+ end
143
+
144
+ def stop
145
+ run('stop') if running?
146
+ end
147
+
148
+ def self.locate(platform)
149
+ paths = YAML.load_file(VMC::Micro.config_file('paths.yml'))
150
+ vmrun_paths = paths[platform.to_s]['vmrun']
151
+ vmrun_exe = @platform == :windows ? 'vmrun.exe' : 'vmrun'
152
+ vmrun = VMC::Micro.locate_file(vmrun_exe, "VMware", vmrun_paths)
153
+ err "Unable to locate vmrun, please supply --vmrun option" unless vmrun
154
+ vmrun
155
+ end
156
+ end
157
+
158
+ end
metadata CHANGED
@@ -1,28 +1,218 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196465
4
+ hash: 62196471
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
9
  - 0
10
10
  - beta
11
- - 9
12
- version: 0.4.0.beta.9
11
+ - 10
12
+ version: 0.4.0.beta.10
13
13
  platform: ruby
14
14
  authors:
15
- - Alex Suraci
15
+ - VMware
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-06-14 00:00:00 Z
20
+ date: 2012-06-15 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: json_pure
24
24
  prerelease: false
25
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - <
29
+ - !ruby/object:Gem::Version
30
+ hash: 11
31
+ segments:
32
+ - 1
33
+ - 7
34
+ - 0
35
+ version: 1.7.0
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ hash: 1
39
+ segments:
40
+ - 1
41
+ - 5
42
+ - 1
43
+ version: 1.5.1
44
+ type: :runtime
45
+ version_requirements: *id001
46
+ - !ruby/object:Gem::Dependency
47
+ name: rubyzip
48
+ prerelease: false
49
+ requirement: &id002 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ hash: 51
55
+ segments:
56
+ - 0
57
+ - 9
58
+ - 4
59
+ version: 0.9.4
60
+ type: :runtime
61
+ version_requirements: *id002
62
+ - !ruby/object:Gem::Dependency
63
+ name: rest-client
64
+ prerelease: false
65
+ requirement: &id003 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - <
69
+ - !ruby/object:Gem::Version
70
+ hash: 11
71
+ segments:
72
+ - 1
73
+ - 7
74
+ - 0
75
+ version: 1.7.0
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 13
79
+ segments:
80
+ - 1
81
+ - 6
82
+ - 1
83
+ version: 1.6.1
84
+ type: :runtime
85
+ version_requirements: *id003
86
+ - !ruby/object:Gem::Dependency
87
+ name: terminal-table
88
+ prerelease: false
89
+ requirement: &id004 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ hash: 3
95
+ segments:
96
+ - 1
97
+ - 4
98
+ - 2
99
+ version: 1.4.2
100
+ type: :runtime
101
+ version_requirements: *id004
102
+ - !ruby/object:Gem::Dependency
103
+ name: interact
104
+ prerelease: false
105
+ requirement: &id005 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ hash: 15
111
+ segments:
112
+ - 0
113
+ - 4
114
+ - 0
115
+ version: 0.4.0
116
+ type: :runtime
117
+ version_requirements: *id005
118
+ - !ruby/object:Gem::Dependency
119
+ name: addressable
120
+ prerelease: false
121
+ requirement: &id006 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ hash: 11
127
+ segments:
128
+ - 2
129
+ - 2
130
+ - 6
131
+ version: 2.2.6
132
+ type: :runtime
133
+ version_requirements: *id006
134
+ - !ruby/object:Gem::Dependency
135
+ name: uuidtools
136
+ prerelease: false
137
+ requirement: &id007 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ hash: 11
143
+ segments:
144
+ - 2
145
+ - 1
146
+ - 0
147
+ version: 2.1.0
148
+ type: :runtime
149
+ version_requirements: *id007
150
+ - !ruby/object:Gem::Dependency
151
+ name: rb-readline
152
+ prerelease: false
153
+ requirement: &id008 !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ hash: 11
159
+ segments:
160
+ - 0
161
+ - 4
162
+ - 2
163
+ version: 0.4.2
164
+ type: :runtime
165
+ version_requirements: *id008
166
+ - !ruby/object:Gem::Dependency
167
+ name: rake
168
+ prerelease: false
169
+ requirement: &id009 !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ hash: 3
175
+ segments:
176
+ - 0
177
+ version: "0"
178
+ type: :runtime
179
+ version_requirements: *id009
180
+ - !ruby/object:Gem::Dependency
181
+ name: rspec
182
+ prerelease: false
183
+ requirement: &id010 !ruby/object:Gem::Requirement
184
+ none: false
185
+ requirements:
186
+ - - ~>
187
+ - !ruby/object:Gem::Version
188
+ hash: 27
189
+ segments:
190
+ - 1
191
+ - 3
192
+ - 0
193
+ version: 1.3.0
194
+ type: :runtime
195
+ version_requirements: *id010
196
+ - !ruby/object:Gem::Dependency
197
+ name: webmock
198
+ prerelease: false
199
+ requirement: &id011 !ruby/object:Gem::Requirement
200
+ none: false
201
+ requirements:
202
+ - - ~>
203
+ - !ruby/object:Gem::Version
204
+ hash: 3
205
+ segments:
206
+ - 1
207
+ - 5
208
+ - 0
209
+ version: 1.5.0
210
+ type: :runtime
211
+ version_requirements: *id011
212
+ - !ruby/object:Gem::Dependency
213
+ name: json_pure
214
+ prerelease: false
215
+ requirement: &id012 !ruby/object:Gem::Requirement
26
216
  none: false
27
217
  requirements:
28
218
  - - ~>
@@ -34,11 +224,11 @@ dependencies:
34
224
  - 5
35
225
  version: 1.6.5
36
226
  type: :runtime
37
- version_requirements: *id001
227
+ version_requirements: *id012
38
228
  - !ruby/object:Gem::Dependency
39
229
  name: interact
40
230
  prerelease: false
41
- requirement: &id002 !ruby/object:Gem::Requirement
231
+ requirement: &id013 !ruby/object:Gem::Requirement
42
232
  none: false
43
233
  requirements:
44
234
  - - ~>
@@ -50,11 +240,11 @@ dependencies:
50
240
  - 1
51
241
  version: 0.4.1
52
242
  type: :runtime
53
- version_requirements: *id002
243
+ version_requirements: *id013
54
244
  - !ruby/object:Gem::Dependency
55
245
  name: cfoundry
56
246
  prerelease: false
57
- requirement: &id003 !ruby/object:Gem::Requirement
247
+ requirement: &id014 !ruby/object:Gem::Requirement
58
248
  none: false
59
249
  requirements:
60
250
  - - ~>
@@ -66,11 +256,11 @@ dependencies:
66
256
  - 2
67
257
  version: 0.2.2
68
258
  type: :runtime
69
- version_requirements: *id003
259
+ version_requirements: *id014
70
260
  - !ruby/object:Gem::Dependency
71
261
  name: thor
72
262
  prerelease: false
73
- requirement: &id004 !ruby/object:Gem::Requirement
263
+ requirement: &id015 !ruby/object:Gem::Requirement
74
264
  none: false
75
265
  requirements:
76
266
  - - ~>
@@ -82,11 +272,11 @@ dependencies:
82
272
  - 6
83
273
  version: 0.14.6
84
274
  type: :runtime
85
- version_requirements: *id004
275
+ version_requirements: *id015
86
276
  - !ruby/object:Gem::Dependency
87
277
  name: manifests-vmc-plugin
88
278
  prerelease: false
89
- requirement: &id005 !ruby/object:Gem::Requirement
279
+ requirement: &id016 !ruby/object:Gem::Requirement
90
280
  none: false
91
281
  requirements:
92
282
  - - ~>
@@ -98,10 +288,9 @@ dependencies:
98
288
  - 2
99
289
  version: 0.2.2
100
290
  type: :runtime
101
- version_requirements: *id005
291
+ version_requirements: *id016
102
292
  description:
103
- email:
104
- - asuraci@vmware.com
293
+ email: support@vmware.com
105
294
  executables:
106
295
  - vmc
107
296
  extensions: []
@@ -109,30 +298,73 @@ extensions: []
109
298
  extra_rdoc_files: []
110
299
 
111
300
  files:
112
- - LICENSE
113
- - Rakefile
114
- - lib/vmc/cli/app.rb
115
- - lib/vmc/cli/better_help.rb
116
- - lib/vmc/cli/command.rb
117
- - lib/vmc/cli/dots.rb
118
- - lib/vmc/cli/service.rb
119
- - lib/vmc/cli/user.rb
120
- - lib/vmc/cli.rb
121
- - lib/vmc/constants.rb
122
- - lib/vmc/detect.rb
123
- - lib/vmc/errors.rb
124
- - lib/vmc/plugin.rb
125
- - lib/vmc/version.rb
126
- - lib/vmc.rb
301
+ - vmc/LICENSE
302
+ - vmc/README.md
303
+ - vmc/Rakefile
304
+ - vmc/config/clients.yml
305
+ - vmc/config/micro/offline.conf
306
+ - vmc/config/micro/paths.yml
307
+ - vmc/config/micro/refresh_ip.rb
308
+ - vmc/lib/cli/commands/admin.rb
309
+ - vmc/lib/cli/commands/apps.rb
310
+ - vmc/lib/cli/commands/base.rb
311
+ - vmc/lib/cli/commands/manifest.rb
312
+ - vmc/lib/cli/commands/micro.rb
313
+ - vmc/lib/cli/commands/misc.rb
314
+ - vmc/lib/cli/commands/services.rb
315
+ - vmc/lib/cli/commands/user.rb
316
+ - vmc/lib/cli/config.rb
317
+ - vmc/lib/cli/console_helper.rb
318
+ - vmc/lib/cli/core_ext.rb
319
+ - vmc/lib/cli/errors.rb
320
+ - vmc/lib/cli/frameworks.rb
321
+ - vmc/lib/cli/manifest_helper.rb
322
+ - vmc/lib/cli/runner.rb
323
+ - vmc/lib/cli/services_helper.rb
324
+ - vmc/lib/cli/tunnel_helper.rb
325
+ - vmc/lib/cli/usage.rb
326
+ - vmc/lib/cli/version.rb
327
+ - vmc/lib/cli/zip_util.rb
328
+ - vmc/lib/cli.rb
329
+ - vmc/lib/vmc/client.rb
330
+ - vmc/lib/vmc/const.rb
331
+ - vmc/lib/vmc/micro/switcher/base.rb
332
+ - vmc/lib/vmc/micro/switcher/darwin.rb
333
+ - vmc/lib/vmc/micro/switcher/dummy.rb
334
+ - vmc/lib/vmc/micro/switcher/linux.rb
335
+ - vmc/lib/vmc/micro/switcher/windows.rb
336
+ - vmc/lib/vmc/micro/vmrun.rb
337
+ - vmc/lib/vmc/micro.rb
338
+ - vmc/lib/vmc.rb
339
+ - vmc/caldecott_helper/Gemfile
340
+ - vmc/caldecott_helper/Gemfile.lock
341
+ - vmc/caldecott_helper/server.rb
342
+ - vmc/bin/vmc
343
+ - vmc-ng/LICENSE
344
+ - vmc-ng/Rakefile
345
+ - vmc-ng/lib/vmc/cli/app.rb
346
+ - vmc-ng/lib/vmc/cli/better_help.rb
347
+ - vmc-ng/lib/vmc/cli/command.rb
348
+ - vmc-ng/lib/vmc/cli/dots.rb
349
+ - vmc-ng/lib/vmc/cli/service.rb
350
+ - vmc-ng/lib/vmc/cli/user.rb
351
+ - vmc-ng/lib/vmc/cli.rb
352
+ - vmc-ng/lib/vmc/constants.rb
353
+ - vmc-ng/lib/vmc/detect.rb
354
+ - vmc-ng/lib/vmc/errors.rb
355
+ - vmc-ng/lib/vmc/plugin.rb
356
+ - vmc-ng/lib/vmc/version.rb
357
+ - vmc-ng/lib/vmc.rb
358
+ - vmc-ng/bin/vmc
127
359
  - bin/vmc
128
- homepage: http://cloudfoundry.com/
360
+ homepage: http://vmware.com
129
361
  licenses: []
130
362
 
131
363
  post_install_message:
132
364
  rdoc_options: []
133
365
 
134
366
  require_paths:
135
- - lib
367
+ - vmc/lib
136
368
  required_ruby_version: !ruby/object:Gem::Requirement
137
369
  none: false
138
370
  requirements:
@@ -155,10 +387,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
387
  version: 1.3.1
156
388
  requirements: []
157
389
 
158
- rubyforge_project: vmc
390
+ rubyforge_project:
159
391
  rubygems_version: 1.8.23
160
392
  signing_key:
161
393
  specification_version: 3
162
- summary: Friendly command-line interface for Cloud Foundry.
394
+ summary: Client library and CLI that provides access to the VMware Cloud Application Platform.
163
395
  test_files: []
164
396