berkshelf 1.3.0.rc1 → 1.3.1
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/berkshelf.gemspec +5 -4
- data/features/config.feature +7 -7
- data/lib/berkshelf.rb +6 -0
- data/lib/berkshelf/cli.rb +9 -0
- data/lib/berkshelf/errors.rb +1 -0
- data/lib/berkshelf/locations/chef_api_location.rb +18 -5
- data/lib/berkshelf/version.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/unit/berkshelf/locations/chef_api_location_spec.rb +4 -5
- data/spec/unit/berkshelf_spec.rb +6 -0
- metadata +37 -18
data/berkshelf.gemspec
CHANGED
@@ -27,12 +27,13 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.version = Berkshelf::VERSION
|
28
28
|
s.required_ruby_version = ">= 1.9.1"
|
29
29
|
|
30
|
+
s.add_dependency 'celluloid', '>= 0.13.0'
|
30
31
|
s.add_dependency 'yajl-ruby'
|
31
|
-
s.add_dependency 'activesupport', '
|
32
|
-
s.add_dependency 'mixlib-shellout'
|
33
|
-
s.add_dependency 'mixlib-config'
|
32
|
+
s.add_dependency 'activesupport', '>= 3.2.0'
|
33
|
+
s.add_dependency 'mixlib-shellout', '~> 1.1'
|
34
|
+
s.add_dependency 'mixlib-config', '~> 1.1'
|
34
35
|
s.add_dependency 'faraday', '>= 0.8.5'
|
35
|
-
s.add_dependency 'ridley', '>= 0.8.
|
36
|
+
s.add_dependency 'ridley', '>= 0.8.6'
|
36
37
|
s.add_dependency 'chozo', '>= 0.6.1'
|
37
38
|
s.add_dependency 'hashie', '>= 2.0.2'
|
38
39
|
s.add_dependency 'minitar'
|
data/features/config.feature
CHANGED
@@ -34,9 +34,9 @@ Feature: cookbook creation with a config file
|
|
34
34
|
Then the resulting "sparkle_motion" Vagrantfile should contain:
|
35
35
|
| config.vm.box = "my_box" |
|
36
36
|
| config.vm.box_url = "http://files.vagrantup.com/lucid64.box" |
|
37
|
-
| config.vm.
|
38
|
-
| config.vm.network :
|
39
|
-
| config.vm.network :
|
37
|
+
| config.vm.network :forwarded_port, guest: 12345, host: 54321 |
|
38
|
+
| config.vm.network :private_network, ip: "12.34.56.78" |
|
39
|
+
| config.vm.network :public_network |
|
40
40
|
And the exit status should be 0
|
41
41
|
|
42
42
|
Scenario: creating a new cookbook using a partial Berkshelf config
|
@@ -54,7 +54,7 @@ Feature: cookbook creation with a config file
|
|
54
54
|
"""
|
55
55
|
When I run the cookbook command to create "sparkle_motion"
|
56
56
|
Then the resulting "sparkle_motion" Vagrantfile should contain:
|
57
|
-
| config.vm.
|
57
|
+
| config.vm.network :forwarded_port, guest: 12345, host: 54321 |
|
58
58
|
And the exit status should be 0
|
59
59
|
|
60
60
|
Scenario: creating a new cookbook using an invalid Berkshelf config
|
@@ -91,8 +91,8 @@ Feature: cookbook creation with a config file
|
|
91
91
|
"""
|
92
92
|
When I run the cookbook command to create "sparkle_motion"
|
93
93
|
Then the resulting "sparkle_motion" Vagrantfile should contain:
|
94
|
-
| config.vm.provision :chef_client
|
95
|
-
| chef.chef_server_url
|
94
|
+
| config.vm.provision :chef_client |
|
95
|
+
| chef.chef_server_url = "localhost:4000" |
|
96
96
|
| chef.validation_client_name = "my_client-validator" |
|
97
|
-
| chef.validation_key_path
|
97
|
+
| chef.validation_key_path = "/a/b/c/my_client-validator.pem" |
|
98
98
|
Then the exit status should be 0
|
data/lib/berkshelf.rb
CHANGED
@@ -20,6 +20,7 @@ require 'thor'
|
|
20
20
|
require 'tmpdir'
|
21
21
|
require 'uri'
|
22
22
|
require 'zlib'
|
23
|
+
require 'celluloid'
|
23
24
|
|
24
25
|
require 'berkshelf/version'
|
25
26
|
require 'berkshelf/core_ext'
|
@@ -77,6 +78,11 @@ module Berkshelf
|
|
77
78
|
ENV["BERKSHELF_PATH"] || File.expand_path("~/.berkshelf")
|
78
79
|
end
|
79
80
|
|
81
|
+
# @return [Logger]
|
82
|
+
def log
|
83
|
+
Celluloid.logger
|
84
|
+
end
|
85
|
+
|
80
86
|
# @return [String]
|
81
87
|
def tmp_dir
|
82
88
|
File.join(berkshelf_path, "tmp")
|
data/lib/berkshelf/cli.rb
CHANGED
@@ -30,6 +30,10 @@ module Berkshelf
|
|
30
30
|
Berkshelf::Config.path = @options[:config]
|
31
31
|
end
|
32
32
|
|
33
|
+
if @options[:debug]
|
34
|
+
Berkshelf.log.level = ::Logger::DEBUG
|
35
|
+
end
|
36
|
+
|
33
37
|
if @options[:quiet]
|
34
38
|
Berkshelf.ui.mute!
|
35
39
|
end
|
@@ -65,6 +69,11 @@ module Berkshelf
|
|
65
69
|
desc: "Silence all informational output.",
|
66
70
|
aliases: "-q",
|
67
71
|
default: false
|
72
|
+
class_option :debug,
|
73
|
+
type: :boolean,
|
74
|
+
desc: "Output debug information",
|
75
|
+
aliases: "-d",
|
76
|
+
default: false
|
68
77
|
|
69
78
|
method_option :force,
|
70
79
|
type: :boolean,
|
data/lib/berkshelf/errors.rb
CHANGED
@@ -149,4 +149,5 @@ module Berkshelf
|
|
149
149
|
class InvalidVersionConstraint < BerkshelfError; status_code(122); end
|
150
150
|
class CommunitySiteError < BerkshelfError; status_code(123); end
|
151
151
|
class CookbookValidationFailure < BerkshelfError; status_code(124); end
|
152
|
+
class ClientKeyFileNotFound < BerkshelfError; status_code(125); end
|
152
153
|
end
|
@@ -84,7 +84,14 @@ module Berkshelf
|
|
84
84
|
# the name of the client to use to communicate with the Chef API.
|
85
85
|
# @option options [String] :client_key (Berkshelf::Config.instance.chef.client_key)
|
86
86
|
# the filepath to the authentication key for the client
|
87
|
-
# @option options [Boolean] :verify_ssl (Berkshelf::Config.instance.chef.ssl.verify)
|
87
|
+
# @option options [Boolean] :verify_ssl (Berkshelf::Config.instance.chef.ssl.verify)
|
88
|
+
#
|
89
|
+
# @raise [ClientKeyFileNotFound] if the value for :client_key does not contain a filepath
|
90
|
+
# pointing to a readable file containing a Chef client key.
|
91
|
+
#
|
92
|
+
# If the :chef_api option is given the symbol :config and your Berkshelf config does not
|
93
|
+
# have a value for chef.client_key which points to a readable file containing a Chef
|
94
|
+
# client key.
|
88
95
|
def initialize(name, version_constraint, options = {})
|
89
96
|
options = options.reverse_merge(
|
90
97
|
client_key: Berkshelf::Config.instance.chef.client_key,
|
@@ -134,6 +141,8 @@ module Berkshelf
|
|
134
141
|
# Why do we use a class function for defining our finalizer?
|
135
142
|
# http://www.mikeperham.com/2010/02/24/the-trouble-with-ruby-finalizers/
|
136
143
|
ObjectSpace.define_finalizer(self, self.class.finalizer)
|
144
|
+
rescue Ridley::Errors::ClientKeyFileNotFound => ex
|
145
|
+
raise ClientKeyFileNotFound, ex
|
137
146
|
end
|
138
147
|
|
139
148
|
# @param [#to_s] destination
|
@@ -159,10 +168,14 @@ module Berkshelf
|
|
159
168
|
def target_cookbook
|
160
169
|
return @target_cookbook unless @target_cookbook.nil?
|
161
170
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
171
|
+
begin
|
172
|
+
@target_cookbook = if version_constraint
|
173
|
+
conn.cookbook.satisfy(name, version_constraint)
|
174
|
+
else
|
175
|
+
conn.cookbook.latest_version(name)
|
176
|
+
end
|
177
|
+
rescue Ridley::Errors::HTTPNotFound
|
178
|
+
@target_cookbook = nil
|
166
179
|
end
|
167
180
|
|
168
181
|
if @target_cookbook.nil?
|
data/lib/berkshelf/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -10,8 +10,8 @@ Spork.prefork do
|
|
10
10
|
require 'vcr'
|
11
11
|
|
12
12
|
APP_ROOT = File.expand_path('../../', __FILE__)
|
13
|
-
ENV["BERKSHELF_PATH"] = File.join(APP_ROOT, "tmp", "berkshelf")
|
14
|
-
ENV["BERKSHELF_CHEF_CONFIG"] = File.join(APP_ROOT, "tmp", "knife.rb")
|
13
|
+
ENV["BERKSHELF_PATH"] = File.join(APP_ROOT, "spec", "tmp", "berkshelf")
|
14
|
+
ENV["BERKSHELF_CHEF_CONFIG"] = File.join(APP_ROOT, "spec", "tmp", "knife.rb")
|
15
15
|
|
16
16
|
Dir[File.join(APP_ROOT, "spec/support/**/*.rb")].each {|f| require f}
|
17
17
|
|
@@ -2,6 +2,8 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Berkshelf::ChefAPILocation, :chef_server do
|
4
4
|
let(:test_chef_api) { "https://chefserver:8081" }
|
5
|
+
let(:node_name) { "reset" }
|
6
|
+
let(:client_key) { fixtures_path.join("reset.pem").to_s }
|
5
7
|
|
6
8
|
describe "ClassMethods" do
|
7
9
|
subject { described_class }
|
@@ -11,9 +13,6 @@ describe Berkshelf::ChefAPILocation, :chef_server do
|
|
11
13
|
let(:constraint) { double('constraint') }
|
12
14
|
|
13
15
|
describe "::initialize" do
|
14
|
-
let(:node_name) { "reset" }
|
15
|
-
let(:client_key) { fixtures_path.join("reset.pem").to_s }
|
16
|
-
|
17
16
|
before(:each) do
|
18
17
|
@location = subject.new("nginx",
|
19
18
|
constraint,
|
@@ -104,7 +103,7 @@ describe Berkshelf::ChefAPILocation, :chef_server do
|
|
104
103
|
end
|
105
104
|
|
106
105
|
subject do
|
107
|
-
described_class.new('nginx', nil, chef_api: :
|
106
|
+
described_class.new('nginx', nil, chef_api: test_chef_api, node_name: node_name, client_key: client_key)
|
108
107
|
end
|
109
108
|
|
110
109
|
describe "#target_cookbook" do
|
@@ -133,7 +132,7 @@ describe Berkshelf::ChefAPILocation, :chef_server do
|
|
133
132
|
|
134
133
|
describe "#to_s" do
|
135
134
|
it "returns a string containing the location key and the Chef API URI" do
|
136
|
-
subject.to_s.should eql("chef_api: '#{
|
135
|
+
subject.to_s.should eql("chef_api: '#{test_chef_api}'")
|
137
136
|
end
|
138
137
|
end
|
139
138
|
end
|
data/spec/unit/berkshelf_spec.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
5
|
-
prerelease:
|
4
|
+
version: 1.3.1
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jamie Winsor
|
@@ -14,6 +14,22 @@ bindir: bin
|
|
14
14
|
cert_chain: []
|
15
15
|
date: 2013-03-20 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: celluloid
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ! '>='
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.13.0
|
25
|
+
type: :runtime
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.13.0
|
17
33
|
- !ruby/object:Gem::Dependency
|
18
34
|
name: yajl-ruby
|
19
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -35,49 +51,49 @@ dependencies:
|
|
35
51
|
requirement: !ruby/object:Gem::Requirement
|
36
52
|
none: false
|
37
53
|
requirements:
|
38
|
-
- -
|
54
|
+
- - ! '>='
|
39
55
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
56
|
+
version: 3.2.0
|
41
57
|
type: :runtime
|
42
58
|
prerelease: false
|
43
59
|
version_requirements: !ruby/object:Gem::Requirement
|
44
60
|
none: false
|
45
61
|
requirements:
|
46
|
-
- -
|
62
|
+
- - ! '>='
|
47
63
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
64
|
+
version: 3.2.0
|
49
65
|
- !ruby/object:Gem::Dependency
|
50
66
|
name: mixlib-shellout
|
51
67
|
requirement: !ruby/object:Gem::Requirement
|
52
68
|
none: false
|
53
69
|
requirements:
|
54
|
-
- -
|
70
|
+
- - ~>
|
55
71
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
72
|
+
version: '1.1'
|
57
73
|
type: :runtime
|
58
74
|
prerelease: false
|
59
75
|
version_requirements: !ruby/object:Gem::Requirement
|
60
76
|
none: false
|
61
77
|
requirements:
|
62
|
-
- -
|
78
|
+
- - ~>
|
63
79
|
- !ruby/object:Gem::Version
|
64
|
-
version: '
|
80
|
+
version: '1.1'
|
65
81
|
- !ruby/object:Gem::Dependency
|
66
82
|
name: mixlib-config
|
67
83
|
requirement: !ruby/object:Gem::Requirement
|
68
84
|
none: false
|
69
85
|
requirements:
|
70
|
-
- -
|
86
|
+
- - ~>
|
71
87
|
- !ruby/object:Gem::Version
|
72
|
-
version: '
|
88
|
+
version: '1.1'
|
73
89
|
type: :runtime
|
74
90
|
prerelease: false
|
75
91
|
version_requirements: !ruby/object:Gem::Requirement
|
76
92
|
none: false
|
77
93
|
requirements:
|
78
|
-
- -
|
94
|
+
- - ~>
|
79
95
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
96
|
+
version: '1.1'
|
81
97
|
- !ruby/object:Gem::Dependency
|
82
98
|
name: faraday
|
83
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,7 +117,7 @@ dependencies:
|
|
101
117
|
requirements:
|
102
118
|
- - ! '>='
|
103
119
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0.8.
|
120
|
+
version: 0.8.6
|
105
121
|
type: :runtime
|
106
122
|
prerelease: false
|
107
123
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -109,7 +125,7 @@ dependencies:
|
|
109
125
|
requirements:
|
110
126
|
- - ! '>='
|
111
127
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.8.
|
128
|
+
version: 0.8.6
|
113
129
|
- !ruby/object:Gem::Dependency
|
114
130
|
name: chozo
|
115
131
|
requirement: !ruby/object:Gem::Requirement
|
@@ -591,9 +607,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
591
607
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
592
608
|
none: false
|
593
609
|
requirements:
|
594
|
-
- - ! '
|
610
|
+
- - ! '>='
|
595
611
|
- !ruby/object:Gem::Version
|
596
|
-
version:
|
612
|
+
version: '0'
|
613
|
+
segments:
|
614
|
+
- 0
|
615
|
+
hash: 1990198724109386499
|
597
616
|
requirements: []
|
598
617
|
rubyforge_project:
|
599
618
|
rubygems_version: 1.8.24
|