bosh_cli 1.5.0.pre.1365 → 1.5.0.pre.1374
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.
- data/lib/cli/commands/stemcell.rb +5 -6
- data/lib/cli/public_stemcell.rb +15 -18
- data/lib/cli/public_stemcell_presenter.rb +16 -19
- data/lib/cli/public_stemcells.rb +36 -0
- data/lib/cli/version.rb +1 -1
- metadata +56 -8
- data/lib/cli/public_stemcell_index.rb +0 -41
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'cli/public_stemcell_presenter'
|
2
|
-
require 'cli/
|
2
|
+
require 'cli/public_stemcells'
|
3
3
|
|
4
4
|
module Bosh::Cli
|
5
5
|
class Command::Stemcell < Command::Base
|
@@ -102,19 +102,18 @@ module Bosh::Cli
|
|
102
102
|
usage 'public stemcells'
|
103
103
|
desc 'Show the list of publicly available stemcells for download.'
|
104
104
|
option '--full', 'show the full download url'
|
105
|
-
option '--tags tag1,tag2...', Array, 'filter by tag'
|
106
105
|
option '--all', 'show all stemcells'
|
107
106
|
def list_public
|
108
|
-
|
109
|
-
public_stemcells_presenter = PublicStemcellPresenter.new(self,
|
107
|
+
public_stemcells = PublicStemcells.new
|
108
|
+
public_stemcells_presenter = PublicStemcellPresenter.new(self, public_stemcells)
|
110
109
|
public_stemcells_presenter.list(options)
|
111
110
|
end
|
112
111
|
|
113
112
|
usage 'download public stemcell'
|
114
113
|
desc 'Downloads a stemcell from the public blobstore'
|
115
114
|
def download_public(stemcell_filename)
|
116
|
-
|
117
|
-
public_stemcells_presenter = PublicStemcellPresenter.new(self,
|
115
|
+
public_stemcells = PublicStemcells.new
|
116
|
+
public_stemcells_presenter = PublicStemcellPresenter.new(self, public_stemcells)
|
118
117
|
public_stemcells_presenter.download(stemcell_filename)
|
119
118
|
end
|
120
119
|
|
data/lib/cli/public_stemcell.rb
CHANGED
@@ -1,34 +1,31 @@
|
|
1
1
|
module Bosh::Cli
|
2
2
|
class PublicStemcell
|
3
|
-
attr_reader :
|
3
|
+
attr_reader :size
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
@
|
7
|
-
@
|
5
|
+
def initialize(key, size)
|
6
|
+
@key = key
|
7
|
+
@size = size
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
@
|
12
|
-
end
|
13
|
-
|
14
|
-
def size
|
15
|
-
@properties['size']
|
10
|
+
def name
|
11
|
+
File.basename(@key)
|
16
12
|
end
|
17
13
|
|
18
|
-
def
|
19
|
-
@
|
14
|
+
def version
|
15
|
+
version_digits = @key.gsub(/[^\d]/, '')
|
16
|
+
version_digits.to_i
|
20
17
|
end
|
21
18
|
|
22
|
-
def
|
23
|
-
|
19
|
+
def variety
|
20
|
+
name.gsub(version.to_s, '')
|
24
21
|
end
|
25
22
|
|
26
|
-
def
|
27
|
-
|
23
|
+
def url
|
24
|
+
"#{PublicStemcells::PUBLIC_STEMCELLS_BASE_URL}/#{@key}"
|
28
25
|
end
|
29
26
|
|
30
|
-
def
|
31
|
-
|
27
|
+
def legacy?
|
28
|
+
@key.include?('legacy')
|
32
29
|
end
|
33
30
|
end
|
34
31
|
end
|
@@ -1,24 +1,19 @@
|
|
1
|
-
require 'cli/public_stemcell_index'
|
2
1
|
require 'cli/download_with_progress'
|
3
2
|
|
4
3
|
module Bosh::Cli
|
5
4
|
class PublicStemcellPresenter
|
6
|
-
def initialize(ui,
|
5
|
+
def initialize(ui, public_stemcells)
|
7
6
|
@ui = ui
|
8
|
-
@
|
7
|
+
@public_stemcells = public_stemcells
|
9
8
|
end
|
10
9
|
|
11
10
|
def list(options)
|
12
11
|
full = !!options[:full]
|
13
|
-
requested_tags = options[:tags] || %w(stable)
|
14
|
-
|
15
12
|
stemcells_table = @ui.table do |t|
|
16
|
-
t.headings = full ? %w(Name Url
|
13
|
+
t.headings = full ? %w(Name Url) : %w(Name)
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
t << (full ? [stemcell.name, stemcell.url, stemcell.tag_names] : [stemcell.name, stemcell.tag_names])
|
21
|
-
end
|
15
|
+
stemcell_for(options).each do |stemcell|
|
16
|
+
t << (full ? [stemcell.name, stemcell.url] : [stemcell.name])
|
22
17
|
end
|
23
18
|
end
|
24
19
|
|
@@ -27,23 +22,25 @@ module Bosh::Cli
|
|
27
22
|
end
|
28
23
|
|
29
24
|
def download(stemcell_name)
|
30
|
-
unless @
|
31
|
-
@ui.err("'#{stemcell_name}' not found
|
25
|
+
unless @public_stemcells.has_stemcell?(stemcell_name)
|
26
|
+
@ui.err("'#{stemcell_name}' not found.")
|
32
27
|
end
|
33
28
|
|
34
29
|
if File.exists?(stemcell_name) && !@ui.confirmed?("Overwrite existing file `#{stemcell_name}'?")
|
35
30
|
@ui.err("File `#{stemcell_name}' already exists")
|
36
31
|
end
|
37
32
|
|
38
|
-
stemcell = @
|
39
|
-
download_with_progress = DownloadWithProgress.new(stemcell.
|
33
|
+
stemcell = @public_stemcells.find(stemcell_name)
|
34
|
+
download_with_progress = DownloadWithProgress.new(stemcell.url, stemcell.size)
|
40
35
|
download_with_progress.perform
|
41
36
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
37
|
+
@ui.say('Download complete'.make_green)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def stemcell_for(options)
|
43
|
+
options[:all] ? @public_stemcells.all : @public_stemcells.recent
|
47
44
|
end
|
48
45
|
end
|
49
46
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'httpclient'
|
2
|
+
require 'rexml/document'
|
3
|
+
|
4
|
+
require 'cli/public_stemcell'
|
5
|
+
|
6
|
+
module Bosh::Cli
|
7
|
+
class PublicStemcells
|
8
|
+
PUBLIC_STEMCELLS_BASE_URL = 'https://bosh-jenkins-artifacts.s3.amazonaws.com'
|
9
|
+
|
10
|
+
def has_stemcell?(stemcell_filename)
|
11
|
+
all.any? { |stemcell| stemcell.name == stemcell_filename }
|
12
|
+
end
|
13
|
+
|
14
|
+
def find(stemcell_filename)
|
15
|
+
all.detect { |stemcell| stemcell.name == stemcell_filename }
|
16
|
+
end
|
17
|
+
|
18
|
+
def all
|
19
|
+
response = HTTPClient.new.get(PUBLIC_STEMCELLS_BASE_URL)
|
20
|
+
doc = REXML::Document.new(response.body)
|
21
|
+
stemcell_tags = REXML::XPath.match(doc, "/ListBucketResult/Contents[Key[text()[starts-with(.,'bosh-stemcell/') and not(contains(.,'latest'))]]]")
|
22
|
+
|
23
|
+
stemcell_tags.map do |stemcell_tag|
|
24
|
+
stemcell_key = stemcell_tag.get_text('Key').value
|
25
|
+
stemcell_size = Integer(stemcell_tag.get_text('Size').value)
|
26
|
+
|
27
|
+
PublicStemcell.new(stemcell_key, stemcell_size)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def recent
|
32
|
+
stemcell_varietes = all.reject(&:legacy?).group_by(&:variety).values
|
33
|
+
stemcell_varietes.map { |stemcells| stemcells.sort_by(&:version).last }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/cli/version.rb
CHANGED
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.5.0.pre.
|
4
|
+
version: 1.5.0.pre.1374
|
5
5
|
prerelease: 6
|
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: 2013-11-
|
12
|
+
date: 2013-11-20 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.5.0.pre.
|
21
|
+
version: 1.5.0.pre.1374
|
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.5.0.pre.
|
29
|
+
version: 1.5.0.pre.1374
|
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.5.0.pre.
|
117
|
+
version: 1.5.0.pre.1374
|
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.5.0.pre.
|
125
|
+
version: 1.5.0.pre.1374
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: net-ssh
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -203,6 +203,22 @@ dependencies:
|
|
203
203
|
- - ~>
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: 0.5.4
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: fakefs
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ! '>='
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
206
222
|
- !ruby/object:Gem::Dependency
|
207
223
|
name: rspec-fire
|
208
224
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,9 +235,41 @@ dependencies:
|
|
219
235
|
- - ! '>='
|
220
236
|
- !ruby/object:Gem::Version
|
221
237
|
version: '0'
|
238
|
+
- !ruby/object:Gem::Dependency
|
239
|
+
name: webmock
|
240
|
+
requirement: !ruby/object:Gem::Requirement
|
241
|
+
none: false
|
242
|
+
requirements:
|
243
|
+
- - ! '>='
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: '0'
|
246
|
+
type: :development
|
247
|
+
prerelease: false
|
248
|
+
version_requirements: !ruby/object:Gem::Requirement
|
249
|
+
none: false
|
250
|
+
requirements:
|
251
|
+
- - ! '>='
|
252
|
+
- !ruby/object:Gem::Version
|
253
|
+
version: '0'
|
254
|
+
- !ruby/object:Gem::Dependency
|
255
|
+
name: vcr
|
256
|
+
requirement: !ruby/object:Gem::Requirement
|
257
|
+
none: false
|
258
|
+
requirements:
|
259
|
+
- - ! '>='
|
260
|
+
- !ruby/object:Gem::Version
|
261
|
+
version: '0'
|
262
|
+
type: :development
|
263
|
+
prerelease: false
|
264
|
+
version_requirements: !ruby/object:Gem::Requirement
|
265
|
+
none: false
|
266
|
+
requirements:
|
267
|
+
- - ! '>='
|
268
|
+
- !ruby/object:Gem::Version
|
269
|
+
version: '0'
|
222
270
|
description: ! 'BOSH CLI
|
223
271
|
|
224
|
-
|
272
|
+
d50b1a'
|
225
273
|
email: support@cloudfoundry.com
|
226
274
|
executables:
|
227
275
|
- bosh
|
@@ -285,8 +333,8 @@ files:
|
|
285
333
|
- lib/cli/package_builder.rb
|
286
334
|
- lib/cli/packaging_helper.rb
|
287
335
|
- lib/cli/public_stemcell.rb
|
288
|
-
- lib/cli/public_stemcell_index.rb
|
289
336
|
- lib/cli/public_stemcell_presenter.rb
|
337
|
+
- lib/cli/public_stemcells.rb
|
290
338
|
- lib/cli/release.rb
|
291
339
|
- lib/cli/release_builder.rb
|
292
340
|
- lib/cli/release_compiler.rb
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'cli/public_stemcell'
|
2
|
-
|
3
|
-
module Bosh::Cli
|
4
|
-
class PublicStemcellIndex
|
5
|
-
def self.download(ui)
|
6
|
-
index_url = 'https://s3.amazonaws.com/blob.cfblob.com/stemcells/public_stemcells_index.yml'
|
7
|
-
|
8
|
-
http_client = HTTPClient.new
|
9
|
-
response = http_client.get(index_url)
|
10
|
-
status_code = response.http_header.status_code
|
11
|
-
|
12
|
-
if status_code == HTTP::Status::OK
|
13
|
-
index = Psych.load(response.body)
|
14
|
-
index.delete('public_stemcells_index.yml') if index.has_key?('public_stemcells_index.yml')
|
15
|
-
new(index)
|
16
|
-
else
|
17
|
-
ui.err("Received HTTP #{status_code} from #{index_url}.")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def initialize(index)
|
22
|
-
@index = index
|
23
|
-
end
|
24
|
-
|
25
|
-
def has_stemcell?(stemcell_name)
|
26
|
-
@index.has_key?(stemcell_name)
|
27
|
-
end
|
28
|
-
|
29
|
-
def names
|
30
|
-
@index.keys.sort
|
31
|
-
end
|
32
|
-
|
33
|
-
def find(stemcell_name)
|
34
|
-
PublicStemcell.new(stemcell_name, @index[stemcell_name])
|
35
|
-
end
|
36
|
-
|
37
|
-
def each
|
38
|
-
names.map { |stemcell_name| yield find(stemcell_name) }
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|