bosh_cli 1.2549.0 → 1.2559.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cli/commands/job_rename.rb +0 -2
- data/lib/cli/deployment_helper.rb +1 -5
- data/lib/cli/job_builder.rb +2 -3
- data/lib/cli/package_builder.rb +2 -1
- data/lib/cli/packaging_helper.rb +33 -51
- data/lib/cli/version.rb +1 -1
- data/lib/cli/version_calc.rb +5 -2
- data/lib/cli/versions_index.rb +10 -13
- metadata +8 -8
@@ -1,9 +1,5 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
module Bosh::Cli
|
4
2
|
module DeploymentHelper
|
5
|
-
include VersionCalc
|
6
|
-
|
7
3
|
def prepare_deployment_manifest(options = {})
|
8
4
|
deployment_required
|
9
5
|
manifest_filename = deployment
|
@@ -372,7 +368,7 @@ module Bosh::Cli
|
|
372
368
|
end
|
373
369
|
|
374
370
|
stemcells.inject({}) do |hash, (name, versions)|
|
375
|
-
hash[name] = versions.
|
371
|
+
hash[name] = versions.map { |v| Bosh::Common::VersionNumber.new(v) }.max.to_s
|
376
372
|
hash
|
377
373
|
end
|
378
374
|
end
|
data/lib/cli/job_builder.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
module Bosh::Cli
|
4
2
|
class JobBuilder
|
5
3
|
include PackagingHelper
|
@@ -236,7 +234,8 @@ module Bosh::Cli
|
|
236
234
|
private
|
237
235
|
|
238
236
|
def make_fingerprint
|
239
|
-
|
237
|
+
versioning_scheme = 2
|
238
|
+
contents = "v#{versioning_scheme}"
|
240
239
|
|
241
240
|
files = all_templates
|
242
241
|
files << File.join(job_dir, "spec")
|
data/lib/cli/package_builder.rb
CHANGED
data/lib/cli/packaging_helper.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
# This relies on having the following instance variables in a host class:
|
4
2
|
# @dev_builds_dir, @final_builds_dir, @blobstore,
|
5
3
|
# @name, @version, @tarball_path, @final, @artefact_type
|
6
4
|
|
7
5
|
module Bosh::Cli
|
8
6
|
module PackagingHelper
|
9
|
-
include Bosh::Cli::VersionCalc
|
10
|
-
|
11
7
|
attr_accessor :dry_run
|
12
8
|
|
13
9
|
def init_indices
|
@@ -27,32 +23,21 @@ module Bosh::Cli
|
|
27
23
|
@tarball_generated || @promoted || @will_be_promoted
|
28
24
|
end
|
29
25
|
|
30
|
-
def older_version?
|
31
|
-
if @tarball_generated
|
32
|
-
false
|
33
|
-
elsif @used_final_version
|
34
|
-
version_cmp(@version, @final_index.latest_version) < 0
|
35
|
-
else
|
36
|
-
version_cmp(@version, @dev_index.latest_version) < 0
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
26
|
def notes
|
41
27
|
notes = []
|
42
28
|
|
43
29
|
if @will_be_promoted
|
44
|
-
new_final_version = @
|
30
|
+
new_final_version = @version
|
45
31
|
notes << "new final version #{new_final_version}"
|
46
32
|
elsif new_version?
|
47
|
-
notes <<
|
33
|
+
notes << 'new version'
|
48
34
|
end
|
49
35
|
|
50
|
-
notes << "older than latest" if older_version?
|
51
36
|
notes
|
52
37
|
end
|
53
38
|
|
54
39
|
def build
|
55
|
-
with_indent(
|
40
|
+
with_indent(' ') do
|
56
41
|
use_final_version || use_dev_version || generate_tarball
|
57
42
|
end
|
58
43
|
upload_tarball(@tarball_path) if final? && !dry_run?
|
@@ -60,20 +45,20 @@ module Bosh::Cli
|
|
60
45
|
end
|
61
46
|
|
62
47
|
def use_final_version
|
63
|
-
say(
|
48
|
+
say('Final version:', ' ')
|
64
49
|
|
65
50
|
item = @final_index[fingerprint]
|
66
51
|
|
67
52
|
if item.nil?
|
68
|
-
say(
|
53
|
+
say('NOT FOUND'.make_red)
|
69
54
|
return nil
|
70
55
|
end
|
71
56
|
|
72
|
-
blobstore_id = item[
|
73
|
-
version =
|
57
|
+
blobstore_id = item['blobstore_id']
|
58
|
+
version = fingerprint
|
74
59
|
|
75
60
|
if blobstore_id.nil?
|
76
|
-
say(
|
61
|
+
say('No blobstore id'.make_red)
|
77
62
|
return nil
|
78
63
|
end
|
79
64
|
|
@@ -81,29 +66,29 @@ module Bosh::Cli
|
|
81
66
|
need_fetch = true
|
82
67
|
|
83
68
|
if File.exists?(filename)
|
84
|
-
say(
|
85
|
-
if file_checksum(filename) == item[
|
69
|
+
say('FOUND LOCAL'.make_green)
|
70
|
+
if file_checksum(filename) == item['sha1']
|
86
71
|
@tarball_path = filename
|
87
72
|
need_fetch = false
|
88
73
|
else
|
89
|
-
say(
|
74
|
+
say('LOCAL CHECKSUM MISMATCH'.make_red)
|
90
75
|
need_fetch = true
|
91
76
|
end
|
92
77
|
end
|
93
78
|
|
94
79
|
if need_fetch
|
95
80
|
say("Downloading `#{name} (#{version})'...".make_green)
|
96
|
-
tmp_file = File.open(File.join(Dir.mktmpdir, name),
|
81
|
+
tmp_file = File.open(File.join(Dir.mktmpdir, name), 'w')
|
97
82
|
@blobstore.get(blobstore_id, tmp_file)
|
98
83
|
tmp_file.close
|
99
|
-
if Digest::SHA1.file(tmp_file.path).hexdigest == item[
|
84
|
+
if Digest::SHA1.file(tmp_file.path).hexdigest == item['sha1']
|
100
85
|
@tarball_path = @final_index.add_version(fingerprint,
|
101
86
|
item,
|
102
87
|
tmp_file.path)
|
103
88
|
else
|
104
89
|
err("`#{name}' (#{version}) is corrupted in blobstore " +
|
105
90
|
"(id=#{blobstore_id}), " +
|
106
|
-
|
91
|
+
'please remove it manually and re-generate the final release')
|
107
92
|
end
|
108
93
|
end
|
109
94
|
|
@@ -117,25 +102,25 @@ module Bosh::Cli
|
|
117
102
|
end
|
118
103
|
|
119
104
|
def use_dev_version
|
120
|
-
say(
|
105
|
+
say('Dev version:', ' ')
|
121
106
|
item = @dev_index[fingerprint]
|
122
107
|
|
123
108
|
if item.nil?
|
124
|
-
say(
|
109
|
+
say('NOT FOUND'.make_red)
|
125
110
|
return nil
|
126
111
|
end
|
127
112
|
|
128
|
-
version =
|
113
|
+
version = fingerprint
|
129
114
|
filename = @dev_index.filename(version)
|
130
115
|
|
131
116
|
if File.exists?(filename)
|
132
|
-
say(
|
117
|
+
say('FOUND LOCAL'.make_green)
|
133
118
|
else
|
134
|
-
say(
|
119
|
+
say('TARBALL MISSING'.make_red)
|
135
120
|
return nil
|
136
121
|
end
|
137
122
|
|
138
|
-
if file_checksum(filename) == item[
|
123
|
+
if file_checksum(filename) == item['sha1']
|
139
124
|
@tarball_path = filename
|
140
125
|
@version = version
|
141
126
|
@used_dev_version = true
|
@@ -147,20 +132,17 @@ module Bosh::Cli
|
|
147
132
|
|
148
133
|
def generate_tarball
|
149
134
|
if final?
|
150
|
-
err_message =
|
135
|
+
err_message = 'No matching build found for ' +
|
151
136
|
"`#{@name}' #{@artefact_type}.\n" +
|
152
137
|
"Please consider creating a dev release first.\n" +
|
153
138
|
"The fingerprint is `#{fingerprint}'."
|
154
139
|
err(err_message)
|
155
140
|
end
|
156
141
|
|
157
|
-
|
158
|
-
new_minor = minor_version(@dev_index.latest_version(current_final)) + 1
|
159
|
-
|
160
|
-
version = "#{current_final}.#{new_minor}-dev"
|
142
|
+
version = fingerprint
|
161
143
|
tmp_file = Tempfile.new(name)
|
162
144
|
|
163
|
-
say(
|
145
|
+
say('Generating...')
|
164
146
|
|
165
147
|
copy_files
|
166
148
|
|
@@ -172,7 +154,7 @@ module Bosh::Cli
|
|
172
154
|
end
|
173
155
|
|
174
156
|
item = {
|
175
|
-
|
157
|
+
'version' => version
|
176
158
|
}
|
177
159
|
|
178
160
|
unless dry_run?
|
@@ -192,20 +174,20 @@ module Bosh::Cli
|
|
192
174
|
say("Uploading final version #{version}...")
|
193
175
|
|
194
176
|
if item
|
195
|
-
say(
|
177
|
+
say('This package has already been uploaded')
|
196
178
|
return
|
197
179
|
end
|
198
180
|
|
199
|
-
version =
|
181
|
+
version = fingerprint
|
200
182
|
|
201
183
|
blobstore_id = nil
|
202
|
-
File.open(path,
|
184
|
+
File.open(path, 'r') do |f|
|
203
185
|
blobstore_id = @blobstore.create(f)
|
204
186
|
end
|
205
187
|
|
206
188
|
item = {
|
207
|
-
|
208
|
-
|
189
|
+
'blobstore_id' => blobstore_id,
|
190
|
+
'version' => version
|
209
191
|
}
|
210
192
|
|
211
193
|
say("Uploaded, blobstore id #{blobstore_id}")
|
@@ -227,7 +209,7 @@ module Bosh::Cli
|
|
227
209
|
file_checksum(@tarball_path)
|
228
210
|
else
|
229
211
|
raise RuntimeError,
|
230
|
-
|
212
|
+
'cannot read checksum for not yet generated package/job'
|
231
213
|
end
|
232
214
|
end
|
233
215
|
|
@@ -239,11 +221,11 @@ module Bosh::Cli
|
|
239
221
|
# fingerprints to change, hence the exact values below.
|
240
222
|
def tracked_permissions(path)
|
241
223
|
if File.directory?(path)
|
242
|
-
|
224
|
+
'40755'
|
243
225
|
elsif File.executable?(path)
|
244
|
-
|
226
|
+
'100755'
|
245
227
|
else
|
246
|
-
|
228
|
+
'100644'
|
247
229
|
end
|
248
230
|
end
|
249
231
|
end
|
data/lib/cli/version.rb
CHANGED
data/lib/cli/version_calc.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
require 'common/version_number'
|
4
2
|
|
3
|
+
##
|
4
|
+
# This module is in general unsafe to use as packages and jobs
|
5
|
+
# use their fingerprints as versions and therefore are not numerically
|
6
|
+
# comparable. At the moment releases retain a numerically comparable
|
7
|
+
# version which necessitates this code
|
5
8
|
module Bosh::Cli
|
6
9
|
module VersionCalc
|
7
10
|
|
data/lib/cli/versions_index.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
module Bosh::Cli
|
4
2
|
class VersionsIndex
|
5
3
|
include VersionCalc
|
@@ -27,6 +25,14 @@ module Bosh::Cli
|
|
27
25
|
@data["builds"][fingerprint]
|
28
26
|
end
|
29
27
|
|
28
|
+
##
|
29
|
+
# Return the last version from the version index file
|
30
|
+
# as jobs and packages have a non-numeric versioning
|
31
|
+
# scheme based on their fingerprint. This function relies
|
32
|
+
# on hash insertion order being preserved. While this
|
33
|
+
# is the behavior for Ruby 1.9.X and 2.X we should
|
34
|
+
# remember that this implementation is
|
35
|
+
# a little brittle.
|
30
36
|
def latest_version(major = nil)
|
31
37
|
builds = @data["builds"].values
|
32
38
|
|
@@ -38,16 +44,7 @@ module Bosh::Cli
|
|
38
44
|
|
39
45
|
return nil if builds.empty?
|
40
46
|
|
41
|
-
|
42
|
-
cmp = version_cmp(build2["version"], build1["version"])
|
43
|
-
if cmp == 0
|
44
|
-
raise "There is a duplicate version `#{build1["version"]}' " +
|
45
|
-
"in index `#{@index_file}'"
|
46
|
-
end
|
47
|
-
cmp
|
48
|
-
end
|
49
|
-
|
50
|
-
sorted[0]["version"]
|
47
|
+
builds.last["version"]
|
51
48
|
end
|
52
49
|
|
53
50
|
def version_exists?(version)
|
@@ -69,7 +66,7 @@ module Bosh::Cli
|
|
69
66
|
end
|
70
67
|
|
71
68
|
@data["builds"].each_pair do |fp, build|
|
72
|
-
if
|
69
|
+
if build["version"] == version && fp != fingerprint
|
73
70
|
raise "Trying to add duplicate version `#{version}' " +
|
74
71
|
"into index `#{@index_file}'"
|
75
72
|
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.
|
4
|
+
version: 1.2559.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-05-
|
12
|
+
date: 2014-05-15 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.
|
21
|
+
version: 1.2559.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.
|
29
|
+
version: 1.2559.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.
|
117
|
+
version: 1.2559.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.
|
125
|
+
version: 1.2559.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
|
-
|
272
|
+
664e0d'
|
273
273
|
email: support@cloudfoundry.com
|
274
274
|
executables:
|
275
275
|
- bosh
|
@@ -382,7 +382,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
382
382
|
version: '0'
|
383
383
|
segments:
|
384
384
|
- 0
|
385
|
-
hash:
|
385
|
+
hash: 850142297051739399
|
386
386
|
requirements: []
|
387
387
|
rubyforge_project:
|
388
388
|
rubygems_version: 1.8.23
|