vmc 0.3.13.beta.2 → 0.3.13.beta.3

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 (40) hide show
  1. data/Rakefile +84 -2
  2. data/lib/cli.rb +2 -3
  3. data/lib/cli/commands/admin.rb +9 -6
  4. data/lib/cli/commands/apps.rb +144 -111
  5. data/lib/cli/commands/base.rb +8 -15
  6. data/lib/cli/commands/misc.rb +3 -2
  7. data/lib/cli/commands/services.rb +15 -16
  8. data/lib/cli/commands/user.rb +11 -2
  9. data/lib/cli/config.rb +5 -1
  10. data/lib/cli/core_ext.rb +331 -0
  11. data/lib/cli/frameworks.rb +10 -4
  12. data/lib/cli/runner.rb +4 -0
  13. data/lib/cli/services_helper.rb +8 -2
  14. data/lib/cli/usage.rb +4 -3
  15. data/lib/cli/version.rb +1 -1
  16. data/lib/vmc/client.rb +4 -0
  17. data/lib/vmc/const.rb +1 -0
  18. metadata +13 -46
  19. data/spec/assets/app_info.txt +0 -9
  20. data/spec/assets/app_listings.txt +0 -9
  21. data/spec/assets/bad_create_app.txt +0 -9
  22. data/spec/assets/delete_app.txt +0 -9
  23. data/spec/assets/global_service_listings.txt +0 -9
  24. data/spec/assets/good_create_app.txt +0 -9
  25. data/spec/assets/good_create_service.txt +0 -9
  26. data/spec/assets/info_authenticated.txt +0 -27
  27. data/spec/assets/info_return.txt +0 -15
  28. data/spec/assets/info_return_bad.txt +0 -16
  29. data/spec/assets/list_users.txt +0 -13
  30. data/spec/assets/login_fail.txt +0 -9
  31. data/spec/assets/login_success.txt +0 -9
  32. data/spec/assets/sample_token.txt +0 -1
  33. data/spec/assets/service_already_exists.txt +0 -9
  34. data/spec/assets/service_gateway_fail.txt +0 -9
  35. data/spec/assets/service_listings.txt +0 -9
  36. data/spec/assets/service_not_found.txt +0 -9
  37. data/spec/assets/user_info.txt +0 -9
  38. data/spec/spec_helper.rb +0 -11
  39. data/spec/unit/cli_opts_spec.rb +0 -68
  40. data/spec/unit/client_spec.rb +0 -345
@@ -10,7 +10,7 @@ module VMC::Cli
10
10
  'Spring' => ['spring', { :mem => '512M', :description => 'Java SpringSource Spring Application'}],
11
11
  'Grails' => ['grails', { :mem => '512M', :description => 'Java SpringSource Grails Application'}],
12
12
  'Lift' => ['lift', { :mem => '512M', :description => 'Scala Lift Application'}],
13
- 'JavaWeb' => ['spring', { :mem => '512M', :description => 'Java Web Application'}],
13
+ 'JavaWeb' => ['java_web',{ :mem => '512M', :description => 'Java Web Application'}],
14
14
  'Sinatra' => ['sinatra', { :mem => '128M', :description => 'Sinatra Application'}],
15
15
  'Node' => ['node', { :mem => '64M', :description => 'Node.js Application'}],
16
16
  'PHP' => ['php', { :mem => '128M', :description => 'PHP Application'}],
@@ -37,9 +37,14 @@ module VMC::Cli
37
37
  return Framework.lookup('Rails')
38
38
 
39
39
  # Java
40
- elsif Dir.glob('*.war').first
40
+ elsif Dir.glob('*.war').first || File.exist?('WEB-INF/web.xml')
41
41
  war_file = Dir.glob('*.war').first
42
- contents = ZipUtil.entry_lines(war_file)
42
+
43
+ if war_file
44
+ contents = ZipUtil.entry_lines(war_file)
45
+ else
46
+ contents = Dir['**/*'].join("\n")
47
+ end
43
48
 
44
49
  # Spring/Lift Variations
45
50
  if contents =~ /WEB-INF\/lib\/grails-web.*\.jar/
@@ -50,10 +55,11 @@ module VMC::Cli
50
55
  return Framework.lookup('Spring')
51
56
  elsif contents =~ /WEB-INF\/lib\/spring-core.*\.jar/
52
57
  return Framework.lookup('Spring')
58
+ elsif contents =~ /WEB-INF\/lib\/org\.springframework\.core.*\.jar/
59
+ return Framework.lookup('Spring')
53
60
  else
54
61
  return Framework.lookup('JavaWeb')
55
62
  end
56
-
57
63
  # Simple Ruby Apps
58
64
  elsif !Dir.glob('*.rb').empty?
59
65
  matched_file = nil
@@ -48,6 +48,10 @@ class VMC::Cli::Runner
48
48
  opts.on('-t [TKEY]') { |tkey| @options[:trace] = tkey || true }
49
49
  opts.on('--trace [TKEY]') { |tkey| @options[:trace] = tkey || true }
50
50
 
51
+ # start application in debug mode
52
+ opts.on('-d [MODE]') { |mode| @options[:debug] = mode || "run" }
53
+ opts.on('--debug [MODE]') { |mode| @options[:debug] = mode || "run" }
54
+
51
55
  opts.on('-q', '--quiet') { @options[:quiet] = true }
52
56
 
53
57
  # Don't use builtin zip
@@ -50,19 +50,25 @@ module VMC::Cli
50
50
  end
51
51
 
52
52
  def bind_service_banner(service, appname, check_restart=true)
53
- display "Binding Service: ", false
53
+ display "Binding Service [#{service}]: ", false
54
54
  client.bind_service(service, appname)
55
55
  display 'OK'.green
56
56
  check_app_for_restart(appname) if check_restart
57
57
  end
58
58
 
59
59
  def unbind_service_banner(service, appname, check_restart=true)
60
- display "Unbinding Service: ", false
60
+ display "Unbinding Service [#{service}]: ", false
61
61
  client.unbind_service(service, appname)
62
62
  display 'OK'.green
63
63
  check_app_for_restart(appname) if check_restart
64
64
  end
65
65
 
66
+ def delete_service_banner(service)
67
+ display "Deleting service [#{service}]: ", false
68
+ client.delete_service(service)
69
+ display 'OK'.green
70
+ end
71
+
66
72
  def random_service_name(service)
67
73
  r = "%04x" % [rand(0x0100000)]
68
74
  "#{service.to_s}-#{r}"
@@ -39,17 +39,18 @@ Currently available vmc commands are:
39
39
  push [appname] --instances <N> Set the expected number <N> of instances
40
40
  push [appname] --mem M Set the memory reservation for the application
41
41
  push [appname] --runtime RUNTIME Set the runtime to use for the application
42
+ push [appname] --debug [MODE] Push application and start in a debug mode
42
43
  push [appname] --no-start Do not auto-start the application
43
44
 
44
45
  Application Operations
45
- start <appname> Start the application
46
+ start <appname> [--debug [MODE]] Start the application
46
47
  stop <appname> Stop the application
47
- restart <appname> Restart the application
48
+ restart <appname> [--debug [MODE]] Restart the application
48
49
  delete <appname> Delete the application
49
50
  rename <appname> <newname> Rename the application
50
51
 
51
52
  Application Updates
52
- update <appname> [--path] Update the application bits
53
+ update <appname> [--path,--debug [MODE]] Update the application bits
53
54
  mem <appname> [memsize] Update the memory reservation for an application
54
55
  map <appname> <url> Register the application to the url
55
56
  unmap <appname> <url> Unregister the application from the url
@@ -2,6 +2,6 @@ module VMC
2
2
  module Cli
3
3
  # This version number is used as the RubyGem release version.
4
4
  # The internal VMC version number is VMC::VERSION.
5
- VERSION = '0.3.13.beta.2'
5
+ VERSION = '0.3.13.beta.3'
6
6
  end
7
7
  end
@@ -63,6 +63,10 @@ class VMC::Client
63
63
  json_get(VMC::GLOBAL_SERVICES_PATH)
64
64
  end
65
65
 
66
+ def runtimes_info
67
+ json_get(VMC::GLOBAL_RUNTIMES_PATH)
68
+ end
69
+
66
70
  ######################################################
67
71
  # Apps
68
72
  ######################################################
@@ -11,6 +11,7 @@ module VMC
11
11
  # General Paths
12
12
  INFO_PATH = '/info'
13
13
  GLOBAL_SERVICES_PATH = '/info/services'
14
+ GLOBAL_RUNTIMES_PATH = '/info/runtimes'
14
15
  RESOURCES_PATH = '/resources'
15
16
 
16
17
  # User specific paths
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: vmc
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 7
5
- version: 0.3.13.beta.2
5
+ version: 0.3.13.beta.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - VMware
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-24 00:00:00 -07:00
13
+ date: 2011-10-18 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -35,21 +35,10 @@ dependencies:
35
35
  version: 2.0.1
36
36
  type: :runtime
37
37
  version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: highline
40
- prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ~>
45
- - !ruby/object:Gem::Version
46
- version: 1.6.1
47
- type: :runtime
48
- version_requirements: *id003
49
38
  - !ruby/object:Gem::Dependency
50
39
  name: rest-client
51
40
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
41
+ requirement: &id003 !ruby/object:Gem::Requirement
53
42
  none: false
54
43
  requirements:
55
44
  - - ">="
@@ -59,51 +48,51 @@ dependencies:
59
48
  - !ruby/object:Gem::Version
60
49
  version: 1.7.0
61
50
  type: :runtime
62
- version_requirements: *id004
51
+ version_requirements: *id003
63
52
  - !ruby/object:Gem::Dependency
64
53
  name: terminal-table
65
54
  prerelease: false
66
- requirement: &id005 !ruby/object:Gem::Requirement
55
+ requirement: &id004 !ruby/object:Gem::Requirement
67
56
  none: false
68
57
  requirements:
69
58
  - - ~>
70
59
  - !ruby/object:Gem::Version
71
60
  version: 1.4.2
72
61
  type: :runtime
73
- version_requirements: *id005
62
+ version_requirements: *id004
74
63
  - !ruby/object:Gem::Dependency
75
64
  name: rake
76
65
  prerelease: false
77
- requirement: &id006 !ruby/object:Gem::Requirement
66
+ requirement: &id005 !ruby/object:Gem::Requirement
78
67
  none: false
79
68
  requirements:
80
69
  - - ">="
81
70
  - !ruby/object:Gem::Version
82
71
  version: "0"
83
72
  type: :development
84
- version_requirements: *id006
73
+ version_requirements: *id005
85
74
  - !ruby/object:Gem::Dependency
86
75
  name: rspec
87
76
  prerelease: false
88
- requirement: &id007 !ruby/object:Gem::Requirement
77
+ requirement: &id006 !ruby/object:Gem::Requirement
89
78
  none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
93
82
  version: 1.3.0
94
83
  type: :development
95
- version_requirements: *id007
84
+ version_requirements: *id006
96
85
  - !ruby/object:Gem::Dependency
97
86
  name: webmock
98
87
  prerelease: false
99
- requirement: &id008 !ruby/object:Gem::Requirement
88
+ requirement: &id007 !ruby/object:Gem::Requirement
100
89
  none: false
101
90
  requirements:
102
- - - ~>
91
+ - - "="
103
92
  - !ruby/object:Gem::Version
104
93
  version: 1.5.0
105
94
  type: :development
106
- version_requirements: *id008
95
+ version_requirements: *id007
107
96
  description: Client library and CLI that provides access to the VMware Cloud Application Platform.
108
97
  email: support@vmware.com
109
98
  executables:
@@ -136,28 +125,6 @@ files:
136
125
  - lib/vmc/client.rb
137
126
  - lib/vmc/const.rb
138
127
  - lib/vmc.rb
139
- - spec/assets/app_info.txt
140
- - spec/assets/app_listings.txt
141
- - spec/assets/bad_create_app.txt
142
- - spec/assets/delete_app.txt
143
- - spec/assets/global_service_listings.txt
144
- - spec/assets/good_create_app.txt
145
- - spec/assets/good_create_service.txt
146
- - spec/assets/info_authenticated.txt
147
- - spec/assets/info_return.txt
148
- - spec/assets/info_return_bad.txt
149
- - spec/assets/list_users.txt
150
- - spec/assets/login_fail.txt
151
- - spec/assets/login_success.txt
152
- - spec/assets/sample_token.txt
153
- - spec/assets/service_already_exists.txt
154
- - spec/assets/service_gateway_fail.txt
155
- - spec/assets/service_listings.txt
156
- - spec/assets/service_not_found.txt
157
- - spec/assets/user_info.txt
158
- - spec/spec_helper.rb
159
- - spec/unit/cli_opts_spec.rb
160
- - spec/unit/client_spec.rb
161
128
  - bin/vmc
162
129
  has_rdoc: true
163
130
  homepage: http://vmware.com
@@ -1,9 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.7.65
3
- Date: Fri, 04 Mar 2011 02:56:21 GMT
4
- Content-Type: application/json
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 243
8
-
9
- {"resources":{"memory":64},"uris":["foo.vcap.me"],"staging":{"stack":"ruby foo.rb","model":"http://b20nine.com/unknown"},"state":"STARTED","instances":1,"name":"foo","meta":{"version":1,"created":1299207348},"services":[],"runningInstances":1}
@@ -1,9 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.7.65
3
- Date: Thu, 03 Mar 2011 19:46:19 GMT
4
- Content-Type: application/json
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 251
8
-
9
- [{"resources":{"memory":128},"uris":["r.vcap.me"],"staging":{"stack":"ruby redis_sample.rb","model":"http://b20nine.com/unknown"},"state":"STARTED","instances":1,"name":"r","meta":{"version":1,"created":1298681379},"services":[],"runningInstances":1}]
@@ -1,9 +0,0 @@
1
- HTTP/1.1 400 Bad Request
2
- Server: nginx/0.7.65
3
- Date: Thu, 03 Mar 2011 23:37:51 GMT
4
- Content-Type: text/html;charset=utf-8
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 157
8
-
9
- {"code":10050,"description":"Invalid number of instances: \"'', App instances not presentApp instances is not a numberInstances must be between 1 and 100\""}
@@ -1,9 +0,0 @@
1
- HTTP/1.1 204
2
- Server: nginx/0.7.65
3
- Date: Fri, 04 Mar 2011 00:07:10 GMT
4
- Content-Type: text/html;charset=utf-8
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Location: http://api.vcap.me/apps/foo
8
- Content-Length: 0
9
-
@@ -1,9 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.7.65
3
- Date: Thu, 03 Mar 2011 20:20:15 GMT
4
- Content-Type: application/json
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 381
8
-
9
- {"key-value":{"redis":{"2":{"type":"key-value","tiers":{"free":{"order":1,"description":"Free offering (64MiB)"}},"version":"2","vendor":"redis","description":"Redis key-value store service"}}},"database":{"mysql":{"5.1":{"type":"database","tiers":{"free":{"order":1,"description":"Free offering (1GiB)"}},"version":"5.1","description":"MySQL database service","vendor":"mysql"}}}}
@@ -1,9 +0,0 @@
1
- HTTP/1.1 302 Moved Temporarily
2
- Server: nginx/0.7.65
3
- Date: Fri, 04 Mar 2011 00:07:10 GMT
4
- Content-Type: text/html;charset=utf-8
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Location: http://api.vcap.me/apps/foo
8
- Content-Length: 0
9
-
@@ -1,9 +0,0 @@
1
- HTTP/1.1 302 Moved Temporarily
2
- Server: nginx/0.7.65
3
- Date: Fri, 04 Mar 2011 02:15:55 GMT
4
- Content-Type: text/html;charset=utf-8
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Location: http://api.vcap.me/services/redis-86b7a8655555
8
- Content-Length: 0
9
-
@@ -1,27 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.7.65
3
- Date: Thu, 03 Mar 2011 19:25:34 GMT
4
- Content-Type: application/json
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 380
8
-
9
- {
10
- "name": "vcap",
11
- "build": "3465a13ab528443f1afcd3c9c2861a078549b8e5",
12
- "support": "ac-support@vmware.com",
13
- "version": 0.999,
14
- "limits": {
15
- "apps": 50,
16
- "memory": 8192,
17
- "app_uris": 4,
18
- "services": 4
19
- },
20
- "user": "derek@gmail.com",
21
- "description": "VMware's Cloud Application Platform",
22
- "usage": {
23
- "apps": 1,
24
- "memory": 128,
25
- "services": 0
26
- }
27
- }
@@ -1,15 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.7.65
3
- Date: Thu, 03 Mar 2011 19:04:04 GMT
4
- Content-Type: application/json
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 189
8
-
9
- {
10
- "name": "vcap",
11
- "build": "3465a13ab528443f1afcd3c9c2861a078549b8e5",
12
- "support": "ac-support@vmware.com",
13
- "version": 0.999,
14
- "description": "VMware's Cloud Application Platform"
15
- }
@@ -1,16 +0,0 @@
1
- HTTP/1.1 301 Moved Permanently
2
- Location: http://www.google.com/
3
- Content-Type: text/html; charset=UTF-8
4
- Date: Thu, 03 Mar 2011 19:06:04 GMT
5
- Expires: Sat, 02 Apr 2011 19:06:04 GMT
6
- Cache-Control: public, max-age=2592000
7
- Server: gws
8
- Content-Length: 219
9
- X-XSS-Protection: 1; mode=block
10
-
11
- <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
12
- <TITLE>301 Moved</TITLE></HEAD><BODY>
13
- <H1>301 Moved</H1>
14
- The document has moved
15
- <A HREF="http://www.google.com/">here</A>.
16
- </BODY></HTML>
@@ -1,13 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.7.65
3
- Date: Sun, 22 May 2011 18:58:41 GMT
4
- Content-Type: application/json; charset=utf-8
5
- Transfer-Encoding: chunked
6
- Connection: keep-alive
7
- Keep-Alive: timeout=20
8
- ETag: "eb21ee2635a8b6b378f896e26b61f006"
9
- Cache-Control: max-age=0, private, must-revalidate
10
- X-UA-Compatible: IE=Edge
11
- Content-Length: 365
12
-
13
- [{"email":"test@example.com","admin":true,"apps":[{"name":"chat","state":"STARTED"},{"name":"smith","state":"STARTED"},{"name":"env","state":"STARTED"},{"name":"redirect","state":"STARTED"}]},{"email":"user2@example.com","admin":false,"apps":[]},{"email":"autotest@adamgreenfield.com","admin":false,"apps":[]},{"email":"user3@example.com","admin":false,"apps":[]}]
@@ -1,9 +0,0 @@
1
- HTTP/1.1 403 Forbidden
2
- Server: nginx/0.7.65
3
- Date: Thu, 03 Mar 2011 18:29:40 GMT
4
- Content-Type: application/json
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 43
8
-
9
- {"code":2002,"description":"Invalid token"}
@@ -1,9 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.7.65
3
- Date: Thu, 03 Mar 2011 18:26:45 GMT
4
- Content-Type: application/json
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 112
8
-
9
- {"token":"04085b082214646572656b40676d61696c2e636f6d6c2b07e517794d22198e59d96b40ccbc3625964dfb8dcca21174835d7e"}
@@ -1 +0,0 @@
1
- 04085b082214646572656b40676d61696c2e636f6d6c2b07f014794d2219b3dd205faeaefc0a8c70bb3ba786628c8cb8d667
@@ -1,9 +0,0 @@
1
- HTTP/1.1 400 Bad Request
2
- Server: nginx/0.7.65
3
- Date: Fri, 04 Mar 2011 02:19:28 GMT
4
- Content-Type: text/html;charset=utf-8
5
- Connection: keep-alive
6
- Keep-Alive: timeout=20
7
- Content-Length: 93
8
-
9
- {"code":20001,"description":"A service with the name: \"redis-86b7a8655555\" already exists"}