bosh_cli 1.1868.0 → 1.1975.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.
@@ -4,6 +4,7 @@ require 'cli/public_stemcells'
4
4
  module Bosh::Cli
5
5
  class Command::Stemcell < Command::Base
6
6
  include Bosh::Cli::VersionCalc
7
+ STEMCELL_EXISTS_ERROR_CODE = 50002
7
8
 
8
9
  usage 'verify stemcell'
9
10
  desc 'Verify stemcell'
@@ -28,6 +29,7 @@ module Bosh::Cli
28
29
 
29
30
  usage 'upload stemcell'
30
31
  desc 'Upload stemcell (stemcell_location can be a local file or a remote URI)'
32
+ option '--skip-if-exists', 'skips upload if stemcell already exists'
31
33
  def upload(stemcell_location)
32
34
  auth_required
33
35
 
@@ -49,8 +51,12 @@ module Bosh::Cli
49
51
  version = stemcell.manifest['version']
50
52
 
51
53
  if exists?(name, version)
52
- err("Stemcell `#{name}/#{version}' already exists, " +
53
- 'increment the version if it has changed')
54
+ if options[:skip_if_exists]
55
+ say("Stemcell `#{name}/#{version}' already exists. Skipping upload.")
56
+ return
57
+ else
58
+ err("Stemcell `#{name}/#{version}' already exists. Increment the version if it has changed.")
59
+ end
54
60
  else
55
61
  say('No')
56
62
  end
@@ -65,13 +71,15 @@ module Bosh::Cli
65
71
  say("Using remote stemcell `#{stemcell_location}'")
66
72
  end
67
73
 
68
- if stemcell_type == 'local'
69
- status, task_id = director.upload_stemcell(stemcell_location)
70
- else
71
- status, task_id = director.upload_remote_stemcell(stemcell_location)
74
+ status, task_id = apply_upload_stemcell_strategy(stemcell_type, stemcell_location)
75
+ success_message = 'Stemcell uploaded and created.'
76
+
77
+ if status == :error && options[:skip_if_exists] && last_event(task_id)['error']['code'] == STEMCELL_EXISTS_ERROR_CODE
78
+ status = :done
79
+ success_message = skip_existing_stemcell_message(stemcell_type, stemcell_location)
72
80
  end
73
81
 
74
- task_report(status, task_id, 'Stemcell uploaded and created')
82
+ task_report(status, task_id, success_message)
75
83
  end
76
84
 
77
85
  usage 'stemcells'
@@ -146,6 +154,27 @@ module Bosh::Cli
146
154
 
147
155
  private
148
156
 
157
+ def skip_existing_stemcell_message(stemcell_type, stemcell_location)
158
+ if stemcell_type == 'local'
159
+ 'Stemcell already exists. Skipping upload.'
160
+ else
161
+ "Stemcell at #{stemcell_location} already exists."
162
+ end
163
+ end
164
+
165
+ def apply_upload_stemcell_strategy(stemcell_type, stemcell_location)
166
+ if stemcell_type == 'local'
167
+ director.upload_stemcell(stemcell_location)
168
+ else
169
+ director.upload_remote_stemcell(stemcell_location)
170
+ end
171
+ end
172
+
173
+ def last_event(task_id)
174
+ event_log, _ = director.get_task_output(task_id, 0, 'event')
175
+ JSON.parse(event_log.split("\n").last)
176
+ end
177
+
149
178
  def exists?(name, version)
150
179
  existing = director.list_stemcells.select do |sc|
151
180
  sc['name'] == name && sc['version'] == version
@@ -30,6 +30,11 @@ module Bosh::Cli::TaskTracking
30
30
  event = parse_event(event_line)
31
31
 
32
32
  @lock.synchronize do
33
+ if event['type'] == 'deprecation'
34
+ @buffer.puts("Deprecation: #{event['message']}".make_red)
35
+ return
36
+ end
37
+
33
38
  # Handling the special "error" event
34
39
  if event['error']
35
40
  done_with_stage if @current_stage
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Cli
3
- VERSION = '1.1868.0'
3
+ VERSION = '1.1975.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1868.0
4
+ version: 1.1975.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-29 00:00:00.000000000 Z
12
+ date: 2014-02-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bosh_common
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 1.1868.0
21
+ version: 1.1975.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 1.1868.0
29
+ version: 1.1975.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: json_pure
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 1.1868.0
117
+ version: 1.1975.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 1.1868.0
125
+ version: 1.1975.0
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: net-ssh
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -269,7 +269,7 @@ dependencies:
269
269
  version: '0'
270
270
  description: ! 'BOSH CLI
271
271
 
272
- f69423'
272
+ 9c66c4'
273
273
  email: support@cloudfoundry.com
274
274
  executables:
275
275
  - bosh
@@ -376,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
376
376
  version: '0'
377
377
  segments:
378
378
  - 0
379
- hash: 3291058498486643832
379
+ hash: 3035706384650308221
380
380
  requirements: []
381
381
  rubyforge_project:
382
382
  rubygems_version: 1.8.23