vmc 0.4.0.beta.36 → 0.4.0.beta.37

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.
@@ -40,12 +40,12 @@ module VMC
40
40
 
41
41
  option(:force, :alias => "-f", :type => :boolean,
42
42
  :desc => "Skip interaction when possible") {
43
- option(:script)
43
+ input[:script]
44
44
  }
45
45
 
46
46
  option(:quiet, :alias => "-q", :type => :boolean,
47
47
  :desc => "Simplify output format") {
48
- option(:script)
48
+ input[:script]
49
49
  }
50
50
 
51
51
  option(:script, :type => :boolean,
@@ -55,7 +55,7 @@ module VMC
55
55
 
56
56
  option(:color, :type => :boolean, :default => true,
57
57
  :desc => "Use colorful output") {
58
- !option(:quiet)
58
+ !input[:quiet]
59
59
  }
60
60
 
61
61
  option :trace, :alias => "-t", :type => :boolean,
@@ -63,7 +63,7 @@ module VMC
63
63
 
64
64
 
65
65
  def default_action
66
- if option(:version)
66
+ if input[:version]
67
67
  line "vmc #{VERSION}"
68
68
  else
69
69
  super
@@ -90,11 +90,11 @@ module VMC
90
90
  end
91
91
  end
92
92
 
93
- def execute(cmd, argv)
94
- if option(:help)
93
+ def run(name)
94
+ if input[:help]
95
95
  invoke :help, :command => cmd.name.to_s
96
96
  else
97
- cmd.context.new.precondition if cmd.context <= CLI
97
+ precondition
98
98
  super
99
99
  end
100
100
  rescue Interrupt
@@ -153,19 +153,19 @@ module VMC
153
153
  end
154
154
 
155
155
  def quiet?
156
- option(:quiet)
156
+ input[:quiet]
157
157
  end
158
158
 
159
159
  def force?
160
- option(:force)
160
+ input[:force]
161
161
  end
162
162
 
163
163
  def color_enabled?
164
- option(:color)
164
+ input[:color]
165
165
  end
166
166
 
167
167
  def verbose?
168
- option(:verbose)
168
+ input[:verbose]
169
169
  end
170
170
 
171
171
  def err(msg, status = 1)
@@ -244,8 +244,8 @@ module VMC
244
244
  end
245
245
  end
246
246
 
247
- def target_info
248
- info = targets_info[client_target]
247
+ def target_info(target = client_target)
248
+ info = targets_info[target]
249
249
 
250
250
  if info.is_a? String
251
251
  { :token => info }
@@ -262,15 +262,15 @@ module VMC
262
262
  end
263
263
  end
264
264
 
265
- def save_target_info(info)
265
+ def save_target_info(info, target = client_target)
266
266
  ts = targets_info
267
- ts[client_target] = info
267
+ ts[target] = info
268
268
  save_targets(ts)
269
269
  end
270
270
 
271
- def remove_target_info
271
+ def remove_target_info(target = client_target)
272
272
  ts = targets_info
273
- ts.delete client_target
273
+ ts.delete target
274
274
  save_targets(ts)
275
275
  end
276
276
 
@@ -287,23 +287,23 @@ module VMC
287
287
  client
288
288
  end
289
289
 
290
- def client
290
+ def client(target = client_target)
291
291
  return @@client if defined?(@@client) && @@client
292
292
 
293
- info = target_info
293
+ info = target_info(target)
294
294
 
295
295
  @@client =
296
296
  case info[:version]
297
297
  when 2
298
- CFoundry::V2::Client.new(client_target, info[:token])
298
+ CFoundry::V2::Client.new(target, info[:token])
299
299
  when 1
300
- CFoundry::V1::Client.new(client_target, info[:token])
300
+ CFoundry::V1::Client.new(target, info[:token])
301
301
  else
302
- CFoundry::Client.new(client_target, info[:token])
302
+ CFoundry::Client.new(target, info[:token])
303
303
  end
304
304
 
305
- @@client.proxy = option(:proxy)
306
- @@client.trace = option(:trace)
305
+ @@client.proxy = input[:proxy]
306
+ @@client.trace = input[:trace]
307
307
 
308
308
  unless info.key? :version
309
309
  info[:version] =
@@ -314,7 +314,7 @@ module VMC
314
314
  1
315
315
  end
316
316
 
317
- save_target_info(info)
317
+ save_target_info(info, target)
318
318
  end
319
319
 
320
320
  if org = info[:organization]
@@ -5,8 +5,6 @@ require "vmc/detect"
5
5
 
6
6
  module VMC
7
7
  class App < CLI
8
- MEM_CHOICES = ["64M", "128M", "256M", "512M"]
9
-
10
8
  # TODO: don't hardcode; bring in from remote
11
9
  MEM_DEFAULTS_FRAMEWORK = {
12
10
  "rails3" => "256M",
@@ -43,7 +41,7 @@ module VMC
43
41
  input :runtime, :desc => "Filter by runtime regexp"
44
42
  input :framework, :desc => "Filter by framework regexp"
45
43
  input :url, :desc => "Filter by url regexp"
46
- def apps(input)
44
+ def apps
47
45
  if space = input[:space] || client.current_space
48
46
  apps =
49
47
  with_progress("Getting applications in #{c(space.name, :name)}") do
@@ -79,7 +77,7 @@ module VMC
79
77
  group :apps
80
78
  input :app, :argument => :required, :from_given => by_name("app"),
81
79
  :desc => "App to show"
82
- def app(input)
80
+ def app
83
81
  display_app(input[:app])
84
82
  end
85
83
 
@@ -95,7 +93,8 @@ module VMC
95
93
  }
96
94
  input(:memory, :desc => "Memory limit") { |framework, runtime|
97
95
  ask("Memory Limit",
98
- :choices => MEM_CHOICES,
96
+ :choices => memory_choices,
97
+ :allow_other => true,
99
98
  :default =>
100
99
  MEM_DEFAULTS_RUNTIME[runtime] ||
101
100
  MEM_DEFAULTS_FRAMEWORK[framework] ||
@@ -144,7 +143,7 @@ module VMC
144
143
  :desc => "Interactively bind services?") {
145
144
  ask "Bind other services to application?", :default => false
146
145
  }
147
- def push(input)
146
+ def push
148
147
  path = File.expand_path(input[:path])
149
148
 
150
149
  name = input[:name]
@@ -250,7 +249,7 @@ module VMC
250
249
  :from_given => by_name("app")
251
250
  input :debug_mode, :aliases => "-d",
252
251
  :desc => "Debug mode to start in"
253
- def start(input)
252
+ def start
254
253
  apps = input[:apps]
255
254
  fail "No applications given." if apps.empty?
256
255
 
@@ -287,7 +286,7 @@ module VMC
287
286
  input :apps, :argument => :splat, :singular => :app,
288
287
  :desc => "Applications to start",
289
288
  :from_given => by_name("app")
290
- def stop(input)
289
+ def stop
291
290
  apps = input[:apps]
292
291
  fail "No applications given." if apps.empty?
293
292
 
@@ -312,7 +311,7 @@ module VMC
312
311
  :from_given => by_name("app")
313
312
  input :debug_mode, :aliases => "-d",
314
313
  :desc => "Debug mode to start in"
315
- def restart(input)
314
+ def restart
316
315
  invoke :stop, :apps => input[:apps]
317
316
  invoke :start, :apps => input[:apps],
318
317
  :debug_mode => input[:debug_mode]
@@ -337,7 +336,7 @@ module VMC
337
336
  :desc => "Delete orphaned instances"
338
337
  input :all, :default => false,
339
338
  :desc => "Delete all applications"
340
- def delete(input)
339
+ def delete
341
340
  apps = client.apps
342
341
 
343
342
  if input[:all]
@@ -375,7 +374,7 @@ module VMC
375
374
  input :apps, :argument => :splat, :singular => :app,
376
375
  :desc => "Applications to start",
377
376
  :from_given => by_name("app")
378
- def instances(input)
377
+ def instances
379
378
  no_v2
380
379
 
381
380
  apps = input[:apps]
@@ -408,12 +407,13 @@ module VMC
408
407
  ask("Instances", :default => default)
409
408
  }
410
409
  input(:memory, :desc => "Memory limit") { |default|
411
- ask("Memory Limit", :choices => MEM_CHOICES,
410
+ ask("Memory Limit", :choices => memory_choices(default),
411
+ :allow_other => true,
412
412
  :default => human_size(default * 1024 * 1024, 0))
413
413
  }
414
414
  input :restart, :type => :boolean, :default => true,
415
415
  :desc => "Restart app after updating?"
416
- def scale(input)
416
+ def scale
417
417
  app = input[:app]
418
418
 
419
419
  instances = input.given(:instances)
@@ -452,7 +452,7 @@ module VMC
452
452
  :desc => "Instance of application to get the logs of"
453
453
  input :all, :default => false,
454
454
  :desc => "Get logs for every instance"
455
- def logs(input)
455
+ def logs
456
456
  no_v2
457
457
 
458
458
  app = input[:app]
@@ -502,7 +502,7 @@ module VMC
502
502
  :from_given => by_name("app")
503
503
  input :path, :argument => true, :default => "/",
504
504
  :desc => "Path of file to read"
505
- def file(input)
505
+ def file
506
506
  no_v2
507
507
 
508
508
  app = input[:app]
@@ -524,7 +524,7 @@ module VMC
524
524
  :from_given => by_name("app")
525
525
  input :path, :argument => true, :default => "/",
526
526
  :desc => "Path of directory to list"
527
- def files(input)
527
+ def files
528
528
  no_v2
529
529
 
530
530
  app = input[:app]
@@ -546,7 +546,7 @@ module VMC
546
546
  input :apps, :argument => :splat, :singular => :app,
547
547
  :desc => "Applications to start",
548
548
  :from_given => by_name("app")
549
- def health(input)
549
+ def health
550
550
  apps = input[:apps]
551
551
  fail "No applications given." if apps.empty?
552
552
 
@@ -569,7 +569,7 @@ module VMC
569
569
  input :app, :argument => true,
570
570
  :desc => "Application to get the stats for",
571
571
  :from_given => by_name("app")
572
- def stats(input)
572
+ def stats
573
573
  no_v2
574
574
 
575
575
  app = input[:app]
@@ -607,7 +607,7 @@ module VMC
607
607
  :from_given => by_name("app")
608
608
  input :url, :argument => true,
609
609
  :desc => "URL to route"
610
- def map(input)
610
+ def map
611
611
  no_v2
612
612
 
613
613
  app = input[:app]
@@ -629,7 +629,7 @@ module VMC
629
629
  input(:url, :argument => true, :desc => "URL to unmap") { |choices|
630
630
  ask("Which URL?", :choices => choices)
631
631
  }
632
- def unmap(input)
632
+ def unmap
633
633
  no_v2
634
634
 
635
635
  app = input[:app]
@@ -655,7 +655,7 @@ module VMC
655
655
  input :app, :argument => true,
656
656
  :desc => "Application to inspect the environment of",
657
657
  :from_given => by_name("app")
658
- def env(input)
658
+ def env
659
659
  app = input[:app]
660
660
 
661
661
  vars =
@@ -684,7 +684,7 @@ module VMC
684
684
  :desc => "Environment variable value"
685
685
  input :restart, :type => :boolean, :default => true,
686
686
  :desc => "Restart app after updating?"
687
- def set_env(input)
687
+ def set_env
688
688
  app = input[:app]
689
689
  name = input[:name]
690
690
 
@@ -718,7 +718,7 @@ module VMC
718
718
  :desc => "Environment variable name"
719
719
  input :restart, :type => :boolean, :default => true,
720
720
  :desc => "Restart app after updating?"
721
- def unset_env(input)
721
+ def unset_env
722
722
  app = input[:app]
723
723
  name = input[:name]
724
724
 
@@ -735,7 +735,7 @@ module VMC
735
735
 
736
736
  desc "DEPRECATED. Use 'push' instead."
737
737
  input :app, :argument => :optional
738
- def update(input)
738
+ def update
739
739
  fail "The 'update' command is no longer needed; use 'push' instead."
740
740
  end
741
741
 
@@ -977,5 +977,21 @@ module VMC
977
977
  def target_base
978
978
  client.target.sub(/^https?:\/\/([^\.]+\.)?(.+)\/?/, '\2')
979
979
  end
980
+
981
+ def memory_choices(exclude = 0)
982
+ info = client.info
983
+ used = info[:usage][:memory]
984
+ limit = info[:limits][:memory]
985
+ available = limit - used + exclude
986
+
987
+ mem = 64
988
+ choices = []
989
+ until mem > available
990
+ choices << human_size(mem * 1024 * 1024, precision = 0)
991
+ mem *= 2
992
+ end
993
+
994
+ choices
995
+ end
980
996
  end
981
997
  end
@@ -23,7 +23,7 @@ module VMC
23
23
  }
24
24
  input :full, :type => :boolean,
25
25
  :desc => "Show full information for appspaces"
26
- def org(input)
26
+ def org
27
27
  org = input[:organization]
28
28
 
29
29
  if quiet?
@@ -53,7 +53,7 @@ module VMC
53
53
 
54
54
  desc "List available organizations"
55
55
  group :organizations
56
- def orgs(input)
56
+ def orgs
57
57
  orgs =
58
58
  with_progress("Getting organizations") do
59
59
  client.organizations
@@ -11,7 +11,7 @@ module VMC
11
11
  input :version, :desc => "Filter by service version"
12
12
  input :app, :desc => "Limit to application's service bindings",
13
13
  :from_given => by_name("app")
14
- def services(input)
14
+ def services
15
15
  instances =
16
16
  with_progress("Getting service instances") do
17
17
  client.service_instances(2)
@@ -38,7 +38,7 @@ module VMC
38
38
  input :instance, :argument => :required,
39
39
  :from_given => by_name("service instance", :service_instance),
40
40
  :desc => "Service instance to show"
41
- def service(input)
41
+ def service
42
42
  display_service_instance(input[:instance])
43
43
  end
44
44
 
@@ -81,7 +81,7 @@ module VMC
81
81
  input :version, :desc => "Service version"
82
82
  input :app, :alias => "--bind", :from_given => by_name("app"),
83
83
  :desc => "Application to immediately bind to"
84
- def create_service(input)
84
+ def create_service
85
85
  services = client.services
86
86
 
87
87
  if input[:provider]
@@ -157,7 +157,7 @@ module VMC
157
157
  ask "Which application?", :choices => client.apps(2),
158
158
  :display => proc(&:name)
159
159
  }
160
- def bind_service(input)
160
+ def bind_service
161
161
  app = input[:app]
162
162
  instance = input[:instance, app]
163
163
 
@@ -188,7 +188,7 @@ module VMC
188
188
  ask "Which application?", :choices => client.apps(2),
189
189
  :display => proc(&:name)
190
190
  }
191
- def unbind_service(input)
191
+ def unbind_service
192
192
  app = input[:app]
193
193
  instance = input[:instance, app]
194
194
 
@@ -214,7 +214,7 @@ module VMC
214
214
  force? || ask("Really delete #{c(name, color)}?", :default => false)
215
215
  }
216
216
  input :all, :default => false, :desc => "Delete all services"
217
- def delete_service(input)
217
+ def delete_service
218
218
  if input[:all]
219
219
  return unless input[:really, "ALL SERVICES", :bad]
220
220
 
@@ -34,7 +34,7 @@ module VMC
34
34
  }
35
35
  input :full, :type => :boolean,
36
36
  :desc => "Show full information for apps, service instances, etc."
37
- def space(input)
37
+ def space
38
38
  org = input[:organization]
39
39
  space = input[:space, org]
40
40
 
@@ -83,7 +83,7 @@ module VMC
83
83
  :desc => "Organization to list spaces from") {
84
84
  client.current_organization
85
85
  }
86
- def spaces(input)
86
+ def spaces
87
87
  org = input[:organization]
88
88
  spaces =
89
89
  with_progress("Getting spaces in #{c(org.name, :name)}") do
@@ -115,7 +115,7 @@ module VMC
115
115
  :desc => "Add current user as developer"
116
116
  input :auditor, :type => :boolean, :default => false,
117
117
  :desc => "Add current user as auditor"
118
- def create_space(input)
118
+ def create_space
119
119
  space = client.space
120
120
  space.organization = input[:organization]
121
121
  space.name = input[:name]
@@ -152,7 +152,7 @@ module VMC
152
152
  desc "Switch to a space, creating it if it doesn't exist"
153
153
  group :spaces, :hidden => true
154
154
  input :name, :argument => true, :desc => "Space name"
155
- def take_space(input)
155
+ def take_space
156
156
  if space = client.space_by_name(input[:name])
157
157
  invoke :target, :space => space
158
158
  else
@@ -182,7 +182,7 @@ module VMC
182
182
  input(:recursive, :alias => "-r", :type => :boolean, :forget => true) {
183
183
  ask "Delete #{c("EVERYTHING", :bad)}?", :default => false
184
184
  }
185
- def delete_space(input)
185
+ def delete_space
186
186
  org = input[:organization]
187
187
  space = input[:space, org]
188
188
  return unless input[:really, space]
@@ -32,7 +32,7 @@ module VMC
32
32
  :desc => "List supported services"
33
33
  input(:all, :type => :boolean, :alias => "-a",
34
34
  :desc => "Show all information")
35
- def info(input)
35
+ def info
36
36
  all = input[:all]
37
37
 
38
38
  if all || input[:runtimes]
@@ -145,7 +145,7 @@ module VMC
145
145
  :desc => "Space") { |spaces|
146
146
  ask("Space", :choices => spaces, :display => proc(&:name))
147
147
  }
148
- def target(input)
148
+ def target
149
149
  if !input[:interactive] && !input.given?(:url) &&
150
150
  !input.given?(:organization) && !input.given?(:space)
151
151
  display_target
@@ -156,6 +156,7 @@ module VMC
156
156
  if input.given?(:url)
157
157
  target = sane_target_url(input[:url])
158
158
  with_progress("Setting target to #{c(target, :name)}") do
159
+ client(target).info # check that it's valid before setting
159
160
  set_target(target)
160
161
  end
161
162
  end
@@ -183,7 +184,7 @@ module VMC
183
184
 
184
185
  desc "List known targets."
185
186
  group :start, :hidden => true
186
- def targets(input)
187
+ def targets
187
188
  targets_info.each do |target, _|
188
189
  line target
189
190
  # TODO: print org/space
@@ -208,7 +209,7 @@ module VMC
208
209
  :desc => "Space") { |spaces|
209
210
  ask("Space", :choices => spaces, :display => proc(&:name))
210
211
  }
211
- def login(input)
212
+ def login
212
213
  show_context
213
214
 
214
215
  credentials =
@@ -263,7 +264,7 @@ module VMC
263
264
 
264
265
  desc "Log out from the target"
265
266
  group :start
266
- def logout(input)
267
+ def logout
267
268
  with_progress("Logging out") do
268
269
  remove_target_info
269
270
  end
@@ -283,7 +284,7 @@ module VMC
283
284
  }
284
285
  input :login, :type => :boolean, :default => true,
285
286
  :desc => "Automatically log in?"
286
- def register(input)
287
+ def register
287
288
  show_context
288
289
 
289
290
  email = input[:email]
@@ -305,7 +306,7 @@ module VMC
305
306
 
306
307
  desc "Show color configuration"
307
308
  group :start, :hidden => true
308
- def colors(input)
309
+ def colors
309
310
  user_colors.each do |n, c|
310
311
  line "#{n}: #{c(c.to_s, n)}"
311
312
  end
@@ -4,7 +4,7 @@ module VMC
4
4
  class User < CLI
5
5
  desc "List all users"
6
6
  group :admin, :hidden => true
7
- def users(input)
7
+ def users
8
8
  users =
9
9
  with_progress("Getting users") do
10
10
  client.users
@@ -27,7 +27,7 @@ module VMC
27
27
  input(:verify, :desc => "Repeat password") {
28
28
  ask("Verify Password", :echo => "*", :forget => true)
29
29
  }
30
- def create_user(input)
30
+ def create_user
31
31
  email = input[:email]
32
32
  password = input[:password]
33
33
 
@@ -49,7 +49,8 @@ module VMC
49
49
  input(:really, :type => :boolean, :forget => true) { |email|
50
50
  force? || ask("Really delete user #{c(email, :name)}?", :default => false)
51
51
  }
52
- def delete_user(input)
52
+ def delete_user
53
+ email = input[:email]
53
54
  return unless input[:really, email]
54
55
 
55
56
  with_progress("Deleting #{c(email, :name)}") do
@@ -69,7 +70,7 @@ module VMC
69
70
  input(:verify, :desc => "Repeat new password") {
70
71
  ask("Verify Password", :echo => "*", :forget => true)
71
72
  }
72
- def passwd(input)
73
+ def passwd
73
74
  email = input[:email]
74
75
  password = input[:password]
75
76
  verify = input[:verify]
@@ -21,6 +21,13 @@ module VMC
21
21
 
22
22
  enabled = Set.new(matching.collect(&:name))
23
23
 
24
+ Gem.loaded_specs["vmc"].dependencies.each do |dep|
25
+ if dep.name =~ /vmc-plugin/ && dep.type == :runtime
26
+ require "#{dep.name}/plugin"
27
+ enabled.delete dep.name
28
+ end
29
+ end
30
+
24
31
  # allow explicit enabling/disabling of gems via config
25
32
  plugins = File.expand_path(VMC::PLUGINS_FILE)
26
33
  if File.exists?(plugins) && yaml = YAML.load_file(plugins)
@@ -1,3 +1,5 @@
1
+ require "rspec"
2
+
1
3
  require "cfoundry"
2
4
  require "vmc"
3
5
 
@@ -5,11 +7,11 @@ require "vmc/spec_helpers/eventlog"
5
7
  require "vmc/spec_helpers/patches"
6
8
 
7
9
 
8
- TARGET = ENV["VMC_TEST_TARGET"] || "http://localhost:8181"
9
- USER = ENV["VMC_TEST_USER"] || "sre@vmware.com"
10
- PASSWORD = ENV["VMC_TEST_PASSWORD"] || "test"
11
-
12
10
  module VMCHelpers
11
+ TARGET = ENV["VMC_TEST_TARGET"] || "http://localhost:8181"
12
+ USER = ENV["VMC_TEST_USER"] || "sre@vmware.com"
13
+ PASSWORD = ENV["VMC_TEST_PASSWORD"] || "test"
14
+
13
15
  def random_str
14
16
  format("%x", rand(1000000))
15
17
  end
@@ -104,14 +106,14 @@ module VMCHelpers
104
106
 
105
107
  thd = Thread.new do
106
108
  begin
107
- VMC::CLI.new.invoke(command, inputs, given)
109
+ VMC::CLI.new.invoke(command, inputs, given, :quiet => true)
108
110
  rescue SystemExit => e
109
111
  unless e.status == 0
110
112
  raise <<EOF
111
113
  execution failed with status #{e.status}!
112
114
 
113
115
  stdout:
114
- #{$stdout.string.inspect}
116
+ #{$stdout.string}
115
117
 
116
118
  stderr:
117
119
  #{$stderr.string}
@@ -195,7 +197,12 @@ module VMCMatchers
195
197
  end
196
198
 
197
199
  def matches?(log)
198
- @actual = log.wait_for_event(EventLog::GotInput).value
200
+ input = log.wait_for_event(EventLog::GotInput)
201
+ until input.name == @name
202
+ input = log.wait_for_event(EventLog::GotInput)
203
+ end
204
+
205
+ @actual = input.value
199
206
  @actual == @expected
200
207
  end
201
208
 
@@ -398,9 +405,12 @@ RSpec.configure do |c|
398
405
  c.include VMCMatchers
399
406
 
400
407
  c.before(:all) do
401
- VMC::CLI.client = CFoundry::Client.new(TARGET)
408
+ VMC::CLI.client = CFoundry::Client.new(VMCHelpers::TARGET)
409
+
410
+ client.login(
411
+ :username => VMCHelpers::USER,
412
+ :password => VMCHelpers::PASSWORD)
402
413
 
403
- client.login(:username => USER, :password => PASSWORD)
404
414
  client.current_organization = client.organizations.first
405
415
  client.current_space = client.current_organization.spaces.first
406
416
  end
@@ -76,6 +76,10 @@ class EventLog
76
76
  val = next_event
77
77
 
78
78
  until val.is_a?(type)
79
+ if val.important?
80
+ raise "Tried to skip important event while waiting for a #{type}: #{val}"
81
+ end
82
+
79
83
  val = next_event
80
84
  end
81
85
 
@@ -137,7 +141,13 @@ class EventLog
137
141
  end
138
142
 
139
143
 
140
- class Printed
144
+ class Event
145
+ def important?
146
+ true
147
+ end
148
+ end
149
+
150
+ class Printed < Event
141
151
  attr_reader :line
142
152
 
143
153
  def initialize(line)
@@ -149,7 +159,7 @@ class EventLog
149
159
  end
150
160
  end
151
161
 
152
- class Asked
162
+ class Asked < Event
153
163
  attr_reader :message, :options
154
164
 
155
165
  def initialize(message, options = {})
@@ -162,7 +172,7 @@ class EventLog
162
172
  end
163
173
  end
164
174
 
165
- class GotInput
175
+ class GotInput < Event
166
176
  attr_reader :name, :value
167
177
 
168
178
  def initialize(name, value)
@@ -173,9 +183,13 @@ class EventLog
173
183
  def to_s
174
184
  "<GotInput #@name '#@value'>"
175
185
  end
186
+
187
+ def important?
188
+ false
189
+ end
176
190
  end
177
191
 
178
- class Raised
192
+ class Raised < Event
179
193
  attr_reader :exception
180
194
 
181
195
  def initialize(exception)
@@ -187,7 +201,7 @@ class EventLog
187
201
  end
188
202
  end
189
203
 
190
- class Progress
204
+ class Progress < Event
191
205
  attr_reader :message
192
206
 
193
207
  def initialize(message)
@@ -1,7 +1,20 @@
1
+ require "mothership"
2
+ require "interact"
3
+ require "vmc"
4
+
1
5
  # [EventLog]
2
6
  $vmc_event = nil
3
7
 
4
8
  class VMC::CLI
9
+ def run(name)
10
+ if input[:help]
11
+ invoke :help, :command => cmd.name.to_s
12
+ else
13
+ precondition
14
+ super
15
+ end
16
+ end
17
+
5
18
  class ProgressEventReporter
6
19
  def initialize(message, skipper)
7
20
  @message = message
@@ -63,10 +76,10 @@ class VMC::CLI
63
76
  end
64
77
 
65
78
  class Mothership::Inputs
66
- alias_method :vmc_spec_get, :[]
79
+ alias_method :vmc_spec_get, :get
67
80
 
68
- def [](name, *args)
69
- val = vmc_spec_get(name, *args)
81
+ def get(name, context, *args)
82
+ val = vmc_spec_get(name, context, *args)
70
83
  $vmc_event.got_input(name, val) if $vmc_event
71
84
  val
72
85
  end
@@ -1,3 +1,3 @@
1
1
  module VMC
2
- VERSION = "0.4.0.beta.36"
2
+ VERSION = "0.4.0.beta.37"
3
3
  end
@@ -4,6 +4,8 @@ describe "App#apps" do
4
4
  it "lists app names" do
5
5
  with_random_apps do |apps|
6
6
  running(:apps) do
7
+ does("Getting applications in #{client.current_space.name}")
8
+
7
9
  apps.sort_by(&:name).each do |a|
8
10
  outputs(a.name)
9
11
  end
@@ -16,6 +18,8 @@ describe "App#apps" do
16
18
  name = sample(apps).name
17
19
 
18
20
  running(:apps, :name => name) do
21
+ does("Getting applications in #{client.current_space.name}")
22
+
19
23
  apps.sort_by(&:name).each do |a|
20
24
  if a.name == name
21
25
  outputs(a.name)
@@ -30,6 +34,8 @@ describe "App#apps" do
30
34
  runtime = sample(apps).runtime
31
35
 
32
36
  running(:apps, :runtime => runtime.name) do
37
+ does("Getting applications in #{client.current_space.name}")
38
+
33
39
  apps.sort_by(&:name).each do |a|
34
40
  if a.runtime =~ /#{runtime}/
35
41
  outputs(a.name)
@@ -44,6 +50,8 @@ describe "App#apps" do
44
50
  framework = sample(apps).framework
45
51
 
46
52
  running(:apps, :framework => framework.name) do
53
+ does("Getting applications in #{client.current_space.name}")
54
+
47
55
  apps.sort_by(&:name).each do |a|
48
56
  if a.framework == framework
49
57
  outputs(a.name)
@@ -58,6 +66,8 @@ describe "App#apps" do
58
66
  with_random_apps do |other_apps|
59
67
  with_random_apps(space) do |apps|
60
68
  running(:apps, :space => space) do
69
+ does("Getting applications in #{space.name}")
70
+
61
71
  apps.sort_by(&:name).each do |a|
62
72
  outputs(a.name)
63
73
  end
@@ -21,7 +21,7 @@ describe "App#push" do
21
21
 
22
22
  asks("Instances")
23
23
  given(instances)
24
- has_input(:instance, instances)
24
+ has_input(:instances, instances)
25
25
 
26
26
  asks("Framework")
27
27
  given(framework.name)
@@ -43,11 +43,11 @@ describe "App#push" do
43
43
 
44
44
  asks("Create services for application?")
45
45
  given("n")
46
- has_input(:create_instances, false)
46
+ has_input(:create_services, false)
47
47
 
48
48
  asks("Bind other services to application?")
49
49
  given("n")
50
- has_input(:bind_instances, false)
50
+ has_input(:bind_services, false)
51
51
 
52
52
  does("Uploading #{name}")
53
53
  does("Starting #{name}")
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1553307275
4
+ hash: -1929453892
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
9
  - 0
10
10
  - beta
11
- - 36
12
- version: 0.4.0.beta.36
11
+ - 37
12
+ version: 0.4.0.beta.37
13
13
  platform: ruby
14
14
  authors:
15
15
  - VMware
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-08-21 00:00:00 Z
20
+ date: 2012-08-29 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: json_pure
@@ -233,12 +233,12 @@ dependencies:
233
233
  requirements:
234
234
  - - ~>
235
235
  - !ruby/object:Gem::Version
236
- hash: 1
236
+ hash: 31
237
237
  segments:
238
238
  - 0
239
239
  - 4
240
- - 7
241
- version: 0.4.7
240
+ - 8
241
+ version: 0.4.8
242
242
  type: :runtime
243
243
  version_requirements: *id013
244
244
  - !ruby/object:Gem::Dependency
@@ -249,12 +249,12 @@ dependencies:
249
249
  requirements:
250
250
  - - ~>
251
251
  - !ruby/object:Gem::Version
252
- hash: 61
252
+ hash: 35
253
253
  segments:
254
254
  - 0
255
255
  - 3
256
- - 23
257
- version: 0.3.23
256
+ - 24
257
+ version: 0.3.24
258
258
  type: :runtime
259
259
  version_requirements: *id014
260
260
  - !ruby/object:Gem::Dependency
@@ -265,12 +265,12 @@ dependencies:
265
265
  requirements:
266
266
  - - ~>
267
267
  - !ruby/object:Gem::Version
268
- hash: 3
268
+ hash: 27
269
269
  segments:
270
270
  - 0
271
+ - 1
271
272
  - 0
272
- - 14
273
- version: 0.0.14
273
+ version: 0.1.0
274
274
  type: :runtime
275
275
  version_requirements: *id015
276
276
  - !ruby/object:Gem::Dependency
@@ -290,9 +290,25 @@ dependencies:
290
290
  type: :runtime
291
291
  version_requirements: *id016
292
292
  - !ruby/object:Gem::Dependency
293
- name: multi_json
293
+ name: tunnel-dummy-vmc-plugin
294
294
  prerelease: false
295
295
  requirement: &id017 !ruby/object:Gem::Requirement
296
+ none: false
297
+ requirements:
298
+ - - ~>
299
+ - !ruby/object:Gem::Version
300
+ hash: 29
301
+ segments:
302
+ - 0
303
+ - 0
304
+ - 1
305
+ version: 0.0.1
306
+ type: :runtime
307
+ version_requirements: *id017
308
+ - !ruby/object:Gem::Dependency
309
+ name: multi_json
310
+ prerelease: false
311
+ requirement: &id018 !ruby/object:Gem::Requirement
296
312
  none: false
297
313
  requirements:
298
314
  - - ~>
@@ -304,49 +320,56 @@ dependencies:
304
320
  - 6
305
321
  version: 1.3.6
306
322
  type: :runtime
307
- version_requirements: *id017
323
+ version_requirements: *id018
308
324
  - !ruby/object:Gem::Dependency
309
325
  name: rake
310
326
  prerelease: false
311
- requirement: &id018 !ruby/object:Gem::Requirement
327
+ requirement: &id019 !ruby/object:Gem::Requirement
312
328
  none: false
313
329
  requirements:
314
- - - ">="
330
+ - - ~>
315
331
  - !ruby/object:Gem::Version
316
- hash: 3
332
+ hash: 11
317
333
  segments:
318
334
  - 0
319
- version: "0"
335
+ - 9
336
+ - 2
337
+ - 2
338
+ version: 0.9.2.2
320
339
  type: :runtime
321
- version_requirements: *id018
340
+ version_requirements: *id019
322
341
  - !ruby/object:Gem::Dependency
323
342
  name: rspec
324
343
  prerelease: false
325
- requirement: &id019 !ruby/object:Gem::Requirement
344
+ requirement: &id020 !ruby/object:Gem::Requirement
326
345
  none: false
327
346
  requirements:
328
- - - ">="
347
+ - - ~>
329
348
  - !ruby/object:Gem::Version
330
- hash: 3
349
+ hash: 35
331
350
  segments:
351
+ - 2
352
+ - 11
332
353
  - 0
333
- version: "0"
354
+ version: 2.11.0
334
355
  type: :runtime
335
- version_requirements: *id019
356
+ version_requirements: *id020
336
357
  - !ruby/object:Gem::Dependency
337
358
  name: simplecov
338
359
  prerelease: false
339
- requirement: &id020 !ruby/object:Gem::Requirement
360
+ requirement: &id021 !ruby/object:Gem::Requirement
340
361
  none: false
341
362
  requirements:
342
- - - ">="
363
+ - - ~>
343
364
  - !ruby/object:Gem::Version
344
- hash: 3
365
+ hash: 15
345
366
  segments:
346
367
  - 0
347
- version: "0"
368
+ - 6
369
+ - 4
370
+ version: 0.6.4
348
371
  type: :runtime
349
- version_requirements: *id020
372
+ version_requirements: *id021
350
373
  description:
351
374
  email: support@vmware.com
352
375
  executables:
@@ -437,7 +460,7 @@ post_install_message:
437
460
  rdoc_options: []
438
461
 
439
462
  require_paths:
440
- - vmc/lib
463
+ - vmc-ng/lib
441
464
  required_ruby_version: !ruby/object:Gem::Requirement
442
465
  none: false
443
466
  requirements: