vmc 0.4.0.beta.5 → 0.4.0.beta.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/{vmc-ng/LICENSE → LICENSE} +0 -0
  2. data/{vmc-ng/Rakefile → Rakefile} +0 -0
  3. data/bin/vmc +10 -11
  4. data/{vmc-ng/lib → lib}/vmc.rb +0 -0
  5. data/{vmc-ng/lib → lib}/vmc/cli.rb +17 -9
  6. data/{vmc-ng/lib → lib}/vmc/cli/app.rb +31 -31
  7. data/{vmc-ng/lib → lib}/vmc/cli/better_help.rb +0 -0
  8. data/{vmc-ng/lib → lib}/vmc/cli/command.rb +6 -6
  9. data/{vmc-ng/lib → lib}/vmc/cli/dots.rb +63 -8
  10. data/{vmc-ng/lib → lib}/vmc/cli/service.rb +6 -6
  11. data/{vmc-ng/lib → lib}/vmc/cli/user.rb +2 -2
  12. data/{vmc-ng/lib → lib}/vmc/constants.rb +1 -0
  13. data/{vmc-ng/lib → lib}/vmc/detect.rb +0 -0
  14. data/{vmc-ng/lib → lib}/vmc/errors.rb +0 -0
  15. data/{vmc-ng/lib → lib}/vmc/plugin.rb +0 -0
  16. data/lib/vmc/version.rb +3 -0
  17. metadata +33 -281
  18. data/vmc-ng/bin/vmc +0 -14
  19. data/vmc-ng/lib/vmc/version.rb +0 -3
  20. data/vmc/LICENSE +0 -24
  21. data/vmc/README.md +0 -102
  22. data/vmc/Rakefile +0 -101
  23. data/vmc/bin/vmc +0 -6
  24. data/vmc/caldecott_helper/Gemfile +0 -10
  25. data/vmc/caldecott_helper/Gemfile.lock +0 -48
  26. data/vmc/caldecott_helper/server.rb +0 -43
  27. data/vmc/config/clients.yml +0 -17
  28. data/vmc/config/micro/offline.conf +0 -2
  29. data/vmc/config/micro/paths.yml +0 -22
  30. data/vmc/config/micro/refresh_ip.rb +0 -20
  31. data/vmc/lib/cli.rb +0 -47
  32. data/vmc/lib/cli/commands/admin.rb +0 -80
  33. data/vmc/lib/cli/commands/apps.rb +0 -1126
  34. data/vmc/lib/cli/commands/base.rb +0 -227
  35. data/vmc/lib/cli/commands/manifest.rb +0 -56
  36. data/vmc/lib/cli/commands/micro.rb +0 -115
  37. data/vmc/lib/cli/commands/misc.rb +0 -129
  38. data/vmc/lib/cli/commands/services.rb +0 -180
  39. data/vmc/lib/cli/commands/user.rb +0 -65
  40. data/vmc/lib/cli/config.rb +0 -173
  41. data/vmc/lib/cli/console_helper.rb +0 -160
  42. data/vmc/lib/cli/core_ext.rb +0 -122
  43. data/vmc/lib/cli/errors.rb +0 -19
  44. data/vmc/lib/cli/frameworks.rb +0 -265
  45. data/vmc/lib/cli/manifest_helper.rb +0 -302
  46. data/vmc/lib/cli/runner.rb +0 -531
  47. data/vmc/lib/cli/services_helper.rb +0 -84
  48. data/vmc/lib/cli/tunnel_helper.rb +0 -332
  49. data/vmc/lib/cli/usage.rb +0 -115
  50. data/vmc/lib/cli/version.rb +0 -7
  51. data/vmc/lib/cli/zip_util.rb +0 -77
  52. data/vmc/lib/vmc.rb +0 -3
  53. data/vmc/lib/vmc/client.rb +0 -471
  54. data/vmc/lib/vmc/const.rb +0 -22
  55. data/vmc/lib/vmc/micro.rb +0 -56
  56. data/vmc/lib/vmc/micro/switcher/base.rb +0 -97
  57. data/vmc/lib/vmc/micro/switcher/darwin.rb +0 -19
  58. data/vmc/lib/vmc/micro/switcher/dummy.rb +0 -15
  59. data/vmc/lib/vmc/micro/switcher/linux.rb +0 -16
  60. data/vmc/lib/vmc/micro/switcher/windows.rb +0 -31
  61. data/vmc/lib/vmc/micro/vmrun.rb +0 -158
@@ -1,22 +0,0 @@
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
@@ -1,56 +0,0 @@
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
@@ -1,97 +0,0 @@
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
@@ -1,19 +0,0 @@
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
@@ -1,15 +0,0 @@
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
@@ -1,16 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,158 +0,0 @@
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