ridley 0.9.0 → 0.9.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/.rbenv-version +0 -1
- data/lib/ridley/chef.rb +1 -0
- data/lib/ridley/chef/chefignore.rb +76 -0
- data/lib/ridley/chef/cookbook.rb +9 -0
- data/lib/ridley/sandbox_uploader.rb +7 -1
- data/lib/ridley/version.rb +1 -1
- data/spec/fixtures/chefignore +8 -0
- data/spec/unit/ridley/chef/chefignore_spec.rb +40 -0
- data/spec/unit/ridley/sandbox_uploader_spec.rb +28 -1
- metadata +9 -4
data/.rbenv-version
CHANGED
data/lib/ridley/chef.rb
CHANGED
@@ -0,0 +1,76 @@
|
|
1
|
+
module Ridley::Chef
|
2
|
+
# Borrowed and modified from:
|
3
|
+
# {https://raw.github.com/opscode/chef/62f9b0e3be8e22eef092163c331b7d3f8d350f94/lib/chef/cookbook/chefignore.rb}
|
4
|
+
#
|
5
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
class Chefignore
|
19
|
+
class << self
|
20
|
+
# Traverse a path in relative context to find a Chefignore file
|
21
|
+
#
|
22
|
+
# @param [String] path
|
23
|
+
# path to traverse
|
24
|
+
#
|
25
|
+
# @return [String, nil]
|
26
|
+
def find_relative_to(path)
|
27
|
+
[
|
28
|
+
File.join(path, FILENAME),
|
29
|
+
File.join(path, 'cookbooks', FILENAME)
|
30
|
+
].find { |f| File.exists?(f) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
FILENAME = "chefignore".freeze
|
35
|
+
COMMENTS_AND_WHITESPACE = /^\s*(?:#.*)?$/
|
36
|
+
|
37
|
+
attr_reader :ignores
|
38
|
+
|
39
|
+
def initialize(ignore_file_or_repo)
|
40
|
+
@ignore_file = find_ignore_file(ignore_file_or_repo)
|
41
|
+
@ignores = parse_ignore_file
|
42
|
+
end
|
43
|
+
|
44
|
+
def remove_ignores_from(file_list)
|
45
|
+
Array(file_list).inject([]) do |unignored, file|
|
46
|
+
ignored?(file) ? unignored : unignored << file
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def ignored?(file_name)
|
51
|
+
@ignores.any? { |glob| File.fnmatch?(glob, file_name) }
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def parse_ignore_file
|
57
|
+
ignore_globs = []
|
58
|
+
|
59
|
+
if File.exist?(@ignore_file) && File.readable?(@ignore_file)
|
60
|
+
File.foreach(@ignore_file) do |line|
|
61
|
+
ignore_globs << line.strip unless line =~ COMMENTS_AND_WHITESPACE
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
ignore_globs
|
66
|
+
end
|
67
|
+
|
68
|
+
def find_ignore_file(path)
|
69
|
+
if File.basename(path) =~ /#{FILENAME}/
|
70
|
+
path
|
71
|
+
else
|
72
|
+
File.join(path, FILENAME)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/ridley/chef/cookbook.rb
CHANGED
@@ -96,6 +96,7 @@ module Ridley::Chef
|
|
96
96
|
root_files: Array.new
|
97
97
|
)
|
98
98
|
@frozen = false
|
99
|
+
@chefignore = Ridley::Chef::Chefignore.new(@path)
|
99
100
|
|
100
101
|
load_files
|
101
102
|
end
|
@@ -207,7 +208,12 @@ module Ridley::Chef
|
|
207
208
|
|
208
209
|
private
|
209
210
|
|
211
|
+
# @return [Array]
|
210
212
|
attr_reader :files
|
213
|
+
# @return [Ridley::Chef::Chefignore]
|
214
|
+
attr_reader :chefignore
|
215
|
+
|
216
|
+
def_delegator :chefignore, :ignored?
|
211
217
|
|
212
218
|
def load_files
|
213
219
|
load_shallow(:recipes, 'recipes', '*.rb')
|
@@ -225,6 +231,7 @@ module Ridley::Chef
|
|
225
231
|
[].tap do |files|
|
226
232
|
Dir.glob(path.join('*'), File::FNM_DOTMATCH).each do |file|
|
227
233
|
next if File.directory?(file)
|
234
|
+
next if ignored?(file)
|
228
235
|
@files << file
|
229
236
|
@manifest[:root_files] << file_metadata(:root_files, file)
|
230
237
|
end
|
@@ -236,6 +243,7 @@ module Ridley::Chef
|
|
236
243
|
file_spec = path.join(category_dir, '**', glob)
|
237
244
|
Dir.glob(file_spec, File::FNM_DOTMATCH).each do |file|
|
238
245
|
next if File.directory?(file)
|
246
|
+
next if ignored?(file)
|
239
247
|
@files << file
|
240
248
|
@manifest[category] << file_metadata(category, file)
|
241
249
|
end
|
@@ -245,6 +253,7 @@ module Ridley::Chef
|
|
245
253
|
def load_shallow(category, *path_glob)
|
246
254
|
[].tap do |files|
|
247
255
|
Dir[path.join(*path_glob)].each do |file|
|
256
|
+
next if ignored?(file)
|
248
257
|
@files << file
|
249
258
|
@manifest[category] << file_metadata(category, file)
|
250
259
|
end
|
@@ -94,7 +94,7 @@ module Ridley
|
|
94
94
|
# @return [Hash, nil]
|
95
95
|
def upload(chk_id, path)
|
96
96
|
checksum = self.checksum(chk_id)
|
97
|
-
|
97
|
+
|
98
98
|
unless checksum[:needs_upload]
|
99
99
|
return nil
|
100
100
|
end
|
@@ -109,6 +109,12 @@ module Ridley
|
|
109
109
|
upload_path = url.path
|
110
110
|
url.path = ""
|
111
111
|
|
112
|
+
# versions prior to OSS Chef 11 will strip the port to upload the file to in the checksum
|
113
|
+
# url returned. This will ensure we are uploading to the proper location.
|
114
|
+
if client.connection.foss?
|
115
|
+
url.port = URI(client.connection.server_url).port
|
116
|
+
end
|
117
|
+
|
112
118
|
begin
|
113
119
|
Faraday.new(url, client.options.slice(*Connection::VALID_OPTIONS)) do |c|
|
114
120
|
c.response :chef_response
|
data/lib/ridley/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ridley::Chef::Chefignore do
|
4
|
+
describe "ClassMethods" do
|
5
|
+
subject { described_class }
|
6
|
+
|
7
|
+
describe "::find_relative_to" do
|
8
|
+
let(:path) { tmp_path.join('chefignore-test') }
|
9
|
+
before(:each) { FileUtils.mkdir_p(path) }
|
10
|
+
|
11
|
+
it "finds a chefignore file in a 'cookbooks' directory relative to the given path" do
|
12
|
+
FileUtils.touch(path.join('chefignore'))
|
13
|
+
subject.find_relative_to(path)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "finds a chefignore file relative to the given path" do
|
17
|
+
FileUtils.mkdir_p(path.join('cookbooks'))
|
18
|
+
FileUtils.touch(path.join('cookbooks', 'chefignore'))
|
19
|
+
subject.find_relative_to(path)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { described_class.new(File.join(fixtures_path)) }
|
25
|
+
|
26
|
+
it "loads the globs in the chefignore file" do
|
27
|
+
subject.ignores.should =~ %w[recipes/ignoreme.rb ignored]
|
28
|
+
end
|
29
|
+
|
30
|
+
it "removes items from an array that match the ignores" do
|
31
|
+
file_list = %w[ recipes/ignoreme.rb recipes/dontignoreme.rb ]
|
32
|
+
subject.remove_ignores_from(file_list).should == %w[recipes/dontignoreme.rb]
|
33
|
+
end
|
34
|
+
|
35
|
+
it "determines if a file is ignored" do
|
36
|
+
subject.ignored?('ignored').should be_true
|
37
|
+
subject.ignored?('recipes/ignoreme.rb').should be_true
|
38
|
+
subject.ignored?('recipes/dontignoreme.rb').should be_false
|
39
|
+
end
|
40
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Ridley::SandboxUploader do
|
4
|
+
let(:connection) { double('chef-conn') }
|
4
5
|
let(:client) do
|
5
6
|
double('client',
|
6
7
|
client_name: 'reset',
|
7
8
|
client_key: fixtures_path.join('reset.pem'),
|
8
|
-
options: {}
|
9
|
+
options: {},
|
10
|
+
connection: connection
|
9
11
|
)
|
10
12
|
end
|
11
13
|
|
@@ -66,6 +68,10 @@ describe Ridley::SandboxUploader do
|
|
66
68
|
let(:chk_id) { "oGCPHrQ+5MylEL+V+NIJ9w==" }
|
67
69
|
let(:path) { fixtures_path.join('reset.pem').to_s }
|
68
70
|
|
71
|
+
before do
|
72
|
+
connection.stub(foss?: false)
|
73
|
+
end
|
74
|
+
|
69
75
|
context "when the checksum needs uploading" do
|
70
76
|
let(:checksums) do
|
71
77
|
{
|
@@ -100,5 +106,26 @@ describe Ridley::SandboxUploader do
|
|
100
106
|
subject.upload(chk_id, path).should be_nil
|
101
107
|
end
|
102
108
|
end
|
109
|
+
|
110
|
+
context "when the connection is an open source server connection with a non-80 port" do
|
111
|
+
before do
|
112
|
+
connection.stub(foss?: true, server_url: "http://localhost:8889")
|
113
|
+
end
|
114
|
+
|
115
|
+
let(:checksums) do
|
116
|
+
{
|
117
|
+
chk_id => {
|
118
|
+
url: "http://localhost/sandboxes/bd091b150b0a4578b97771af6abf3e05",
|
119
|
+
needs_upload: true
|
120
|
+
}
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
it "does not strip the port from the target to upload to" do
|
125
|
+
stub_request(:put, "http://localhost:8889/sandboxes/bd091b150b0a4578b97771af6abf3e05")
|
126
|
+
|
127
|
+
subject.upload(chk_id, path)
|
128
|
+
end
|
129
|
+
end
|
103
130
|
end
|
104
131
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridley
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
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: 2013-
|
12
|
+
date: 2013-04-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -288,6 +288,7 @@ files:
|
|
288
288
|
- lib/ridley/bootstrapper/context.rb
|
289
289
|
- lib/ridley/chain_link.rb
|
290
290
|
- lib/ridley/chef.rb
|
291
|
+
- lib/ridley/chef/chefignore.rb
|
291
292
|
- lib/ridley/chef/cookbook.rb
|
292
293
|
- lib/ridley/chef/cookbook/metadata.rb
|
293
294
|
- lib/ridley/chef/cookbook/syntax_check.rb
|
@@ -334,6 +335,7 @@ files:
|
|
334
335
|
- spec/acceptance/role_resource_spec.rb
|
335
336
|
- spec/acceptance/sandbox_resource_spec.rb
|
336
337
|
- spec/acceptance/search_resource_spec.rb
|
338
|
+
- spec/fixtures/chefignore
|
337
339
|
- spec/fixtures/encrypted_data_bag_secret
|
338
340
|
- spec/fixtures/example_cookbook/README.md
|
339
341
|
- spec/fixtures/example_cookbook/attributes/default.rb
|
@@ -357,6 +359,7 @@ files:
|
|
357
359
|
- spec/support/spec_helpers.rb
|
358
360
|
- spec/unit/ridley/bootstrapper/context_spec.rb
|
359
361
|
- spec/unit/ridley/bootstrapper_spec.rb
|
362
|
+
- spec/unit/ridley/chef/chefignore_spec.rb
|
360
363
|
- spec/unit/ridley/chef/cookbook_spec.rb
|
361
364
|
- spec/unit/ridley/chef/digester_spec.rb
|
362
365
|
- spec/unit/ridley/client_spec.rb
|
@@ -401,10 +404,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
401
404
|
version: '0'
|
402
405
|
segments:
|
403
406
|
- 0
|
404
|
-
hash:
|
407
|
+
hash: -3927256690615298092
|
405
408
|
requirements: []
|
406
409
|
rubyforge_project:
|
407
|
-
rubygems_version: 1.8.
|
410
|
+
rubygems_version: 1.8.23
|
408
411
|
signing_key:
|
409
412
|
specification_version: 3
|
410
413
|
summary: A reliable Chef API client with a clean syntax
|
@@ -418,6 +421,7 @@ test_files:
|
|
418
421
|
- spec/acceptance/role_resource_spec.rb
|
419
422
|
- spec/acceptance/sandbox_resource_spec.rb
|
420
423
|
- spec/acceptance/search_resource_spec.rb
|
424
|
+
- spec/fixtures/chefignore
|
421
425
|
- spec/fixtures/encrypted_data_bag_secret
|
422
426
|
- spec/fixtures/example_cookbook/README.md
|
423
427
|
- spec/fixtures/example_cookbook/attributes/default.rb
|
@@ -441,6 +445,7 @@ test_files:
|
|
441
445
|
- spec/support/spec_helpers.rb
|
442
446
|
- spec/unit/ridley/bootstrapper/context_spec.rb
|
443
447
|
- spec/unit/ridley/bootstrapper_spec.rb
|
448
|
+
- spec/unit/ridley/chef/chefignore_spec.rb
|
444
449
|
- spec/unit/ridley/chef/cookbook_spec.rb
|
445
450
|
- spec/unit/ridley/chef/digester_spec.rb
|
446
451
|
- spec/unit/ridley/client_spec.rb
|