berkshelf 4.1.1 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -3
- data/Gemfile.lock +2 -2
- data/lib/berkshelf/cli.rb +4 -0
- data/lib/berkshelf/errors.rb +12 -0
- data/lib/berkshelf/lockfile.rb +41 -9
- data/lib/berkshelf/version.rb +1 -1
- data/spec/unit/berkshelf/lockfile_spec.rb +67 -21
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9edf31296dfa910235ff1d4f00fc9a56e9bed2db
|
4
|
+
data.tar.gz: aa922a7527312fb21d32f0d80bb600837f4178c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bcb121c3d06aa8869b6956ff6e0eac85e2c2910cca013a0542d7c39bb17062171bd2de49eecf8622d7b696b63ef0aed3fe2a16f49482ea1613a7e27da52b955
|
7
|
+
data.tar.gz: 7a158f6ba5045ef1ea2d4810bfba7bb0a0eaae3475a573f75184bd9293fb9ea2b99552ae1011de52a9c1d871b04f8bb825b57d3aaf7fc829a8c8a7cc1059c2ab
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,19 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [4.
|
4
|
-
[Full Changelog](https://github.com/berkshelf/berkshelf/compare/v4.1.
|
3
|
+
## [4.2.0](https://github.com/berkshelf/berkshelf/tree/4.2.0) (2016-02-18)
|
4
|
+
[Full Changelog](https://github.com/berkshelf/berkshelf/compare/v4.1.1...4.2.0)
|
5
|
+
|
6
|
+
**Closed issues:**
|
7
|
+
|
8
|
+
- Allow one to "berks apply" to a json environment file [\#875](https://github.com/berkshelf/berkshelf/issues/875)
|
9
|
+
|
10
|
+
**Merged pull requests:**
|
11
|
+
|
12
|
+
- Update the chef-config pin to 12.7.2 [\#1516](https://github.com/berkshelf/berkshelf/pull/1516) ([jaym](https://github.com/jaym))
|
13
|
+
- Apply locks to local json environment file [\#1512](https://github.com/berkshelf/berkshelf/pull/1512) ([louis-gounot](https://github.com/louis-gounot))
|
14
|
+
|
15
|
+
## [v4.1.1](https://github.com/berkshelf/berkshelf/tree/v4.1.1) (2016-02-11)
|
16
|
+
[Full Changelog](https://github.com/berkshelf/berkshelf/compare/v4.1.0...v4.1.1)
|
5
17
|
|
6
18
|
**Merged pull requests:**
|
7
19
|
|
@@ -2313,4 +2325,4 @@
|
|
2313
2325
|
|
2314
2326
|
|
2315
2327
|
|
2316
|
-
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
2328
|
+
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/Gemfile.lock
CHANGED
@@ -19,7 +19,7 @@ GIT
|
|
19
19
|
PATH
|
20
20
|
remote: .
|
21
21
|
specs:
|
22
|
-
berkshelf (4.
|
22
|
+
berkshelf (4.2.0)
|
23
23
|
addressable (~> 2.3.4)
|
24
24
|
berkshelf-api-client (~> 2.0)
|
25
25
|
buff-config (~> 1.0)
|
@@ -77,7 +77,7 @@ GEM
|
|
77
77
|
celluloid-io (0.16.2)
|
78
78
|
celluloid (>= 0.16.0)
|
79
79
|
nio4r (>= 1.1.0)
|
80
|
-
chef-config (12.
|
80
|
+
chef-config (12.7.2)
|
81
81
|
mixlib-config (~> 2.0)
|
82
82
|
mixlib-shellout (~> 2.0)
|
83
83
|
chef-zero (4.5.0)
|
data/lib/berkshelf/cli.rb
CHANGED
@@ -208,6 +208,10 @@ module Berkshelf
|
|
208
208
|
berksfile.upload(names, options.symbolize_keys)
|
209
209
|
end
|
210
210
|
|
211
|
+
method_option :envfile,
|
212
|
+
type: :string,
|
213
|
+
desc: 'Path to a JSON environment file to update.',
|
214
|
+
aliases: '-f'
|
211
215
|
method_option :lockfile,
|
212
216
|
type: :string,
|
213
217
|
default: Berkshelf::Lockfile::DEFAULT_FILENAME,
|
data/lib/berkshelf/errors.rb
CHANGED
@@ -537,6 +537,18 @@ module Berkshelf
|
|
537
537
|
end
|
538
538
|
end
|
539
539
|
|
540
|
+
# Raised when envFile provided to apply -f is not found
|
541
|
+
class EnvironmentFileNotFound < EnvironmentNotFound
|
542
|
+
set_status_code(150)
|
543
|
+
|
544
|
+
def intialize(environment_file)
|
545
|
+
@environment_file = environment_file
|
546
|
+
end
|
547
|
+
|
548
|
+
def to_s
|
549
|
+
"Could not find environment file #{@environment_file}"
|
550
|
+
end
|
551
|
+
end
|
540
552
|
|
541
553
|
# Git errors
|
542
554
|
# ------------------------------
|
data/lib/berkshelf/lockfile.rb
CHANGED
@@ -194,6 +194,8 @@ module Berkshelf
|
|
194
194
|
#
|
195
195
|
# @option options [Hash] :ssl_verify (true)
|
196
196
|
# Disable/Enable SSL verification during uploads
|
197
|
+
# @option options [String] :envfile
|
198
|
+
# Environment file to update
|
197
199
|
#
|
198
200
|
# @raise [EnvironmentNotFound]
|
199
201
|
# if the target environment was not found on the remote Chef Server
|
@@ -201,18 +203,22 @@ module Berkshelf
|
|
201
203
|
# if you are locking cookbooks with an invalid or not-specified client
|
202
204
|
# configuration
|
203
205
|
def apply(name, options = {})
|
204
|
-
|
205
|
-
|
206
|
+
locks = graph.locks.inject({}) do |hash, (name, dependency)|
|
207
|
+
hash[name] = "= #{dependency.locked_version.to_s}"
|
208
|
+
hash
|
209
|
+
end
|
210
|
+
|
211
|
+
if options[:envfile]
|
212
|
+
update_environment_file(options[:envfile], locks) if options[:envfile]
|
213
|
+
else
|
214
|
+
Berkshelf.ridley_connection(options) do |connection|
|
215
|
+
environment = connection.environment.find(name)
|
206
216
|
|
207
|
-
|
217
|
+
raise EnvironmentNotFound.new(name) if environment.nil?
|
208
218
|
|
209
|
-
|
210
|
-
|
211
|
-
hash
|
219
|
+
environment.cookbook_versions = locks
|
220
|
+
environment.save unless options[:envfile]
|
212
221
|
end
|
213
|
-
|
214
|
-
environment.cookbook_versions = locks
|
215
|
-
environment.save
|
216
222
|
end
|
217
223
|
end
|
218
224
|
|
@@ -297,6 +303,32 @@ module Berkshelf
|
|
297
303
|
locked.cached_cookbook
|
298
304
|
end
|
299
305
|
|
306
|
+
# Update local environment file
|
307
|
+
#
|
308
|
+
# @param [String] environment_file
|
309
|
+
# path to the envfile to update
|
310
|
+
#
|
311
|
+
# @param [Hash] locks
|
312
|
+
# A hash of cookbooks and versions to update the environment with
|
313
|
+
#
|
314
|
+
# @raise [EnvironmentFileNotFound]
|
315
|
+
# If environment file doesn't exist
|
316
|
+
def update_environment_file(environment_file, locks)
|
317
|
+
unless File.exists?(environment_file)
|
318
|
+
raise EnvironmentFileNotFound.new(environment_file)
|
319
|
+
end
|
320
|
+
|
321
|
+
json_environment = JSON.parse(File.read(environment_file))
|
322
|
+
|
323
|
+
json_environment['cookbook_versions'] = locks
|
324
|
+
|
325
|
+
json = JSON.pretty_generate(json_environment)
|
326
|
+
|
327
|
+
File.open(environment_file, 'w'){ |f| f.puts(json) }
|
328
|
+
|
329
|
+
Berkshelf.log.info "Updated environment file #{environment_file}"
|
330
|
+
end
|
331
|
+
|
300
332
|
# Replace the list of dependencies.
|
301
333
|
#
|
302
334
|
# @param [Array<Berkshelf::Dependency>] dependencies
|
data/lib/berkshelf/version.rb
CHANGED
@@ -208,35 +208,52 @@ describe Berkshelf::Lockfile do
|
|
208
208
|
end
|
209
209
|
|
210
210
|
describe '#apply' do
|
211
|
-
let(:connection) { double('connection') }
|
212
|
-
|
213
211
|
before do
|
214
|
-
|
212
|
+
apt = double(name: 'apt', locked_version: '1.0.0')
|
213
|
+
jenkins = double(name: 'jenkins', locked_version: '1.4.5')
|
214
|
+
allow(subject.graph).to receive(:locks).and_return('apt' => apt, 'jenkins' => jenkins)
|
215
215
|
end
|
216
216
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
}.to raise_error(Berkshelf::EnvironmentNotFound)
|
217
|
+
describe 'when :envfile option is not used' do
|
218
|
+
let(:connection) { double('connection') }
|
219
|
+
|
220
|
+
before do
|
221
|
+
allow(Berkshelf).to receive(:ridley_connection).and_yield(connection)
|
223
222
|
end
|
224
|
-
end
|
225
223
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
224
|
+
context 'when the Chef environment does not exist' do
|
225
|
+
it 'raises an exception' do
|
226
|
+
allow(connection).to receive(:environment).and_return(double(find: nil))
|
227
|
+
expect {
|
228
|
+
subject.apply('production')
|
229
|
+
}.to raise_error(Berkshelf::EnvironmentNotFound)
|
230
|
+
end
|
231
|
+
end
|
230
232
|
|
231
|
-
|
232
|
-
|
233
|
+
it 'locks the environment cookbook versions on chef server' do
|
234
|
+
environment = double('environment', :cookbook_versions= => nil, save: true)
|
235
|
+
allow(connection).to receive(:environment).and_return(double(find: environment))
|
233
236
|
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
237
|
+
expect(environment).to receive(:cookbook_versions=).with(
|
238
|
+
'apt' => '= 1.0.0',
|
239
|
+
'jenkins' => '= 1.4.5',
|
240
|
+
)
|
238
241
|
|
239
|
-
|
242
|
+
subject.apply('production')
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
describe 'when :envfile option is used' do
|
247
|
+
it 'locks the environment cookbook version into envfile' do
|
248
|
+
locks = {
|
249
|
+
'apt' => '= 1.0.0',
|
250
|
+
'jenkins' => '= 1.4.5'
|
251
|
+
}
|
252
|
+
|
253
|
+
expect(subject).to receive(:update_environment_file).with('/working/path', locks)
|
254
|
+
|
255
|
+
subject.apply('production', envfile: '/working/path')
|
256
|
+
end
|
240
257
|
end
|
241
258
|
end
|
242
259
|
|
@@ -273,6 +290,35 @@ describe Berkshelf::Lockfile do
|
|
273
290
|
end
|
274
291
|
end
|
275
292
|
|
293
|
+
describe '#update_environment_file' do
|
294
|
+
it 'raises an exception when environment file does not exist' do
|
295
|
+
allow(File).to receive(:exists?).and_return(false)
|
296
|
+
expect {
|
297
|
+
subject.update_environment_file('/broken/path', nil)
|
298
|
+
}.to raise_error(Berkshelf::EnvironmentFileNotFound)
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'updates the environment file with cookbook versions' do
|
302
|
+
file = instance_spy('File')
|
303
|
+
locks = {
|
304
|
+
'apt' => '1.0.0',
|
305
|
+
'jenkins' => '1.4.5'
|
306
|
+
}
|
307
|
+
|
308
|
+
allow(File).to receive(:exists?).and_return(true)
|
309
|
+
allow(File).to receive(:read).and_return("{}")
|
310
|
+
allow(File).to receive(:open).and_yield(file)
|
311
|
+
|
312
|
+
subject.update_environment_file('/working/path.json', locks)
|
313
|
+
|
314
|
+
expect(file).to have_received(:puts) do |arg|
|
315
|
+
expect(JSON.parse(arg)).to eq({
|
316
|
+
'cookbook_versions' => locks
|
317
|
+
})
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
276
322
|
describe '#update' do
|
277
323
|
it 'resets the dependencies' do
|
278
324
|
subject.update([])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Winsor
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2016-02-
|
15
|
+
date: 2016-02-19 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: addressable
|
@@ -625,7 +625,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
625
625
|
version: 1.8.0
|
626
626
|
requirements: []
|
627
627
|
rubyforge_project:
|
628
|
-
rubygems_version: 2.4.
|
628
|
+
rubygems_version: 2.4.7
|
629
629
|
signing_key:
|
630
630
|
specification_version: 4
|
631
631
|
summary: Manages a Cookbook's, or an Application's, Cookbook dependencies
|