jdc 0.1.2 → 0.2.0

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.
Files changed (151) hide show
  1. data/LICENSE +1277 -24
  2. data/Rakefile +13 -0
  3. data/bin/jdc +12 -2
  4. data/lib/admin/README.md +15 -0
  5. data/lib/admin/curl.rb +60 -0
  6. data/lib/admin/guid.rb +89 -0
  7. data/lib/admin/plugin.rb +6 -0
  8. data/lib/admin/service_auth_token.rb +94 -0
  9. data/lib/admin/service_broker/add.rb +47 -0
  10. data/lib/admin/service_broker/service_brokers.rb +24 -0
  11. data/lib/admin/set_quota.rb +44 -0
  12. data/lib/console/README.md +8 -0
  13. data/lib/console/console.rb +187 -0
  14. data/lib/console/plugin.rb +33 -0
  15. data/lib/jdc/cli/app/app.rb +43 -0
  16. data/lib/jdc/cli/app/apps.rb +87 -0
  17. data/lib/jdc/cli/app/base.rb +72 -0
  18. data/lib/jdc/cli/app/delete.rb +95 -0
  19. data/lib/jdc/cli/app/deprecated.rb +11 -0
  20. data/lib/jdc/cli/app/env.rb +78 -0
  21. data/lib/jdc/cli/app/events.rb +45 -0
  22. data/lib/jdc/cli/app/files.rb +137 -0
  23. data/lib/jdc/cli/app/health.rb +26 -0
  24. data/lib/jdc/cli/app/instances.rb +53 -0
  25. data/lib/jdc/cli/app/logs.rb +76 -0
  26. data/lib/jdc/cli/app/push/create.rb +108 -0
  27. data/lib/jdc/cli/app/push/interactions.rb +86 -0
  28. data/lib/jdc/cli/app/push/sync.rb +57 -0
  29. data/lib/jdc/cli/app/push.rb +103 -0
  30. data/lib/jdc/cli/app/rename.rb +35 -0
  31. data/lib/jdc/cli/app/restart.rb +31 -0
  32. data/lib/jdc/cli/app/scale.rb +63 -0
  33. data/lib/jdc/cli/app/start.rb +161 -0
  34. data/lib/jdc/cli/app/stats.rb +67 -0
  35. data/lib/jdc/cli/app/stop.rb +27 -0
  36. data/lib/jdc/cli/domain/base.rb +9 -0
  37. data/lib/jdc/cli/domain/domains.rb +40 -0
  38. data/lib/jdc/cli/domain/map.rb +55 -0
  39. data/lib/jdc/cli/domain/unmap.rb +56 -0
  40. data/lib/jdc/cli/help.rb +15 -0
  41. data/lib/jdc/cli/interactive.rb +105 -0
  42. data/lib/jdc/cli/login_requirements.rb +15 -0
  43. data/lib/jdc/cli/organization/base.rb +14 -0
  44. data/lib/jdc/cli/organization/create.rb +37 -0
  45. data/lib/jdc/cli/organization/delete.rb +63 -0
  46. data/lib/jdc/cli/organization/org.rb +45 -0
  47. data/lib/jdc/cli/organization/orgs.rb +30 -0
  48. data/lib/jdc/cli/organization/rename.rb +37 -0
  49. data/lib/jdc/cli/populators/base.rb +16 -0
  50. data/lib/jdc/cli/populators/organization.rb +32 -0
  51. data/lib/jdc/cli/populators/populator_methods.rb +64 -0
  52. data/lib/jdc/cli/populators/space.rb +33 -0
  53. data/lib/jdc/cli/populators/target.rb +13 -0
  54. data/lib/jdc/cli/route/base.rb +9 -0
  55. data/lib/jdc/cli/route/delete.rb +28 -0
  56. data/lib/jdc/cli/route/map.rb +68 -0
  57. data/lib/jdc/cli/route/routes.rb +26 -0
  58. data/lib/jdc/cli/route/unmap.rb +56 -0
  59. data/lib/jdc/cli/service/base.rb +9 -0
  60. data/lib/jdc/cli/service/bind.rb +44 -0
  61. data/lib/jdc/cli/service/create.rb +159 -0
  62. data/lib/jdc/cli/service/delete.rb +83 -0
  63. data/lib/jdc/cli/service/rename.rb +36 -0
  64. data/lib/jdc/cli/service/service.rb +42 -0
  65. data/lib/jdc/cli/service/service_instance_helper.rb +99 -0
  66. data/lib/jdc/cli/service/services.rb +111 -0
  67. data/lib/jdc/cli/service/unbind.rb +37 -0
  68. data/lib/jdc/cli/space/base.rb +29 -0
  69. data/lib/jdc/cli/space/create.rb +67 -0
  70. data/lib/jdc/cli/space/delete.rb +56 -0
  71. data/lib/jdc/cli/space/rename.rb +38 -0
  72. data/lib/jdc/cli/space/space.rb +66 -0
  73. data/lib/jdc/cli/space/spaces.rb +57 -0
  74. data/lib/jdc/cli/space/switch.rb +19 -0
  75. data/lib/jdc/cli/start/base.rb +41 -0
  76. data/lib/jdc/cli/start/colors.rb +13 -0
  77. data/lib/jdc/cli/start/target.rb +50 -0
  78. data/lib/jdc/cli/start/target_prettifier.rb +17 -0
  79. data/lib/jdc/cli/start/targets.rb +16 -0
  80. data/lib/jdc/cli/user/base.rb +30 -0
  81. data/lib/jdc/cli/user/create.rb +52 -0
  82. data/lib/jdc/cli/user/passwd.rb +37 -0
  83. data/lib/jdc/cli/user/register.rb +43 -0
  84. data/lib/jdc/cli/user/users.rb +32 -0
  85. data/lib/jdc/cli.rb +544 -0
  86. data/lib/jdc/constants.rb +11 -0
  87. data/lib/jdc/errors.rb +19 -0
  88. data/lib/jdc/object_extensions.rb +15 -0
  89. data/lib/jdc/plugin.rb +56 -0
  90. data/lib/jdc/spacing.rb +89 -0
  91. data/lib/jdc/spec_helper.rb +1 -0
  92. data/lib/jdc/test_support.rb +6 -0
  93. data/lib/jdc/version.rb +3 -0
  94. data/lib/jdc.rb +15 -2
  95. data/lib/manifests/errors.rb +35 -0
  96. data/lib/manifests/loader/builder.rb +39 -0
  97. data/lib/manifests/loader/normalizer.rb +145 -0
  98. data/lib/manifests/loader/resolver.rb +79 -0
  99. data/lib/manifests/loader.rb +31 -0
  100. data/lib/manifests/manifests.rb +344 -0
  101. data/lib/manifests/plugin.rb +140 -0
  102. data/lib/micro/README.md +9 -0
  103. data/lib/micro/errors.rb +4 -0
  104. data/lib/{jdc → micro}/micro.rb +15 -15
  105. data/lib/micro/plugin.rb +197 -0
  106. data/lib/micro/switcher/base.rb +79 -0
  107. data/lib/{jdc/micro → micro}/switcher/darwin.rb +5 -3
  108. data/lib/{jdc/micro → micro}/switcher/dummy.rb +1 -1
  109. data/lib/micro/switcher/linux.rb +16 -0
  110. data/lib/{jdc/micro → micro}/switcher/windows.rb +5 -5
  111. data/lib/{jdc/micro → micro}/vmrun.rb +26 -19
  112. data/lib/tasks/gem_release.rake +42 -0
  113. data/lib/tunnel/README.md +29 -0
  114. data/{config → lib/tunnel/config}/clients.yml +2 -2
  115. data/lib/tunnel/helper-app/Gemfile +10 -0
  116. data/lib/tunnel/helper-app/Gemfile.lock +48 -0
  117. data/{caldecott_helper → lib/tunnel/helper-app}/server.rb +5 -5
  118. data/lib/tunnel/plugin.rb +183 -0
  119. data/lib/tunnel/tunnel.rb +295 -0
  120. metadata +319 -89
  121. data/README.md +0 -102
  122. data/config/micro/paths.yml +0 -22
  123. data/config/micro/refresh_ip.rb +0 -20
  124. data/lib/cli/commands/admin.rb +0 -58
  125. data/lib/cli/commands/apps.rb +0 -1129
  126. data/lib/cli/commands/base.rb +0 -228
  127. data/lib/cli/commands/manifest.rb +0 -56
  128. data/lib/cli/commands/micro.rb +0 -115
  129. data/lib/cli/commands/misc.rb +0 -126
  130. data/lib/cli/commands/services.rb +0 -178
  131. data/lib/cli/commands/user.rb +0 -14
  132. data/lib/cli/config.rb +0 -173
  133. data/lib/cli/console_helper.rb +0 -170
  134. data/lib/cli/core_ext.rb +0 -122
  135. data/lib/cli/errors.rb +0 -19
  136. data/lib/cli/frameworks.rb +0 -265
  137. data/lib/cli/manifest_helper.rb +0 -302
  138. data/lib/cli/runner.rb +0 -505
  139. data/lib/cli/services_helper.rb +0 -84
  140. data/lib/cli/tunnel_helper.rb +0 -332
  141. data/lib/cli/usage.rb +0 -86
  142. data/lib/cli/version.rb +0 -7
  143. data/lib/cli/zip_util.rb +0 -77
  144. data/lib/cli.rb +0 -53
  145. data/lib/jdc/client.rb +0 -457
  146. data/lib/jdc/const.rb +0 -25
  147. data/lib/jdc/micro/switcher/base.rb +0 -97
  148. data/lib/jdc/micro/switcher/linux.rb +0 -16
  149. data/lib/jdc/signature/version.rb +0 -27
  150. data/lib/jdc/signer.rb +0 -13
  151. data/lib/jdc/timer.rb +0 -12
@@ -0,0 +1,197 @@
1
+ require "yaml"
2
+ require "multi_json"
3
+ require "jdc/cli"
4
+ require "micro/micro"
5
+ require "micro/vmrun"
6
+ require "micro/switcher/base"
7
+ require "micro/switcher/darwin"
8
+ require "micro/switcher/linux"
9
+ require "micro/switcher/windows"
10
+
11
+ module JDCMicro
12
+ class McfCommand < JDC::CLI
13
+ MICRO_FILE = '~/.jdc/micro.yml'
14
+
15
+ desc "Display Micro Cloud Foundry VM status"
16
+ input :vmx, :argument => :required,
17
+ :desc => "Path to micro.vmx"
18
+ input :password, :argument => :optional,
19
+ :desc => "Cleartext password for guest VM vcap user"
20
+ def micro_status
21
+ mode = runner.offline? ? 'offline' : 'online'
22
+
23
+ line "Micro Cloud Foundry VM currently in #{b(mode)} mode"
24
+ line "VMX Path: #{c(runner.vmx, :good)}"
25
+ line "Domain: #{c(runner.domain, :good)}"
26
+ line "IP Address: #{c(runner.ip, :good)}"
27
+ end
28
+
29
+ desc "Micro Cloud Foundry offline mode"
30
+ input :vmx, :argument => :required,
31
+ :desc => "Path to micro.vmx"
32
+ input :password, :argument => :optional,
33
+ :desc => "Cleartext password for guest VM vcap user"
34
+ def micro_offline
35
+ if !runner.nat?
36
+ if ask("Reconfigure MCF VM network to nat mode and reboot?", :default => true)
37
+ with_progress("Rebooting MCF VM") do
38
+ runner.reset_to_nat!
39
+ end
40
+ else
41
+ fail "Aborted"
42
+ end
43
+ end
44
+
45
+ with_progress("Setting MCF VM to offline mode") do
46
+ runner.offline!
47
+ end
48
+
49
+ with_progress("Setting host DNS server") do
50
+ runner.set_host_dns!
51
+ end
52
+ end
53
+
54
+ desc "Micro Cloud Foundry online mode"
55
+ input :vmx, :argument => :required,
56
+ :desc => "Path to micro.vmx"
57
+ input :password, :argument => :optional,
58
+ :desc => "Cleartext password for guest VM vcap user"
59
+ def micro_online
60
+ runner
61
+ with_progress("Unsetting host DNS server") do
62
+ runner.unset_host_dns!
63
+ end
64
+
65
+ with_progress("Setting MCF VM to online mode") do
66
+ runner.online!
67
+ end
68
+ end
69
+
70
+ def runner
71
+ return @runner if @runner
72
+
73
+ config = build_config
74
+ @runner = switcher(config)
75
+ check_vm_running
76
+ store_config(config)
77
+
78
+ @runner
79
+ end
80
+
81
+ def check_vm_running
82
+ unless runner.running?
83
+ if ask("MCF VM is not running. Do you want to start it?", :default => true)
84
+ with_progress("Starting MCF VM") do
85
+ runner.start!
86
+ end
87
+ else
88
+ fail "MCF VM needs to be running."
89
+ end
90
+ end
91
+
92
+ unless runner.ready?
93
+ fail "MCF VM initial setup needs to be completed before using 'jdc micro'"
94
+ end
95
+ end
96
+
97
+ def switcher(config)
98
+ case McfCommand.platform
99
+ when :darwin
100
+ JDCMicro::Switcher::Darwin.new(config)
101
+ when :linux
102
+ JDCMicro::Switcher::Linux.new(config)
103
+ when :windows
104
+ JDCMicro::Switcher::Windows.new(config)
105
+ when :dummy # for testing only
106
+ JDCMicro::Switcher::Dummy.new(config)
107
+ else
108
+ fail "unsupported platform: #{McfCommand.platform}"
109
+ end
110
+ end
111
+
112
+ # Returns the configuration needed to run the micro related subcommands.
113
+ # First loads saved config from file (if there is any), then overrides
114
+ # loaded values with command line arguments, and finally tries to guess
115
+ # in case neither was used:
116
+ # vmx location of micro.vmx file
117
+ # vmrun location of vmrun command
118
+ # password password for vcap user (in the guest vm)
119
+ # platform current platform
120
+ def build_config
121
+ conf = micro # returns {} if there isn't a saved config
122
+
123
+ override(conf, :vmx, true) do
124
+ locate_vmx(McfCommand.platform)
125
+ end
126
+
127
+ override(conf, :vmrun, true) do
128
+ JDCMicro::VMrun.locate(McfCommand.platform)
129
+ end
130
+
131
+ override(conf, :password) do
132
+ ask("Please enter your MCF VM password (vcap user) password", :echo => "*")
133
+ end
134
+
135
+ conf[:platform] = McfCommand.platform
136
+
137
+ conf
138
+ end
139
+
140
+ # Save the cleartext password if --save is supplied.
141
+ # Note: it is due to vix we have to use a cleartext password :(
142
+ # Only if --password is used and not --save is the password deleted from the
143
+ # config file before it is stored to disk.
144
+ def store_config(config)
145
+ if input[:save]
146
+ warn("cleartext password saved in: #{MICRO_FILE}")
147
+ end
148
+
149
+ store_micro(config)
150
+ end
151
+
152
+ # override with command line arguments and yield the block in case the option isn't set
153
+ def override(config, option, escape=false, &blk)
154
+ # override if given on the command line
155
+ if opt = input[option]
156
+ opt = JDCMicro.escape_path(opt) if escape
157
+ config[option] = opt
158
+ end
159
+ config[option] = yield unless config[option]
160
+ end
161
+
162
+ def locate_vmx(platform)
163
+ paths = YAML.load_file(JDCMicro.config_file('paths.yml'))
164
+ vmx_paths = paths[platform.to_s]['vmx']
165
+ vmx = JDCMicro.locate_file('micro.vmx', 'micro', vmx_paths)
166
+ fail "Unable to locate micro.vmx, please supply --vmx option" unless vmx
167
+ vmx
168
+ end
169
+
170
+ def self.platform
171
+ case RUBY_PLATFORM
172
+ when /darwin/ # x86_64-darwin11.2.0
173
+ :darwin
174
+ when /linux/ # x86_64-linux
175
+ :linux
176
+ when /mingw|mswin32|cygwin/ # i386-mingw32
177
+ :windows
178
+ else
179
+ RUBY_PLATFORM
180
+ end
181
+ end
182
+
183
+ def micro
184
+ micro_file = File.expand_path(MICRO_FILE)
185
+ return {} unless File.exists? micro_file
186
+ contents = File.read(micro_file).strip
187
+ MultiJson.load(contents)
188
+ end
189
+
190
+ def store_micro(micro)
191
+ micro_file = File.expand_path(MICRO_FILE)
192
+ File.open(micro_file, 'w') do |file|
193
+ file.write(MultiJson.dump(micro))
194
+ end
195
+ end
196
+ end
197
+ end
@@ -0,0 +1,79 @@
1
+ require "micro/errors"
2
+
3
+ module JDCMicro::Switcher
4
+ class Base
5
+
6
+ def initialize(config)
7
+ @config = config
8
+
9
+ @vmrun = JDCMicro::VMrun.new(config)
10
+ end
11
+
12
+ #wrapper methods
13
+ def vmx
14
+ @vmrun.vmx
15
+ end
16
+
17
+ def domain
18
+ @vmrun.domain
19
+ end
20
+
21
+ def ip
22
+ @vmrun.ip
23
+ end
24
+
25
+ def running?
26
+ @vmrun.running?
27
+ end
28
+
29
+ def start!
30
+ @vmrun.start!
31
+ end
32
+
33
+ def ready?
34
+ @vmrun.ready?
35
+ end
36
+
37
+ def offline?
38
+ @vmrun.offline?
39
+ end
40
+
41
+ def nat?
42
+ @config['online_connection_type'] ||= @vmrun.connection_type
43
+ @config["online_connection_type"] == "nat"
44
+ end
45
+
46
+ def reset_to_nat!
47
+ @vmrun.connection_type = 'nat'
48
+ @vmrun.reset
49
+ end
50
+
51
+ def set_host_dns!
52
+ @config['domain'] ||= @vmrun.domain
53
+ @config['ip'] ||= @vmrun.ip
54
+ set_nameserver(@config['domain'], @config['ip'])
55
+ end
56
+
57
+ def unset_host_dns!
58
+ @config['domain'] ||= @vmrun.domain
59
+ @config['ip'] ||= @vmrun.ip
60
+ unset_nameserver(@config['domain'], @config['ip'])
61
+ end
62
+
63
+ def offline!
64
+ if @vmrun.offline?
65
+ raise JDCMicro::MCFError, "Micro Cloud Foundry VM already in offline mode"
66
+ else
67
+ @vmrun.offline!
68
+ end
69
+ end
70
+
71
+ def online!
72
+ if @vmrun.offline?
73
+ @vmrun.online!
74
+ else
75
+ raise JDCMirco::MCFError, "Micro Cloud Foundry already in online mode"
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,8 +1,10 @@
1
- module JDC::Micro::Switcher
1
+ require "micro/errors"
2
+
3
+ module JDCMicro::Switcher
2
4
 
3
5
  class Darwin < Base
4
6
  def adminrun(command)
5
- JDC::Micro.run_command("osascript", "-e 'do shell script \"#{command}\" with administrator privileges'")
7
+ JDCMicro.run_command("osascript", "-e 'do shell script \"#{command}\" with administrator privileges'")
6
8
  end
7
9
 
8
10
  def set_nameserver(domain, ip)
@@ -11,7 +13,7 @@ module JDC::Micro::Switcher
11
13
  end
12
14
 
13
15
  def unset_nameserver(domain, ip)
14
- err "domain missing" unless domain
16
+ raise JDCMicro::MCFError, "domain missing" unless domain
15
17
  adminrun("rm -f /etc/resolver/#{domain}")
16
18
  end
17
19
  end
@@ -1,5 +1,5 @@
1
1
  # only used for testing
2
- module JDC::Micro::Switcher
2
+ module JDCMicro::Switcher
3
3
 
4
4
  class Dummy < Base
5
5
  def adminrun(command)
@@ -0,0 +1,16 @@
1
+ module JDCMicro::Switcher
2
+
3
+ class Linux < Base
4
+ def set_nameserver(domain, ip)
5
+ JDCMicro.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
+ JDCMicro.run_command("sudo", "chattr +i /etc/resolv.conf")
8
+ end
9
+
10
+ def unset_nameserver(domain, ip)
11
+ JDCMicro.run_command("sudo", "chattr -i /etc/resolv.conf")
12
+ JDCMicro.run_command("sudo", "sed -i'.backup' '/#{ip}/d' /etc/resolv.conf")
13
+ end
14
+ end
15
+
16
+ end
@@ -1,19 +1,19 @@
1
- module JDC::Micro::Switcher
1
+ module JDCMicro::Switcher
2
2
 
3
3
  class Windows < Base
4
- def version?
5
- JDC::Micro.run_command("cmd", "/c ver").to_s.scan(/\d+\.\d+/).first.to_f
4
+ def version
5
+ JDCMicro.run_command("cmd", "/c ver").to_s.scan(/\d+\.\d+/).first.to_f
6
6
  end
7
7
 
8
8
  def adminrun(command, args=nil)
9
- if version? > 5.2
9
+ if version > 5.2
10
10
  require 'win32ole'
11
11
  shell = WIN32OLE.new("Shell.Application")
12
12
  shell.ShellExecute(command, args, nil, "runas", 0)
13
13
  else
14
14
  # on older version this will try to run the command, and if you don't have
15
15
  # admin privilges it will tell you so and exit
16
- JDC::Micro.run_command(command, args)
16
+ JDCMicro.run_command(command, args)
17
17
  end
18
18
  end
19
19
 
@@ -1,13 +1,15 @@
1
- module JDC::Micro
1
+ require "micro/errors"
2
+
3
+ module JDCMicro
2
4
  class VMrun
3
5
  attr_reader :vmx, :vmrun
4
6
 
5
7
  def initialize(config)
6
- @platform = config['platform']
8
+ @platform = config[:platform]
7
9
  @user = 'root' # must use root as we muck around with system settings
8
- @password = config['password']
9
- @vmrun = config['vmrun']
10
- @vmx = config['vmx']
10
+ @password = config[:password]
11
+ @vmrun = config[:vmrun]
12
+ @vmx = config[:vmx]
11
13
 
12
14
  # TODO honor TMPDIR
13
15
  if @platform == :windows
@@ -17,6 +19,10 @@ module JDC::Micro
17
19
  end
18
20
  end
19
21
 
22
+ def vmx
23
+ @vmx
24
+ end
25
+
20
26
  def connection_type
21
27
  read_variable('ethernet0.connectionType')
22
28
  end
@@ -35,7 +41,7 @@ module JDC::Micro
35
41
 
36
42
  def domain
37
43
  # switch to Dir.mktmpdir
38
- state_config = JDC::Micro.escape_path(File.join(@temp_dir, 'state.yml'))
44
+ state_config = JDCMicro.escape_path(File.join(@temp_dir, 'state.yml'))
39
45
  run('CopyFileFromGuestToHost', "/var/vcap/bosh/state.yml #{state_config}")
40
46
  bosh_config = YAML.load_file(state_config)
41
47
  bosh_config['properties']['domain']
@@ -43,8 +49,8 @@ module JDC::Micro
43
49
 
44
50
  def ip
45
51
  # switch to Dir.mktmpdir
46
- path = JDC::Micro.escape_path(JDC::Micro.config_file('refresh_ip.rb'))
47
- ip_file = JDC::Micro.escape_path(File.join(@temp_dir, 'ip.txt'))
52
+ path = JDCMicro.escape_path(JDCMicro.config_file('refresh_ip.rb'))
53
+ ip_file = JDCMicro.escape_path(File.join(@temp_dir, 'ip.txt'))
48
54
  run('CopyFileFromHostToGuest', "#{path} /tmp/refresh_ip.rb")
49
55
  run('runProgramInGuest', '/tmp/refresh_ip.rb')
50
56
  run('CopyFileFromGuestToHost', "/tmp/ip.txt #{ip_file}")
@@ -54,7 +60,7 @@ module JDC::Micro
54
60
  def list
55
61
  vms = run("list")
56
62
  vms.delete_if { |line| line =~ /^Total/ }
57
- vms.map { |line| JDC::Micro.escape_path(File.expand_path(line)) }
63
+ vms.map { |line| JDCMicro.escape_path(File.expand_path(line)) }
58
64
  end
59
65
 
60
66
  def offline?
@@ -68,12 +74,12 @@ module JDC::Micro
68
74
  elsif $?.exitstatus == 0
69
75
  return true
70
76
  else
71
- raise "failed to execute vmrun:\n#{result}"
77
+ raise JDCMicro::MCFError, "failed to execute vmrun:\n#{result}"
72
78
  end
73
79
  end
74
80
 
75
81
  def offline!
76
- path = JDC::Micro.escape_path(JDC::Micro.config_file('offline.conf'))
82
+ path = JDCMicro.escape_path(JDCMicro.config_file('offline.conf'))
77
83
  run('CopyFileFromHostToGuest', "#{path} /etc/dnsmasq.d/offline.conf")
78
84
  run('runProgramInGuest', '/usr/bin/touch /var/vcap/micro/offline')
79
85
  run('runProgramInGuest',
@@ -101,7 +107,7 @@ module JDC::Micro
101
107
  elsif $?.exitstatus == 1
102
108
  return false
103
109
  else
104
- raise "failed to execute vmrun:\n#{result}"
110
+ raise JDCMicro::MCFError, "failed to execute vmrun:\n#{result}"
105
111
  end
106
112
  end
107
113
 
@@ -128,14 +134,15 @@ module JDC::Micro
128
134
  if command.include?('Guest')
129
135
  command = "-gu #{@user} -gp #{@password} #{command}"
130
136
  end
131
- JDC::Micro.run_command(@vmrun, "#{command} #{@vmx} #{args}")
137
+ JDCMicro.run_command(@vmrun, "#{command} #{@vmx} #{args}")
132
138
  end
133
139
 
134
140
  def running?
135
141
  vms = list
136
142
  if @platform == :windows
137
- vms.map! { |x| x.downcase }
138
- vms.include?(@vmx.downcase)
143
+ vms.any? { |x|
144
+ x.downcase == @vmx.downcase
145
+ }
139
146
  else
140
147
  # Handle vmx being in a symlinked dir.
141
148
  real_path = nil
@@ -147,19 +154,19 @@ module JDC::Micro
147
154
  end
148
155
  end
149
156
 
150
- def start
157
+ def start!
151
158
  run('start') unless running?
152
159
  end
153
160
 
154
- def stop
161
+ def stop!
155
162
  run('stop') if running?
156
163
  end
157
164
 
158
165
  def self.locate(platform)
159
- paths = YAML.load_file(JDC::Micro.config_file('paths.yml'))
166
+ paths = YAML.load_file(JDCMicro.config_file('paths.yml'))
160
167
  vmrun_paths = paths[platform.to_s]['vmrun']
161
168
  vmrun_exe = @platform == :windows ? 'vmrun.exe' : 'vmrun'
162
- vmrun = JDC::Micro.locate_file(vmrun_exe, "VMware", vmrun_paths)
169
+ vmrun = JDCMicro.locate_file(vmrun_exe, "VMware", vmrun_paths)
163
170
  err "Unable to locate vmrun, please supply --vmrun option" unless vmrun
164
171
  vmrun
165
172
  end
@@ -0,0 +1,42 @@
1
+ require 'active_support/core_ext'
2
+
3
+ namespace :gem do
4
+ desc "Bump gem version, push to RubyGems, push to Github, add release notes"
5
+ task :release, [:version] do |_, args|
6
+ version = args[:version] || 'rc'
7
+ old_version = gem_version
8
+
9
+ sh! "gem bump --version #{version} --no-commit"
10
+ sh! "git add lib/jdc/version.rb"
11
+
12
+ print_with_purpose "Bumping to version #{gem_version}"
13
+ #generate_release_notes(old_version)
14
+ sh!("git commit -m 'Bumping to version #{gem_version}.'")
15
+ sh!("git push")
16
+ sh!("gem release --tag")
17
+ end
18
+
19
+ private
20
+ def generate_release_notes(old_version)
21
+ print_with_purpose "Generating release notes..."
22
+ file_name = "release_#{gem_version}"
23
+ sh!("anchorman notes --name=#{file_name} --from=v#{old_version}")
24
+ sh!("git add release_notes")
25
+ end
26
+
27
+ def sh!(cmd)
28
+ `#{cmd}`
29
+ raise "borked with #{$?}" unless $?.success?
30
+ end
31
+
32
+ def print_with_purpose(text)
33
+ puts "\033[34m#{text}\033[0m"
34
+ end
35
+
36
+ def gem_version
37
+ silence_warnings do
38
+ load "lib/jdc/version.rb"
39
+ end
40
+ Gem::Specification.load("jdc.gemspec").version.to_s
41
+ end
42
+ end
@@ -0,0 +1,29 @@
1
+ [![Build Status](https://travis-ci.org/cloudfoundry/tunnel-cf-plugin.png)](https://travis-ci.org/cloudfoundry/tunnel-cf-plugin)
2
+ [![Gem Version](https://badge.fury.io/rb/tunnel-cf-plugin.png)](http://badge.fury.io/rb/tunnel-cf-plugin)
3
+
4
+ ## Tunnel
5
+ ### Info
6
+ This plugin allows you to connect to a Cloud Foundry service using your own command line client. By default, the plugin supports *redis*, *mysql*, *mongodb*, and *postgresql*.
7
+
8
+ ### Installation
9
+ ```
10
+ gem install tunnel-cf-plugin
11
+ ```
12
+
13
+ ### Usage
14
+ ```
15
+ tunnel [INSTANCE] [CLIENT] Create a local tunnel to a service.
16
+ ```
17
+
18
+ You can add support for other command-line clients by providing a `~/.cf/clients.yml` file with the following format:
19
+
20
+ ```yaml
21
+ service_name:
22
+ client_program_name: command line arguments
23
+ client_program_name_2:
24
+ command: command line arguments
25
+ environment:
26
+ - ENV_VAR_NAME=env_var_value
27
+ ```
28
+
29
+
@@ -3,12 +3,12 @@ redis:
3
3
 
4
4
  mysql:
5
5
  mysql: --protocol=TCP --host=${host} --port=${port} --user=${user} --password=${password} ${name}
6
- mysqldump: --protocol=TCP --host=${host} --port=${port} --user=${user} --password=${password} ${name} > ${Output file}
6
+ mysqldump: --protocol=TCP --host=${host} --port=${port} --user=${user} --password=${password} ${name} > ${ask Output file}
7
7
 
8
8
  mongodb:
9
9
  mongo: --host ${host} --port ${port} -u ${user} -p ${password} ${name}
10
10
  mongodump: --host ${host} --port ${port} -u ${user} -p ${password} --db ${name}
11
- mongorestore: --host ${host} --port ${port} -u ${user} -p ${password} --db ${name} ${Directory or filename to restore from}
11
+ mongorestore: --host ${host} --port ${port} -u ${user} -p ${password} --db ${name} ${ask Directory or filename to restore from}
12
12
 
13
13
  postgresql:
14
14
  psql:
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rack', '~> 1.2.0'
4
+ gem 'caldecott', '= 0.0.3'
5
+ gem 'bundler'
6
+ gem 'em-websocket'
7
+ gem 'async_sinatra'
8
+ gem 'thin'
9
+ gem 'json'
10
+ gem 'uuidtools'
@@ -0,0 +1,48 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.6)
5
+ async_sinatra (0.5.0)
6
+ rack (>= 1.2.1)
7
+ sinatra (>= 1.0)
8
+ caldecott (0.0.3)
9
+ addressable (= 2.2.6)
10
+ async_sinatra (= 0.5.0)
11
+ em-http-request (= 0.3.0)
12
+ em-websocket (= 0.3.1)
13
+ json (= 1.6.1)
14
+ uuidtools (= 2.1.2)
15
+ daemons (1.1.8)
16
+ em-http-request (0.3.0)
17
+ addressable (>= 2.0.0)
18
+ escape_utils
19
+ eventmachine (>= 0.12.9)
20
+ em-websocket (0.3.1)
21
+ addressable (>= 2.1.1)
22
+ eventmachine (>= 0.12.9)
23
+ escape_utils (0.2.4)
24
+ eventmachine (0.12.10)
25
+ json (1.6.1)
26
+ rack (1.2.5)
27
+ sinatra (1.2.8)
28
+ rack (~> 1.1)
29
+ tilt (>= 1.2.2, < 2.0)
30
+ thin (1.4.1)
31
+ daemons (>= 1.0.9)
32
+ eventmachine (>= 0.12.6)
33
+ rack (>= 1.0.0)
34
+ tilt (1.3.3)
35
+ uuidtools (2.1.2)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ async_sinatra
42
+ bundler
43
+ caldecott (= 0.0.3)
44
+ em-websocket
45
+ json
46
+ rack (~> 1.2.0)
47
+ thin
48
+ uuidtools
@@ -10,7 +10,7 @@ require 'sinatra'
10
10
  require 'json'
11
11
  require 'eventmachine'
12
12
 
13
- port = ENV['JDC_APP_PORT']
13
+ port = ENV['PORT']
14
14
  port ||= 8081
15
15
 
16
16
  # add vcap specific stuff to Caldecott
@@ -24,19 +24,19 @@ class VcapHttpTunnel < Caldecott::Server::HttpTunnel
24
24
  end
25
25
 
26
26
  get '/services' do
27
- services_env = ENV['JDC_SERVICES']
27
+ services_env = ENV['VCAP_SERVICES']
28
28
  return "no services env" if services_env.nil? or services_env.empty?
29
29
  services_env
30
30
  end
31
31
 
32
32
  get '/services/:service' do |service_name|
33
- services_env = ENV['JDC_SERVICES']
33
+ services_env = ENV['VCAP_SERVICES']
34
34
  not_found if services_env.nil?
35
35
 
36
- services = JSON.parse(services_env)
36
+ services = JSON.parse(services_env).values.flatten(1)
37
37
  service = services.find { |s| s["name"] == service_name }
38
38
  not_found if service.nil?
39
- service["options"].to_json
39
+ service["credentials"].to_json
40
40
  end
41
41
  end
42
42