af 0.3.18.3 → 0.3.18.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -29,6 +29,9 @@ MIT license, please see the LICENSE file. All rights reserved._
29
29
  push [appname] --mem M Set the memory reservation for the application
30
30
  push [appname] --no-start Do not auto-start the application
31
31
 
32
+ Application Download
33
+ pull <appname> [path] Downloads last pushed source to <appname> or [path]
34
+
32
35
  Application Operations
33
36
  start <appname> Start the application
34
37
  stop <appname> Stop the application
data/lib/cli.rb CHANGED
@@ -27,7 +27,6 @@ module VMC
27
27
  autoload :TunnelHelper, "#{ROOT}/cli/tunnel_helper"
28
28
  autoload :ManifestHelper, "#{ROOT}/cli/manifest_helper"
29
29
  autoload :ConsoleHelper, "#{ROOT}/cli/console_helper"
30
- autoload :InfraHelper, "#{ROOT}/cli/infra_helper"
31
30
 
32
31
  module Command
33
32
  autoload :Base, "#{ROOT}/cli/commands/base"
@@ -291,14 +291,16 @@ module VMC::Cli::Command
291
291
  if @options[:canary]
292
292
  display "[--canary] is deprecated and will be removed in a future version".yellow
293
293
  end
294
- upload_app_bits(appname, @path)
294
+ infra = app[:infra] ? app[:infra][:provider] : nil
295
+ upload_app_bits(appname, @path, infra)
295
296
  restart appname if app[:state] == 'STARTED'
296
297
  else
297
298
  each_app do |name|
298
299
  display "Updating application '#{name}'..."
299
300
 
300
301
  app = client.app_info(name)
301
- upload_app_bits(name, @application)
302
+ infra = app[:infra] ? app[:infra][:provider] : nil
303
+ upload_app_bits(name, @application, infra)
302
304
  restart name if app[:state] == 'STARTED'
303
305
  end
304
306
  end
@@ -420,7 +422,7 @@ module VMC::Cli::Command
420
422
  files && files.select { |f| File.socket? f }
421
423
  end
422
424
 
423
- def upload_app_bits(appname, path)
425
+ def upload_app_bits(appname, path, infra)
424
426
  display 'Uploading Application:'
425
427
 
426
428
  upload_file, file = "#{Dir.tmpdir}/#{appname}.zip", nil
@@ -480,7 +482,8 @@ module VMC::Cli::Command
480
482
  # Check to see if the resource check is worth the round trip
481
483
  if (total_size > (64*1024)) # 64k for now
482
484
  # Send resource fingerprints to the cloud controller
483
- appcloud_resources = client.check_resources(fingerprints)
485
+ # FIXME where do I get infra?
486
+ appcloud_resources = client.check_resources(fingerprints,infra)
484
487
  end
485
488
  display 'OK'.green
486
489
 
@@ -944,7 +947,7 @@ module VMC::Cli::Command
944
947
  infra = info(:infra)
945
948
 
946
949
  if infra
947
- err "Infra '#{infra}' is not valid" unless VMC::Cli::InfraHelper.valid?(infra)
950
+ err "Infra '#{infra}' is not valid" unless client.infra_valid?(infra)
948
951
  end
949
952
 
950
953
  # Check app existing upfront if we have appname
@@ -992,7 +995,7 @@ module VMC::Cli::Command
992
995
  command = ask("Start Command") if !command && framework.require_start_command?
993
996
 
994
997
  default_url = "None"
995
- default_url = "#{appname}.#{VMC::Cli::Config.suggest_url}" if framework.require_url?
998
+ default_url = "#{appname}.#{client.suggest_url(infra)}" if framework.require_url?
996
999
 
997
1000
  unless no_prompt || url || !framework.require_url?
998
1001
  url = ask(
@@ -1060,7 +1063,7 @@ module VMC::Cli::Command
1060
1063
  end
1061
1064
 
1062
1065
  # Stage and upload the app bits.
1063
- upload_app_bits(appname, @application)
1066
+ upload_app_bits(appname, @application, infra)
1064
1067
 
1065
1068
  start(appname, true) unless no_start
1066
1069
  end
@@ -178,7 +178,7 @@ module VMC::Cli
178
178
  end
179
179
 
180
180
  def target_base(ctx = [])
181
- VMC::Cli::Config.base_of(find_symbol("target", ctx) || "api.#{VMC::Cli::Config.suggest_url}")
181
+ VMC::Cli::Config.base_of(find_symbol("target", ctx) || "api.#{client.suggest_url}")
182
182
  end
183
183
 
184
184
  # Inject a client to help in testing.
@@ -81,9 +81,11 @@ module VMC::Cli::Command
81
81
  end
82
82
 
83
83
  def infras
84
+ infras_info = client.infras
85
+ return display "Multiple infras not supported" if infras_info.empty?
84
86
  itable = table do |t|
85
87
  t.headings = [ 'Name','Description' ]
86
- VMC::Cli::InfraHelper.list.each { |i| t << [i[:name], i[:description]] }
88
+ infras_info.each { |i| t << [i[:infra], i[:description]] }
87
89
  end
88
90
  display "\n"
89
91
  display itable
@@ -42,9 +42,9 @@ module VMC::Cli::Command
42
42
 
43
43
  if client.infra_supported?
44
44
  unless no_prompt || @options[:infra]
45
- @options[:infra] = VMC::Cli::InfraHelper.name_for_description(
45
+ @options[:infra] = client.infra_name_for_description(
46
46
  ask("Select Infrastructure",
47
- :indexed => true, :choices => VMC::Cli::InfraHelper.infra_descriptions))
47
+ :indexed => true, :choices => client.infra_descriptions))
48
48
  end
49
49
  end
50
50
 
@@ -131,7 +131,7 @@ module VMC::Cli::Command
131
131
  infra_name = info[:infra] ? info[:infra][:name] : default_infra
132
132
 
133
133
  if infra_name
134
- err "Infra '#{infra_name}' is not valid" unless VMC::Cli::InfraHelper.valid?(infra_name)
134
+ err "Infra '#{infra_name}' is not valid" unless client.infra_valid?(infra_name)
135
135
  end
136
136
 
137
137
 
data/lib/cli/config.rb CHANGED
@@ -42,10 +42,6 @@ module VMC::Cli
42
42
  url.sub(/^[^\.]+\./, "")
43
43
  end
44
44
 
45
- def suggest_url
46
- @suggest_url ||= VMC::Cli::InfraHelper.base_for_infra(@infra)
47
- end
48
-
49
45
  def store_target(target_host)
50
46
  target_file = File.expand_path(TARGET_FILE)
51
47
  lock_and_write(target_file, target_host)
@@ -107,10 +107,10 @@ module VMC::Cli::ManifestHelper
107
107
 
108
108
  if client.infra_supported?
109
109
  infra = @options[:infra] || manifest("infra") ||
110
- VMC::Cli::InfraHelper.name_for_description(
111
- ask("Select Infrastructure",:indexed => true, :choices => VMC::Cli::InfraHelper.infra_descriptions))
110
+ client.infra_name_for_description(
111
+ ask("Select Infrastructure",:indexed => true, :choices => client.infra_descriptions))
112
112
  set infra.dup, "infra"
113
- VMC::Cli::Config.infra = infra
113
+ client.infra = infra
114
114
  end
115
115
 
116
116
  url_template = manifest("url") || DEFAULTS["url"]
data/lib/cli/runner.rb CHANGED
@@ -293,7 +293,7 @@ class VMC::Cli::Runner
293
293
  else
294
294
  set_cmd(:apps, :pull, 2)
295
295
  end
296
-
296
+
297
297
  when 'logs'
298
298
  usage('af logs <appname> [--instance N] [--all] [--prefix]')
299
299
  set_cmd(:apps, :logs, 1)
@@ -292,7 +292,7 @@ module VMC::Cli
292
292
  manifest = {
293
293
  :name => tunnel_appname(infra),
294
294
  :staging => {:framework => "sinatra", :runtime => "ruby18" },
295
- :uris => ["#{tunnel_uniquename(infra)}.#{VMC::Cli::InfraHelper.base_for_infra(infra)}"],
295
+ :uris => ["#{tunnel_uniquename(infra)}.#{client.base_for_infra(infra)}"],
296
296
  :instances => 1,
297
297
  :resources => {:memory => 64},
298
298
  :env => ["CALDECOTT_AUTH=#{token}"]
@@ -304,7 +304,7 @@ module VMC::Cli
304
304
  manifest
305
305
  )
306
306
 
307
- apps_cmd.send(:upload_app_bits, tunnel_appname(infra), HELPER_APP)
307
+ apps_cmd.send(:upload_app_bits, tunnel_appname(infra), HELPER_APP, infra)
308
308
 
309
309
  invalidate_tunnel_app_info(infra)
310
310
  end
data/lib/cli/usage.rb CHANGED
@@ -43,9 +43,6 @@ Currently available af commands are:
43
43
  push [appname] --debug [MODE] Push application and start in a debug mode
44
44
  push [appname] --no-start Do not auto-start the application
45
45
 
46
- Application Download
47
- pull <appname> [path] Downloads last pushed source to <appname> or [path]
48
-
49
46
  Application Operations
50
47
  start <appname> [--debug [MODE]] Start the application
51
48
  stop <appname> Stop the application
@@ -67,6 +64,9 @@ Currently available af commands are:
67
64
  stats <appname> Display resource usage for the application
68
65
  instances <appname> List application instances
69
66
 
67
+ Application Download
68
+ pull <appname> [path] Downloads last pushed source to <appname> or [path]
69
+
70
70
  Application Environment
71
71
  env <appname> List application environment variables
72
72
  env-add <appname> <variable[=]value> Add an environment variable to an application
data/lib/cli/version.rb CHANGED
@@ -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.18.3'
5
+ VERSION = '0.3.18.4'
6
6
  end
7
7
  end
data/lib/vmc/client.rb CHANGED
@@ -22,7 +22,7 @@ class VMC::Client
22
22
  end
23
23
 
24
24
  attr_reader :target, :host, :user, :proxy, :auth_token
25
- attr_accessor :trace
25
+ attr_accessor :trace, :infra
26
26
 
27
27
  # Error codes
28
28
  VMC_HTTP_ERROR_CODES = [ 400, 500 ]
@@ -247,9 +247,13 @@ class VMC::Client
247
247
  # indicating what is needed. This returned manifest should be
248
248
  # sent in with the upload if resources were removed.
249
249
  # E.g. [{:sha1 => xxx, :size => xxx, :fn => filename}]
250
- def check_resources(resources)
250
+ def check_resources(resources,infra=nil)
251
251
  check_login_status
252
- status, body, headers = json_post(VMC::RESOURCES_PATH, resources)
252
+ url = VMC::RESOURCES_PATH
253
+ unless infra.nil?
254
+ url += "?infra=#{infra}"
255
+ end
256
+ status, body, headers = json_post(url, resources)
253
257
  json_parse(body)
254
258
  end
255
259
 
@@ -341,12 +345,40 @@ class VMC::Client
341
345
  end
342
346
 
343
347
  ######################################################
344
-
348
+ # Infrastructure
349
+ ######################################################
350
+
351
+ def infras
352
+ json_get(path(VMC::GLOBAL_INFRAS_PATH))
353
+ rescue
354
+ []
355
+ end
356
+
345
357
  def infra_supported?
346
- # FIXME should get this from proxy
347
- target.match /^https?:\/\/api.appfog.com$/
358
+ !infras.empty?
359
+ end
360
+
361
+ def base_for_infra(name)
362
+ info = infras.detect { |i| i[:infra] == name }
363
+ info ? info[:base] : "aws.af.cm"
364
+ end
365
+
366
+ def infra_valid?(name)
367
+ infras.detect { |i| i[:infra] == name }
368
+ end
369
+
370
+ def infra_descriptions
371
+ infras.map { |i| i[:description] }
372
+ end
373
+
374
+ def infra_name_for_description(desc)
375
+ info = infras.detect { |i| i[:description] == desc }
376
+ info ? info[:infra] : ""
377
+ end
378
+
379
+ def suggest_url(infra=nil)
380
+ @suggest_url ||= base_for_infra(infra || @infra)
348
381
  end
349
-
350
382
 
351
383
 
352
384
  private
data/lib/vmc/const.rb CHANGED
@@ -12,6 +12,7 @@ module VMC
12
12
  INFO_PATH = 'info'
13
13
  GLOBAL_SERVICES_PATH = ['info', 'services']
14
14
  GLOBAL_RUNTIMES_PATH = ['info', 'runtimes']
15
+ GLOBAL_INFRAS_PATH = ['info', 'infras']
15
16
  RESOURCES_PATH = 'resources'
16
17
 
17
18
  # User specific paths
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: af
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.18.3
4
+ version: 0.3.18.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-14 00:00:00.000000000Z
12
+ date: 2012-08-17 00:00:00.000000000 -07:00
13
+ default_executable:
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: json_pure
16
- requirement: &70285973974440 !ruby/object:Gem::Requirement
17
+ requirement: &2153196420 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -24,10 +25,10 @@ dependencies:
24
25
  version: 1.7.0
25
26
  type: :runtime
26
27
  prerelease: false
27
- version_requirements: *70285973974440
28
+ version_requirements: *2153196420
28
29
  - !ruby/object:Gem::Dependency
29
30
  name: rubyzip
30
- requirement: &70285973973680 !ruby/object:Gem::Requirement
31
+ requirement: &2153195620 !ruby/object:Gem::Requirement
31
32
  none: false
32
33
  requirements:
33
34
  - - ~>
@@ -35,10 +36,10 @@ dependencies:
35
36
  version: 0.9.4
36
37
  type: :runtime
37
38
  prerelease: false
38
- version_requirements: *70285973973680
39
+ version_requirements: *2153195620
39
40
  - !ruby/object:Gem::Dependency
40
41
  name: rest-client
41
- requirement: &70285973973200 !ruby/object:Gem::Requirement
42
+ requirement: &2153195120 !ruby/object:Gem::Requirement
42
43
  none: false
43
44
  requirements:
44
45
  - - ! '>='
@@ -49,10 +50,10 @@ dependencies:
49
50
  version: 1.7.0
50
51
  type: :runtime
51
52
  prerelease: false
52
- version_requirements: *70285973973200
53
+ version_requirements: *2153195120
53
54
  - !ruby/object:Gem::Dependency
54
55
  name: terminal-table
55
- requirement: &70285973972480 !ruby/object:Gem::Requirement
56
+ requirement: &2153194380 !ruby/object:Gem::Requirement
56
57
  none: false
57
58
  requirements:
58
59
  - - ~>
@@ -60,10 +61,10 @@ dependencies:
60
61
  version: 1.4.2
61
62
  type: :runtime
62
63
  prerelease: false
63
- version_requirements: *70285973972480
64
+ version_requirements: *2153194380
64
65
  - !ruby/object:Gem::Dependency
65
66
  name: interact
66
- requirement: &70285973972020 !ruby/object:Gem::Requirement
67
+ requirement: &2153193920 !ruby/object:Gem::Requirement
67
68
  none: false
68
69
  requirements:
69
70
  - - ~>
@@ -71,10 +72,10 @@ dependencies:
71
72
  version: 0.4.0
72
73
  type: :runtime
73
74
  prerelease: false
74
- version_requirements: *70285973972020
75
+ version_requirements: *2153193920
75
76
  - !ruby/object:Gem::Dependency
76
77
  name: addressable
77
- requirement: &70285973971560 !ruby/object:Gem::Requirement
78
+ requirement: &2153193440 !ruby/object:Gem::Requirement
78
79
  none: false
79
80
  requirements:
80
81
  - - ~>
@@ -82,10 +83,10 @@ dependencies:
82
83
  version: 2.2.6
83
84
  type: :runtime
84
85
  prerelease: false
85
- version_requirements: *70285973971560
86
+ version_requirements: *2153193440
86
87
  - !ruby/object:Gem::Dependency
87
88
  name: uuidtools
88
- requirement: &70285973971100 !ruby/object:Gem::Requirement
89
+ requirement: &2153192940 !ruby/object:Gem::Requirement
89
90
  none: false
90
91
  requirements:
91
92
  - - ~>
@@ -93,10 +94,10 @@ dependencies:
93
94
  version: 2.1.0
94
95
  type: :runtime
95
96
  prerelease: false
96
- version_requirements: *70285973971100
97
+ version_requirements: *2153192940
97
98
  - !ruby/object:Gem::Dependency
98
99
  name: rb-readline
99
- requirement: &70285973970640 !ruby/object:Gem::Requirement
100
+ requirement: &2153192340 !ruby/object:Gem::Requirement
100
101
  none: false
101
102
  requirements:
102
103
  - - ~>
@@ -104,10 +105,10 @@ dependencies:
104
105
  version: 0.4.2
105
106
  type: :runtime
106
107
  prerelease: false
107
- version_requirements: *70285973970640
108
+ version_requirements: *2153192340
108
109
  - !ruby/object:Gem::Dependency
109
110
  name: rake
110
- requirement: &70285973970260 !ruby/object:Gem::Requirement
111
+ requirement: &2153191840 !ruby/object:Gem::Requirement
111
112
  none: false
112
113
  requirements:
113
114
  - - ! '>='
@@ -115,10 +116,10 @@ dependencies:
115
116
  version: '0'
116
117
  type: :development
117
118
  prerelease: false
118
- version_requirements: *70285973970260
119
+ version_requirements: *2153191840
119
120
  - !ruby/object:Gem::Dependency
120
121
  name: rspec
121
- requirement: &70285973969720 !ruby/object:Gem::Requirement
122
+ requirement: &2153191200 !ruby/object:Gem::Requirement
122
123
  none: false
123
124
  requirements:
124
125
  - - ~>
@@ -126,10 +127,10 @@ dependencies:
126
127
  version: 1.3.0
127
128
  type: :development
128
129
  prerelease: false
129
- version_requirements: *70285973969720
130
+ version_requirements: *2153191200
130
131
  - !ruby/object:Gem::Dependency
131
132
  name: webmock
132
- requirement: &70285973969220 !ruby/object:Gem::Requirement
133
+ requirement: &2153190580 !ruby/object:Gem::Requirement
133
134
  none: false
134
135
  requirements:
135
136
  - - ~>
@@ -137,7 +138,7 @@ dependencies:
137
138
  version: 1.5.0
138
139
  type: :development
139
140
  prerelease: false
140
- version_requirements: *70285973969220
141
+ version_requirements: *2153190580
141
142
  description: AppFog.com CLI
142
143
  email: support@appfog.com
143
144
  executables:
@@ -167,7 +168,6 @@ files:
167
168
  - lib/cli/core_ext.rb
168
169
  - lib/cli/errors.rb
169
170
  - lib/cli/frameworks.rb
170
- - lib/cli/infra_helper.rb
171
171
  - lib/cli/manifest_helper.rb
172
172
  - lib/cli/runner.rb
173
173
  - lib/cli/services_helper.rb
@@ -190,6 +190,7 @@ files:
190
190
  - caldecott_helper/Gemfile.lock
191
191
  - caldecott_helper/server.rb
192
192
  - bin/af
193
+ has_rdoc: true
193
194
  homepage: http://appfog.com
194
195
  licenses: []
195
196
  post_install_message:
@@ -210,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
211
  version: '0'
211
212
  requirements: []
212
213
  rubyforge_project:
213
- rubygems_version: 1.8.6
214
+ rubygems_version: 1.6.2
214
215
  signing_key:
215
216
  specification_version: 3
216
217
  summary: AppFog.com CLI
@@ -1,42 +0,0 @@
1
-
2
-
3
- module VMC::Cli
4
- module InfraHelper
5
-
6
- class << self
7
-
8
- def list
9
- infras.values
10
- end
11
-
12
- def base_for_infra(infra)
13
- infras.has_key?(infra) ? infras[infra][:base] : "aws.af.cm"
14
- end
15
-
16
- def valid?(infra)
17
- infra && infras.has_key?(infra)
18
- end
19
-
20
- def infra_descriptions
21
- infras.map { |k,v| v[:description] }
22
- end
23
-
24
- def name_for_description(desc)
25
- name, info = infras.detect { |k,v| v[:description] == desc }
26
- name
27
- end
28
-
29
- private
30
- def infras
31
- {
32
- "ap-aws" => { :name => "ap-aws", :base => "ap01.aws.af.cm", :description => "AWS Asia SE - Singapore" },
33
- "eu-aws" => { :name => "eu-aws", :base => "eu01.aws.af.cm", :description => "AWS EU West - Ireland" },
34
- "rs" => { :name => "rs", :base => "rs.af.cm", :description => "Rackspace AZ 1 - Dallas" },
35
- "aws" => { :name => "aws", :base => "aws.af.cm", :description => "AWS US East - Virginia" }
36
- }
37
- end
38
-
39
- end
40
-
41
- end
42
- end