cheffish 4.0.0 → 4.1.0
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.
- checksums.yaml +4 -4
- data/Gemfile +8 -8
- data/Rakefile +24 -12
- data/cheffish.gemspec +15 -15
- data/lib/chef/resource/chef_acl.rb +63 -63
- data/lib/chef/resource/chef_client.rb +9 -9
- data/lib/chef/resource/chef_container.rb +9 -9
- data/lib/chef/resource/chef_data_bag.rb +9 -9
- data/lib/chef/resource/chef_data_bag_item.rb +27 -27
- data/lib/chef/resource/chef_environment.rb +21 -22
- data/lib/chef/resource/chef_group.rb +19 -19
- data/lib/chef/resource/chef_mirror.rb +32 -17
- data/lib/chef/resource/chef_node.rb +14 -14
- data/lib/chef/resource/chef_organization.rb +29 -30
- data/lib/chef/resource/chef_resolved_cookbooks.rb +7 -7
- data/lib/chef/resource/chef_role.rb +25 -22
- data/lib/chef/resource/chef_user.rb +13 -14
- data/lib/chef/resource/private_key.rb +24 -25
- data/lib/chef/resource/public_key.rb +6 -7
- data/lib/cheffish.rb +17 -17
- data/lib/cheffish/array_property.rb +2 -2
- data/lib/cheffish/base_properties.rb +3 -3
- data/lib/cheffish/base_resource.rb +8 -8
- data/lib/cheffish/basic_chef_client.rb +17 -17
- data/lib/cheffish/chef_actor_base.rb +8 -8
- data/lib/cheffish/chef_run.rb +7 -2
- data/lib/cheffish/chef_run_data.rb +2 -2
- data/lib/cheffish/chef_run_listener.rb +1 -1
- data/lib/cheffish/key_formatter.rb +16 -18
- data/lib/cheffish/merged_config.rb +5 -3
- data/lib/cheffish/node_properties.rb +11 -7
- data/lib/cheffish/recipe_dsl.rb +33 -34
- data/lib/cheffish/rspec.rb +3 -3
- data/lib/cheffish/rspec/chef_run_support.rb +13 -13
- data/lib/cheffish/rspec/matchers.rb +4 -4
- data/lib/cheffish/rspec/matchers/be_idempotent.rb +3 -3
- data/lib/cheffish/rspec/matchers/emit_no_warnings_or_errors.rb +3 -3
- data/lib/cheffish/rspec/matchers/have_updated.rb +3 -3
- data/lib/cheffish/rspec/recipe_run_wrapper.rb +8 -7
- data/lib/cheffish/rspec/repository_support.rb +6 -6
- data/lib/cheffish/server_api.rb +11 -11
- data/lib/cheffish/version.rb +1 -1
- data/spec/functional/fingerprint_spec.rb +12 -12
- data/spec/functional/merged_config_spec.rb +46 -6
- data/spec/functional/server_api_spec.rb +3 -3
- data/spec/integration/chef_acl_spec.rb +489 -489
- data/spec/integration/chef_client_spec.rb +39 -39
- data/spec/integration/chef_container_spec.rb +14 -14
- data/spec/integration/chef_data_bag_item_spec.rb +9 -9
- data/spec/integration/chef_group_spec.rb +219 -219
- data/spec/integration/chef_mirror_spec.rb +228 -228
- data/spec/integration/chef_node_spec.rb +511 -511
- data/spec/integration/chef_organization_spec.rb +126 -126
- data/spec/integration/chef_role_spec.rb +33 -33
- data/spec/integration/chef_user_spec.rb +37 -37
- data/spec/integration/private_key_spec.rb +154 -154
- data/spec/integration/recipe_dsl_spec.rb +10 -10
- data/spec/integration/rspec/converge_spec.rb +49 -49
- data/spec/support/key_support.rb +6 -6
- data/spec/support/spec_support.rb +3 -3
- data/spec/unit/get_private_key_spec.rb +19 -19
- data/spec/unit/recipe_run_wrapper_spec.rb +4 -4
- metadata +3 -3
@@ -1,25 +1,25 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "support/spec_support"
|
2
|
+
require "cheffish/rspec/chef_run_support"
|
3
|
+
require "tmpdir"
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe "Cheffish Recipe DSL" do
|
6
6
|
extend Cheffish::RSpec::ChefRunSupport
|
7
7
|
|
8
|
-
context
|
8
|
+
context "when we include with_chef_local_server" do
|
9
9
|
before :each do
|
10
|
-
@tmp_repo = tmp_repo = Dir.mktmpdir(
|
10
|
+
@tmp_repo = tmp_repo = Dir.mktmpdir("chef_repo")
|
11
11
|
end
|
12
12
|
|
13
13
|
after :each do
|
14
14
|
FileUtils.remove_entry_secure @tmp_repo
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
17
|
+
it "chef_nodes get put into said server" do
|
18
18
|
tmp_repo = @tmp_repo
|
19
|
-
expect_recipe
|
19
|
+
expect_recipe do
|
20
20
|
with_chef_local_server :chef_repo_path => tmp_repo
|
21
|
-
chef_node
|
22
|
-
|
21
|
+
chef_node "blah"
|
22
|
+
end.to have_updated "chef_node[blah]", :create
|
23
23
|
expect(File).to exist("#{@tmp_repo}/nodes/blah.json")
|
24
24
|
end
|
25
25
|
end
|
@@ -1,20 +1,20 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "support/spec_support"
|
2
|
+
require "cheffish/rspec/chef_run_support"
|
3
3
|
|
4
|
-
describe
|
4
|
+
describe "Cheffish::RSpec::ChefRunSupport" do
|
5
5
|
extend Cheffish::RSpec::ChefRunSupport
|
6
6
|
|
7
|
-
let(:temp_file) { Tempfile.new(
|
7
|
+
let(:temp_file) { Tempfile.new("test") }
|
8
8
|
|
9
9
|
context "#recipe" do
|
10
10
|
it "recipe { file ... } updates the file" do
|
11
|
-
result = recipe
|
11
|
+
result = recipe do
|
12
12
|
file temp_file.path do
|
13
|
-
content
|
13
|
+
content "test"
|
14
14
|
end
|
15
|
-
|
15
|
+
end
|
16
16
|
expect(result.updated?).to be_falsey
|
17
|
-
expect(IO.read(temp_file.path)).to eq
|
17
|
+
expect(IO.read(temp_file.path)).to eq ""
|
18
18
|
end
|
19
19
|
|
20
20
|
it "recipe 'file ...' does not update the file" do
|
@@ -24,29 +24,29 @@ describe 'Cheffish::RSpec::ChefRunSupport' do
|
|
24
24
|
end
|
25
25
|
EOM
|
26
26
|
expect(result.updated?).to be_falsey
|
27
|
-
expect(IO.read(temp_file.path)).to eq
|
27
|
+
expect(IO.read(temp_file.path)).to eq ""
|
28
28
|
end
|
29
29
|
|
30
30
|
it "recipe 'file ...' with file and line number does not update the file" do
|
31
|
-
result = recipe(<<-EOM, __FILE__, __LINE__+1)
|
31
|
+
result = recipe(<<-EOM, __FILE__, __LINE__ + 1)
|
32
32
|
file temp_file.path do
|
33
33
|
content 'test'
|
34
34
|
end
|
35
35
|
EOM
|
36
36
|
expect(result.updated?).to be_falsey
|
37
|
-
expect(IO.read(temp_file.path)).to eq
|
37
|
+
expect(IO.read(temp_file.path)).to eq ""
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
context "#converge" do
|
42
42
|
it "converge { file ... } updates the file" do
|
43
|
-
result = converge
|
43
|
+
result = converge do
|
44
44
|
file temp_file.path do
|
45
|
-
content
|
45
|
+
content "test"
|
46
46
|
end
|
47
|
-
|
47
|
+
end
|
48
48
|
expect(result.updated?).to be_truthy
|
49
|
-
expect(IO.read(temp_file.path)).to eq
|
49
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
50
50
|
end
|
51
51
|
|
52
52
|
it "converge 'file ...' updates the file" do
|
@@ -56,29 +56,29 @@ describe 'Cheffish::RSpec::ChefRunSupport' do
|
|
56
56
|
end
|
57
57
|
EOM
|
58
58
|
expect(result.updated?).to be_truthy
|
59
|
-
expect(IO.read(temp_file.path)).to eq
|
59
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
60
60
|
end
|
61
61
|
|
62
62
|
it "converge 'file ...' with file and line number updates the file" do
|
63
|
-
result = converge(<<-EOM, __FILE__, __LINE__+1)
|
63
|
+
result = converge(<<-EOM, __FILE__, __LINE__ + 1)
|
64
64
|
file temp_file.path do
|
65
65
|
content 'test'
|
66
66
|
end
|
67
67
|
EOM
|
68
68
|
expect(result.updated?).to be_truthy
|
69
|
-
expect(IO.read(temp_file.path)).to eq
|
69
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
73
|
context "#expect_recipe" do
|
74
74
|
it "expect_recipe { file ... }.to be_updated updates the file, and be_idempotent does not fail" do
|
75
|
-
expect_recipe
|
75
|
+
expect_recipe do
|
76
76
|
file temp_file.path do
|
77
|
-
content
|
77
|
+
content "test"
|
78
78
|
end
|
79
|
-
|
79
|
+
end.to be_updated.and be_idempotent
|
80
80
|
|
81
|
-
expect(IO.read(temp_file.path)).to eq
|
81
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
82
82
|
end
|
83
83
|
|
84
84
|
it "expect_recipe 'file ...'.to be_updated updates the file, and be_idempotent does not fail" do
|
@@ -88,52 +88,52 @@ describe 'Cheffish::RSpec::ChefRunSupport' do
|
|
88
88
|
end
|
89
89
|
EOM
|
90
90
|
|
91
|
-
expect(IO.read(temp_file.path)).to eq
|
91
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
92
92
|
end
|
93
93
|
|
94
94
|
it "expect_recipe('file ...', file, line).to be_updated updates the file, and be_idempotent does not fail" do
|
95
|
-
expect_recipe(<<-EOM, __FILE__, __LINE__+1).to be_updated.and be_idempotent
|
95
|
+
expect_recipe(<<-EOM, __FILE__, __LINE__ + 1).to be_updated.and be_idempotent
|
96
96
|
file temp_file.path do
|
97
97
|
content 'test'
|
98
98
|
end
|
99
99
|
EOM
|
100
100
|
|
101
|
-
expect(IO.read(temp_file.path)).to eq
|
101
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
102
102
|
end
|
103
103
|
|
104
104
|
it "expect_recipe { file ... }.to be_up_to_date fails" do
|
105
|
-
expect
|
106
|
-
expect_recipe
|
105
|
+
expect do
|
106
|
+
expect_recipe do
|
107
107
|
file temp_file.path do
|
108
|
-
content
|
108
|
+
content "test"
|
109
109
|
end
|
110
|
-
|
111
|
-
|
110
|
+
end.to be_up_to_date
|
111
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
112
112
|
end
|
113
113
|
|
114
114
|
it "expect_recipe { }.to be_updated fails" do
|
115
|
-
expect
|
116
|
-
expect_recipe {
|
117
|
-
|
115
|
+
expect do
|
116
|
+
expect_recipe {}.to be_updated
|
117
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
118
118
|
end
|
119
119
|
|
120
120
|
it "expect_recipe { }.to be_up_to_date succeeds" do
|
121
|
-
expect_recipe {
|
121
|
+
expect_recipe {}.to be_up_to_date
|
122
122
|
end
|
123
123
|
|
124
124
|
it "expect_recipe { }.to be_idempotent succeeds" do
|
125
|
-
expect_recipe {
|
125
|
+
expect_recipe {}.to be_idempotent
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
129
|
context "#expect_converge" do
|
130
130
|
it "expect_converge { file ... }.not_to raise_error updates the file" do
|
131
|
-
expect_converge
|
131
|
+
expect_converge do
|
132
132
|
file temp_file.path do
|
133
|
-
content
|
133
|
+
content "test"
|
134
134
|
end
|
135
|
-
|
136
|
-
expect(IO.read(temp_file.path)).to eq
|
135
|
+
end.not_to raise_error
|
136
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
137
137
|
end
|
138
138
|
|
139
139
|
it "expect_converge('file ...').not_to raise_error updates the file" do
|
@@ -142,22 +142,22 @@ describe 'Cheffish::RSpec::ChefRunSupport' do
|
|
142
142
|
content 'test'
|
143
143
|
end
|
144
144
|
EOM
|
145
|
-
expect(IO.read(temp_file.path)).to eq
|
145
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
146
146
|
end
|
147
147
|
|
148
148
|
it "expect_converge('file ...', file, line).not_to raise_error updates the file" do
|
149
|
-
expect_converge(<<-EOM, __FILE__, __LINE__+1).not_to raise_error
|
149
|
+
expect_converge(<<-EOM, __FILE__, __LINE__ + 1).not_to raise_error
|
150
150
|
file temp_file.path do
|
151
151
|
content 'test'
|
152
152
|
end
|
153
153
|
EOM
|
154
|
-
expect(IO.read(temp_file.path)).to eq
|
154
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
155
155
|
end
|
156
156
|
|
157
157
|
it "expect_converge { raise 'oh no' }.to raise_error passes" do
|
158
|
-
expect_converge
|
159
|
-
raise
|
160
|
-
|
158
|
+
expect_converge do
|
159
|
+
raise "oh no"
|
160
|
+
end.to raise_error("oh no")
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
@@ -168,16 +168,16 @@ describe 'Cheffish::RSpec::ChefRunSupport' do
|
|
168
168
|
# Capture the variable outside
|
169
169
|
x = nil
|
170
170
|
converge { x = let_variable }
|
171
|
-
expect(x).to eq
|
171
|
+
expect(x).to eq "test"
|
172
172
|
end
|
173
173
|
|
174
174
|
it "converge with a file resource referencing let_variable accesses let_variable" do
|
175
|
-
converge
|
175
|
+
converge do
|
176
176
|
file temp_file.path do
|
177
177
|
content let_variable
|
178
178
|
end
|
179
|
-
|
180
|
-
expect(IO.read(temp_file.path)).to eq
|
179
|
+
end
|
180
|
+
expect(IO.read(temp_file.path)).to eq "test"
|
181
181
|
end
|
182
182
|
end
|
183
183
|
end
|
data/spec/support/key_support.rb
CHANGED
@@ -7,8 +7,8 @@ RSpec::Matchers.define :be_public_key_for do |private_key, pass_phrase|
|
|
7
7
|
private_key, private_key_format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(private_key)), pass_phrase, private_key)
|
8
8
|
end
|
9
9
|
|
10
|
-
encrypted = public_key.public_encrypt(
|
11
|
-
expect(private_key.private_decrypt(encrypted)).to eq(
|
10
|
+
encrypted = public_key.public_encrypt("hi there")
|
11
|
+
expect(private_key.private_decrypt(encrypted)).to eq("hi there")
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -21,9 +21,9 @@ RSpec::Matchers.define :match_private_key do |expected, pass_phrase|
|
|
21
21
|
actual, format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(actual)), pass_phrase, actual)
|
22
22
|
end
|
23
23
|
|
24
|
-
encrypted = actual.public_encrypt(
|
25
|
-
expect(expected.private_decrypt(encrypted)).to eq(
|
26
|
-
encrypted = expected.public_encrypt(
|
27
|
-
expect(actual.private_decrypt(encrypted)).to eq(
|
24
|
+
encrypted = actual.public_encrypt("hi there")
|
25
|
+
expect(expected.private_decrypt(encrypted)).to eq("hi there")
|
26
|
+
encrypted = expected.public_encrypt("hi there")
|
27
|
+
expect(actual.private_decrypt(encrypted)).to eq("hi there")
|
28
28
|
end
|
29
29
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "cheffish/rspec"
|
2
2
|
|
3
|
-
require
|
3
|
+
require "cheffish"
|
4
4
|
|
5
5
|
RSpec.configure do |config|
|
6
6
|
config.filter_run :focus => true
|
@@ -11,4 +11,4 @@ RSpec.configure do |config|
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
require
|
14
|
+
require "chef/providers"
|
@@ -1,16 +1,16 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "support/spec_support"
|
2
|
+
require "cheffish/rspec/chef_run_support"
|
3
3
|
|
4
4
|
describe Cheffish do
|
5
|
-
let(:directory_that_exists)
|
5
|
+
let(:directory_that_exists) do
|
6
6
|
Dir.mktmpdir("cheffish-rspec")
|
7
|
-
|
7
|
+
end
|
8
8
|
|
9
|
-
let(:directory_that_does_not_exist)
|
9
|
+
let(:directory_that_does_not_exist) do
|
10
10
|
dir = Dir.mktmpdir("cheffish-rspec")
|
11
11
|
FileUtils.remove_entry dir
|
12
12
|
dir
|
13
|
-
|
13
|
+
end
|
14
14
|
|
15
15
|
let(:private_key_contents) { "contents of private key" }
|
16
16
|
|
@@ -80,9 +80,9 @@ describe Cheffish do
|
|
80
80
|
|
81
81
|
describe "#get_private_key" do
|
82
82
|
context "when private_key_paths has a directory which is empty" do
|
83
|
-
let(:config)
|
83
|
+
let(:config) do
|
84
84
|
{ :private_key_paths => [ directory_that_exists ] }
|
85
|
-
|
85
|
+
end
|
86
86
|
|
87
87
|
it_behaves_like "returning the contents of the key file if it finds one"
|
88
88
|
|
@@ -100,17 +100,17 @@ describe Cheffish do
|
|
100
100
|
end
|
101
101
|
|
102
102
|
context "when private_key_paths leads with a directory that does not exist and then an empty directory" do
|
103
|
-
let(:config)
|
103
|
+
let(:config) do
|
104
104
|
{ :private_key_paths => [ directory_that_does_not_exist, directory_that_exists ] }
|
105
|
-
|
105
|
+
end
|
106
106
|
|
107
107
|
it_behaves_like "returning the contents of the key file if it finds one"
|
108
108
|
end
|
109
109
|
|
110
110
|
context "when private_keys is empty" do
|
111
|
-
let(:config)
|
111
|
+
let(:config) do
|
112
112
|
{ :private_keys => {} }
|
113
|
-
|
113
|
+
end
|
114
114
|
|
115
115
|
it "returns nil" do
|
116
116
|
expect(Cheffish.get_private_key("ned_stark", config)).to be_nil
|
@@ -119,9 +119,9 @@ describe Cheffish do
|
|
119
119
|
|
120
120
|
context "when private_keys contains the path to a key" do
|
121
121
|
let(:name) { "ned_stark" }
|
122
|
-
let(:config)
|
123
|
-
{ :private_keys => {name => setup_key} }
|
124
|
-
|
122
|
+
let(:config) do
|
123
|
+
{ :private_keys => { name => setup_key } }
|
124
|
+
end
|
125
125
|
|
126
126
|
it "returns the contents of the key file" do
|
127
127
|
setup_key
|
@@ -131,10 +131,10 @@ describe Cheffish do
|
|
131
131
|
|
132
132
|
context "when private_keys contains the path to a key" do
|
133
133
|
let(:name) { "ned_stark" }
|
134
|
-
let(:key) {double("key", :to_pem => private_key_contents)}
|
135
|
-
let(:config)
|
136
|
-
{ :private_keys => {name => key} }
|
137
|
-
|
134
|
+
let(:key) { double("key", :to_pem => private_key_contents) }
|
135
|
+
let(:config) do
|
136
|
+
{ :private_keys => { name => key } }
|
137
|
+
end
|
138
138
|
|
139
139
|
it "returns the contents of the key file" do
|
140
140
|
expect(Cheffish.get_private_key(name, config)).to eq(private_key_contents)
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "support/spec_support"
|
2
|
+
require "cheffish/rspec/chef_run_support"
|
3
3
|
# require 'cheffish/rspec/recipe_run_wrapper'
|
4
4
|
|
5
5
|
module MyModule
|
@@ -15,11 +15,11 @@ end
|
|
15
15
|
describe Cheffish::RSpec::RecipeRunWrapper do
|
16
16
|
extend Cheffish::RSpec::ChefRunSupport
|
17
17
|
|
18
|
-
let(:run_wrapper)
|
18
|
+
let(:run_wrapper) do
|
19
19
|
Cheffish::RSpec::RecipeRunWrapper.new(chef_config) do
|
20
20
|
log "test recipe in specs"
|
21
21
|
end
|
22
|
-
|
22
|
+
end
|
23
23
|
|
24
24
|
context "defines #respond_to_missing? on the client" do
|
25
25
|
it "calls the new super.respond_to_missing" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cheffish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Keiser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-zero
|
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
130
|
version: '0'
|
131
131
|
requirements: []
|
132
132
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.
|
133
|
+
rubygems_version: 2.5.1
|
134
134
|
signing_key:
|
135
135
|
specification_version: 4
|
136
136
|
summary: A library to manipulate Chef in Chef.
|