cheffish 14.0.1 → 14.0.4
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 +20 -1
- data/Rakefile +27 -32
- data/cheffish.gemspec +4 -4
- data/lib/chef/resource/chef_acl.rb +4 -4
- data/lib/chef/resource/chef_data_bag_item.rb +4 -4
- data/lib/chef/resource/chef_mirror.rb +10 -10
- data/lib/chef/resource/chef_organization.rb +2 -2
- data/lib/chef/resource/chef_resolved_cookbooks.rb +7 -7
- data/lib/chef/resource/chef_user.rb +3 -3
- data/lib/chef/resource/private_key.rb +3 -3
- data/lib/chef/resource/public_key.rb +2 -2
- data/lib/cheffish.rb +7 -7
- data/lib/cheffish/base_resource.rb +1 -1
- data/lib/cheffish/basic_chef_client.rb +1 -2
- data/lib/cheffish/chef_actor_base.rb +6 -6
- data/lib/cheffish/chef_run.rb +2 -2
- data/lib/cheffish/key_formatter.rb +1 -1
- data/lib/cheffish/merged_config.rb +1 -1
- data/lib/cheffish/node_properties.rb +1 -1
- data/lib/cheffish/recipe_dsl.rb +2 -2
- data/lib/cheffish/rspec/chef_run_support.rb +3 -3
- data/lib/cheffish/rspec/matchers/have_updated.rb +2 -2
- data/lib/cheffish/version.rb +1 -1
- data/spec/functional/fingerprint_spec.rb +27 -27
- data/spec/functional/merged_config_spec.rb +9 -9
- data/spec/functional/server_api_spec.rb +1 -1
- data/spec/integration/chef_acl_spec.rb +16 -18
- data/spec/integration/chef_client_spec.rb +3 -3
- data/spec/integration/chef_mirror_spec.rb +16 -16
- data/spec/integration/chef_node_spec.rb +4 -4
- data/spec/integration/chef_role_spec.rb +2 -2
- data/spec/integration/chef_user_spec.rb +3 -3
- data/spec/integration/private_key_spec.rb +2 -2
- data/spec/integration/recipe_dsl_spec.rb +2 -2
- data/spec/support/key_support.rb +4 -4
- data/spec/support/spec_support.rb +1 -1
- data/spec/unit/get_private_key_spec.rb +6 -6
- metadata +6 -8
- data/README.md +0 -120
data/lib/cheffish/chef_run.rb
CHANGED
@@ -34,8 +34,8 @@ module Cheffish
|
|
34
34
|
def client
|
35
35
|
@client ||= begin
|
36
36
|
chef_config = self.chef_config.dup
|
37
|
-
chef_config[:log_level] ||= :debug if !chef_config.
|
38
|
-
chef_config[:verbose_logging] = false if !chef_config.
|
37
|
+
chef_config[:log_level] ||= :debug if !chef_config.key?(:log_level)
|
38
|
+
chef_config[:verbose_logging] = false if !chef_config.key?(:verbose_logging)
|
39
39
|
chef_config[:stdout] = StringIOTee.new(chef_config[:stdout])
|
40
40
|
chef_config[:stderr] = StringIOTee.new(chef_config[:stderr])
|
41
41
|
chef_config[:log_location] = StringIOTee.new(chef_config[:log_location])
|
@@ -50,7 +50,7 @@ module Cheffish
|
|
50
50
|
# Put : between every pair of hexes
|
51
51
|
hexes.scan(/../).join(":")
|
52
52
|
when :rfc4716md5fingerprint
|
53
|
-
|
53
|
+
_type, base64_data, _etc = encode_openssh_key(key).split
|
54
54
|
data = Base64.decode64(base64_data)
|
55
55
|
hexes = Digest::MD5.hexdigest(data)
|
56
56
|
hexes.scan(/../).join(":")
|
data/lib/cheffish/recipe_dsl.rb
CHANGED
@@ -41,7 +41,7 @@ class Chef
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def with_chef_server(server_url, options = {}, &block)
|
44
|
-
run_context.cheffish.with_chef_server({ :
|
44
|
+
run_context.cheffish.with_chef_server({ chef_server_url: server_url, options: options }, &block)
|
45
45
|
end
|
46
46
|
|
47
47
|
def with_chef_local_server(options, &block)
|
@@ -119,7 +119,7 @@ class Chef
|
|
119
119
|
Chef::Client.when_run_starts do |run_status|
|
120
120
|
# Pulling on cheffish_run_data makes it initialize right now
|
121
121
|
run_status.node.run_state[:chef_config] = config = Cheffish.profiled_config(Chef::Config)
|
122
|
-
run_status.node.run_state[:cheffish] =
|
122
|
+
run_status.node.run_state[:cheffish] = Cheffish::ChefRunData.new(config)
|
123
123
|
run_status.events.register(Cheffish::ChefRunListener.new(run_status.node))
|
124
124
|
end
|
125
125
|
|
@@ -20,7 +20,7 @@ module Cheffish
|
|
20
20
|
|
21
21
|
def when_the_chef_12_server(*args, **options, &block)
|
22
22
|
if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
23
|
-
when_the_chef_server(*args, :
|
23
|
+
when_the_chef_server(*args, osc_compat: false, single_org: false, **options, &block)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -60,9 +60,9 @@ module Cheffish
|
|
60
60
|
def recipe(str = nil, file = nil, line = nil, &recipe)
|
61
61
|
if !recipe
|
62
62
|
if file && line
|
63
|
-
recipe = proc { eval(str, nil, file, line) }
|
63
|
+
recipe = proc { eval(str, nil, file, line) } # rubocop:disable Security/Eval
|
64
64
|
else
|
65
|
-
recipe = proc { eval(str) }
|
65
|
+
recipe = proc { eval(str) } # rubocop:disable Security/Eval
|
66
66
|
end
|
67
67
|
end
|
68
68
|
RecipeRunWrapper.new(chef_config, &recipe)
|
@@ -4,8 +4,8 @@ RSpec::Matchers.define :have_updated do |resource_name, *expected_actions|
|
|
4
4
|
match do |recipe|
|
5
5
|
@recipe = recipe
|
6
6
|
actual = @recipe.event_sink.events
|
7
|
-
actual_actions = actual.select { |event, resource, action| event == :resource_updated && resource.to_s == resource_name }
|
8
|
-
map { |event, resource, action| action }
|
7
|
+
actual_actions = actual.select { |event, resource, action| event == :resource_updated && resource.to_s == resource_name }
|
8
|
+
.map { |event, resource, action| action }
|
9
9
|
expect(actual_actions).to eq(expected_actions)
|
10
10
|
end
|
11
11
|
|
data/lib/cheffish/version.rb
CHANGED
@@ -5,41 +5,41 @@ describe "Cheffish fingerprint key formatter" do
|
|
5
5
|
|
6
6
|
# Sample key: 0x9a6fa4c43b328c3d04c1fbc0498539218b6728e41cd35f6d27d491ef705f0b2083dc1ac977da19f54ba82b044773f20667e9627c543abb3b41b6eb9e4318ca3c68f487bbd0f1c9eea9a3101b7d1d180983c5440ac4183e78e9e256fa687d8aac63b21617a4b02b35bf5e307a3b76961a16cd8493e923536b34cc2b2da8d45220d57ef2243b081b555b84f1da0ade0e896c2aa96911b41430b59eaf75dbffb7eaa7c5b3a686f2d47a24e3b7f1acb0844f84a2fedc63660ae366b800cd9448093d6b1d96503ebb7807b48257e16c3d8a7c9a8cc5dd63116aa673bd9e09754de09358486e743e34c6a3642eeb64b2208efc96df39151572557a75638bd059c21a55 = 0xd6e92677d4e1d2aa6d14f87b5f49ee6916c6b92411536254fae4a21e82eebb0a40600247c701c1c938b21ca9f25b7b330c35fded57b4de3a951e83329a80bdbf2ba138fe2f190bffce43967b5fa93b179367bcd15cb1db7f9e3ab62caca95dc9489b62bc0a10b53841b932455a43409f96eed90dc80abc8cce5593ead8f0a26d * 0xb7f68cd427045788d5e315375f71d3a416784ec2597776a60ed77c821294d9bd66e96658bdcb43072cee0c849d297bd9f94991738f1a0df313ceb51b093a9372f12a61987f40e7a03d773911deb270916a574962ae8ff4f2d8bfcedee1c885e9c3e54212471636a6330b05b78c3a7ddf96b013be389a08ab7971db2f68fb2689
|
7
7
|
|
8
|
-
sample_private_key =
|
9
|
-
-----BEGIN RSA PRIVATE KEY-----
|
10
|
-
MIIEowIBAAKCAQEAmm+kxDsyjD0EwfvASYU5IYtnKOQc019tJ9SR73BfCyCD3BrJd9oZ9UuoKwRH
|
11
|
-
c/IGZ+lifFQ6uztBtuueQxjKPGj0h7vQ8cnuqaMQG30dGAmDxUQKxBg+eOniVvpofYqsY7IWF6Sw
|
12
|
-
KzW/XjB6O3aWGhbNhJPpI1NrNMwrLajUUiDVfvIkOwgbVVuE8doK3g6JbCqpaRG0FDC1nq912/+3
|
13
|
-
6qfFs6aG8tR6JOO38aywhE+Eov7cY2YK42a4AM2USAk9ax2WUD67eAe0glfhbD2KfJqMxd1jEWqm
|
14
|
-
c72eCXVN4JNYSG50PjTGo2Qu62SyII78lt85FRVyVXp1Y4vQWcIaVQIDAQABAoIBABY+JC37FLGs
|
15
|
-
DCZgOvab0HmrWUVDbX9oDBGjhQ1GUvoISdWGqiOv7vMsXWEssZnabt/CdmPPwdG7nCBbWSTyyhXf
|
16
|
-
S/DMtTBN1CjsimJbJ7iRjj/4J9DMaRsDHI1IbYo/UcreGF55YsImcJSBSOmNj9rcE+eXYgmrdxJY
|
17
|
-
oZNm8IWPaZ1/8KdPHSq6/HfTzRxXhcGOMGnf3lGfzkzIbV9Ee88Lv9sSV3bYrOsWMNabOe2TeTpC
|
18
|
-
UTfFkC++0RkFjEDINSCnoCi+ybzHLUDnurANCwnRWLTVEAeffwNVmiDfgimuqFtzCInW5/5bOTPz
|
19
|
-
rBmcC6QAFbyk2WKAlY8Zd4SBYqECgYEA1ukmd9Th0qptFPh7X0nuaRbGuSQRU2JU+uSiHoLuuwpA
|
20
|
-
YAJHxwHByTiyHKnyW3szDDX97Ve03jqVHoMymoC9vyuhOP4vGQv/zkOWe1+pOxeTZ7zRXLHbf546
|
21
|
-
tiysqV3JSJtivAoQtThBuTJFWkNAn5bu2Q3ICryMzlWT6tjwom0CgYEAt/aM1CcEV4jV4xU3X3HT
|
22
|
-
pBZ4TsJZd3amDtd8ghKU2b1m6WZYvctDByzuDISdKXvZ+UmRc48aDfMTzrUbCTqTcvEqYZh/QOeg
|
23
|
-
PXc5Ed6ycJFqV0liro/08ti/zt7hyIXpw+VCEkcWNqYzCwW3jDp935awE744mgireXHbL2j7JokC
|
24
|
-
gYAOHErRTWHyYgw9dz8qd4E21y7/EvYsQmWP/5kBZdlk4HxvkVbDI0NlAdr39NSb2w/z+kuM3Nhc
|
25
|
-
Sv5lfXnCGTfcKHIyesX+4AHQujFUMmi7H4YnJoecjXT7ARmbwn0ntae0o7cs34BPVb1C+qEBFy9U
|
26
|
-
CyXtjHEY+15HYekPX2UVVQKBgBT8Nwxsdv5VSbDh1rM4lN//ADJb0UDjdAX1ZuqfnANKq9asKitc
|
27
|
-
aIUFBxK+ff8hdbgOQF1iUaKNvBC0cCUZXYCbKi5/6uRIh+r7ErOLJ+fXbr4OTQeEvHiHaTn8Ct2J
|
28
|
-
CSWjnWngWhRZ2TDEsi947Kr40ZUu+d34ZzcvWcWKwDuhAoGBAJzCRoGOu6YGy+rBPxaIg0vB+Grx
|
29
|
-
rxs0NeNqGdrzmyAPN35OHXYclPwfp+DbtbJHgGMRc/9VFPqW9PeTKjIByeEsXyrcdreR35AR/fwR
|
30
|
-
AUcSSKTvw+PobCpXhdkiw4TgJhFNuZnoC63FOjNqA5mu1ICZYBb4ZVlgUAgSmDQxSIgK
|
31
|
-
-----END RSA PRIVATE KEY-----
|
8
|
+
sample_private_key = <<~EOF
|
9
|
+
-----BEGIN RSA PRIVATE KEY-----
|
10
|
+
MIIEowIBAAKCAQEAmm+kxDsyjD0EwfvASYU5IYtnKOQc019tJ9SR73BfCyCD3BrJd9oZ9UuoKwRH
|
11
|
+
c/IGZ+lifFQ6uztBtuueQxjKPGj0h7vQ8cnuqaMQG30dGAmDxUQKxBg+eOniVvpofYqsY7IWF6Sw
|
12
|
+
KzW/XjB6O3aWGhbNhJPpI1NrNMwrLajUUiDVfvIkOwgbVVuE8doK3g6JbCqpaRG0FDC1nq912/+3
|
13
|
+
6qfFs6aG8tR6JOO38aywhE+Eov7cY2YK42a4AM2USAk9ax2WUD67eAe0glfhbD2KfJqMxd1jEWqm
|
14
|
+
c72eCXVN4JNYSG50PjTGo2Qu62SyII78lt85FRVyVXp1Y4vQWcIaVQIDAQABAoIBABY+JC37FLGs
|
15
|
+
DCZgOvab0HmrWUVDbX9oDBGjhQ1GUvoISdWGqiOv7vMsXWEssZnabt/CdmPPwdG7nCBbWSTyyhXf
|
16
|
+
S/DMtTBN1CjsimJbJ7iRjj/4J9DMaRsDHI1IbYo/UcreGF55YsImcJSBSOmNj9rcE+eXYgmrdxJY
|
17
|
+
oZNm8IWPaZ1/8KdPHSq6/HfTzRxXhcGOMGnf3lGfzkzIbV9Ee88Lv9sSV3bYrOsWMNabOe2TeTpC
|
18
|
+
UTfFkC++0RkFjEDINSCnoCi+ybzHLUDnurANCwnRWLTVEAeffwNVmiDfgimuqFtzCInW5/5bOTPz
|
19
|
+
rBmcC6QAFbyk2WKAlY8Zd4SBYqECgYEA1ukmd9Th0qptFPh7X0nuaRbGuSQRU2JU+uSiHoLuuwpA
|
20
|
+
YAJHxwHByTiyHKnyW3szDDX97Ve03jqVHoMymoC9vyuhOP4vGQv/zkOWe1+pOxeTZ7zRXLHbf546
|
21
|
+
tiysqV3JSJtivAoQtThBuTJFWkNAn5bu2Q3ICryMzlWT6tjwom0CgYEAt/aM1CcEV4jV4xU3X3HT
|
22
|
+
pBZ4TsJZd3amDtd8ghKU2b1m6WZYvctDByzuDISdKXvZ+UmRc48aDfMTzrUbCTqTcvEqYZh/QOeg
|
23
|
+
PXc5Ed6ycJFqV0liro/08ti/zt7hyIXpw+VCEkcWNqYzCwW3jDp935awE744mgireXHbL2j7JokC
|
24
|
+
gYAOHErRTWHyYgw9dz8qd4E21y7/EvYsQmWP/5kBZdlk4HxvkVbDI0NlAdr39NSb2w/z+kuM3Nhc
|
25
|
+
Sv5lfXnCGTfcKHIyesX+4AHQujFUMmi7H4YnJoecjXT7ARmbwn0ntae0o7cs34BPVb1C+qEBFy9U
|
26
|
+
CyXtjHEY+15HYekPX2UVVQKBgBT8Nwxsdv5VSbDh1rM4lN//ADJb0UDjdAX1ZuqfnANKq9asKitc
|
27
|
+
aIUFBxK+ff8hdbgOQF1iUaKNvBC0cCUZXYCbKi5/6uRIh+r7ErOLJ+fXbr4OTQeEvHiHaTn8Ct2J
|
28
|
+
CSWjnWngWhRZ2TDEsi947Kr40ZUu+d34ZzcvWcWKwDuhAoGBAJzCRoGOu6YGy+rBPxaIg0vB+Grx
|
29
|
+
rxs0NeNqGdrzmyAPN35OHXYclPwfp+DbtbJHgGMRc/9VFPqW9PeTKjIByeEsXyrcdreR35AR/fwR
|
30
|
+
AUcSSKTvw+PobCpXhdkiw4TgJhFNuZnoC63FOjNqA5mu1ICZYBb4ZVlgUAgSmDQxSIgK
|
31
|
+
-----END RSA PRIVATE KEY-----
|
32
32
|
EOF
|
33
33
|
sample_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCab6TEOzKMPQTB+8BJhTkhi2co5BzTX20n1JHvcF8LIIPcGsl32hn1S6grBEdz8gZn6WJ8VDq7O0G2655DGMo8aPSHu9Dxye6poxAbfR0YCYPFRArEGD546eJW+mh9iqxjshYXpLArNb9eMHo7dpYaFs2Ek+kjU2s0zCstqNRSINV+8iQ7CBtVW4Tx2greDolsKqlpEbQUMLWer3Xb/7fqp8Wzpoby1Hok47fxrLCET4Si/txjZgrjZrgAzZRICT1rHZZQPrt4B7SCV+FsPYp8mozF3WMRaqZzvZ4JdU3gk1hIbnQ+NMajZC7rZLIgjvyW3zkVFXJVenVji9BZwhpV"
|
34
34
|
|
35
35
|
def key_to_format(key, format)
|
36
|
-
keyobj,
|
37
|
-
Cheffish::KeyFormatter.encode(keyobj, { :
|
36
|
+
keyobj, _f = Cheffish::KeyFormatter.decode(key)
|
37
|
+
Cheffish::KeyFormatter.encode(keyobj, { format: format })
|
38
38
|
end
|
39
39
|
|
40
40
|
context "when computing key fingperprints" do
|
41
41
|
|
42
|
-
it "computes the PKCS#8 SHA1 private key fingerprint correctly", :
|
42
|
+
it "computes the PKCS#8 SHA1 private key fingerprint correctly", pending: (RUBY_VERSION.to_f >= 2.0) do
|
43
43
|
expect(key_to_format(sample_private_key, :pkcs8sha1fingerprint)).to eq(
|
44
44
|
"88:7e:3a:bd:26:9f:b5:c5:d8:ae:52:f9:df:0b:64:a4:5c:17:0a:87")
|
45
45
|
end
|
@@ -3,7 +3,7 @@ require "cheffish/merged_config"
|
|
3
3
|
describe "merged_config" do
|
4
4
|
|
5
5
|
let(:config) do
|
6
|
-
Cheffish::MergedConfig.new({ :
|
6
|
+
Cheffish::MergedConfig.new({ test: "val" })
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:collision) do
|
@@ -13,20 +13,20 @@ describe "merged_config" do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
let(:config_mismatch) do
|
16
|
-
c1 = { :
|
17
|
-
c2 = { :
|
16
|
+
c1 = { test: { test: "val" } }
|
17
|
+
c2 = { test: [2, 3, 4] }
|
18
18
|
Cheffish::MergedConfig.new(c1, c2)
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:config_hashes) do
|
22
|
-
c1 = { :
|
23
|
-
c2 = { :
|
22
|
+
c1 = { test: { test: "val" } }
|
23
|
+
c2 = { test: { test2: "val2" } }
|
24
24
|
Cheffish::MergedConfig.new(c1, c2)
|
25
25
|
end
|
26
26
|
|
27
27
|
let(:nested_config) do
|
28
|
-
c1 = { :
|
29
|
-
c2 = { :
|
28
|
+
c1 = { test: { test: "val" } }
|
29
|
+
c2 = { test: { test2: "val2" } }
|
30
30
|
mc = Cheffish::MergedConfig.new(c2)
|
31
31
|
Cheffish::MergedConfig.new(c1, mc)
|
32
32
|
end
|
@@ -36,11 +36,11 @@ describe "merged_config" do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "raises a NoMethodError if calling an unknown method with arguments" do
|
39
|
-
expect { config.merge({ :
|
39
|
+
expect { config.merge({ some: "hash" }) }.to raise_error(NoMethodError)
|
40
40
|
end
|
41
41
|
|
42
42
|
it "has an informative string representation" do
|
43
|
-
expect(
|
43
|
+
expect((config).to_s).to eq("{\"test\"=>\"val\"}")
|
44
44
|
end
|
45
45
|
|
46
46
|
it "has indifferent str/sym access" do
|
@@ -10,7 +10,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
10
10
|
# let(:chef_config) { super().merge(log_level: :debug, stdout: STDOUT, stderr: STDERR, log_location: STDOUT) }
|
11
11
|
|
12
12
|
context "Rights attributes" do
|
13
|
-
when_the_chef_server "has a node named x", :
|
13
|
+
when_the_chef_server "has a node named x", osc_compat: false do
|
14
14
|
node "x", {}
|
15
15
|
|
16
16
|
it 'Converging chef_acl "nodes/x" changes nothing' do
|
@@ -195,7 +195,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
195
195
|
end
|
196
196
|
end
|
197
197
|
|
198
|
-
when_the_chef_server "has a node named x with user blarghle in its acl", :
|
198
|
+
when_the_chef_server "has a node named x with user blarghle in its acl", osc_compat: false do
|
199
199
|
user "blarghle", {}
|
200
200
|
node "x", {} do
|
201
201
|
acl "read" => { "actors" => %w{blarghle} }
|
@@ -211,7 +211,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
211
211
|
end
|
212
212
|
end
|
213
213
|
|
214
|
-
when_the_chef_server "has a node named x with users foo and bar in all its acls", :
|
214
|
+
when_the_chef_server "has a node named x with users foo and bar in all its acls", osc_compat: false do
|
215
215
|
user "foo", {}
|
216
216
|
user "bar", {}
|
217
217
|
node "x", {} do
|
@@ -241,7 +241,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
241
241
|
::RSpec::Matchers.define_negated_matcher :exclude, :include
|
242
242
|
|
243
243
|
context "recursive" do
|
244
|
-
when_the_chef_server "has a nodes container with user blarghle in its acl", :
|
244
|
+
when_the_chef_server "has a nodes container with user blarghle in its acl", osc_compat: false do
|
245
245
|
user "blarghle", {}
|
246
246
|
acl_for "containers/nodes", "read" => { "actors" => %w{blarghle} }
|
247
247
|
node "x", {} do
|
@@ -255,8 +255,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
255
255
|
rights :read, users: %w{blarghle}
|
256
256
|
end
|
257
257
|
end.to be_up_to_date
|
258
|
-
end.to
|
259
|
-
and not_change { get("nodes/x/_acl") }
|
258
|
+
end.to((not_change { get("containers/nodes/_acl") }).and(not_change { get("nodes/x/_acl") }))
|
260
259
|
end
|
261
260
|
|
262
261
|
RSpec::Matchers.define_negated_matcher :not_change, :change
|
@@ -269,8 +268,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
269
268
|
recursive :on_change
|
270
269
|
end
|
271
270
|
end.to be_up_to_date
|
272
|
-
end.to
|
273
|
-
and not_change { get("nodes/x/_acl") }
|
271
|
+
end.to((not_change { get("containers/nodes/_acl") }).and(not_change { get("nodes/x/_acl") }))
|
274
272
|
end
|
275
273
|
|
276
274
|
it 'Converging chef_acl "nodes" with recursive true changes nodes/x\'s acls' do
|
@@ -320,7 +318,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
320
318
|
end
|
321
319
|
|
322
320
|
context "ACLs on each type of thing" do
|
323
|
-
when_the_chef_server "has an organization named foo", :
|
321
|
+
when_the_chef_server "has an organization named foo", osc_compat: false, single_org: false do
|
324
322
|
organization "foo" do
|
325
323
|
user "u", {}
|
326
324
|
client "x", {}
|
@@ -568,7 +566,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
568
566
|
end
|
569
567
|
end
|
570
568
|
|
571
|
-
when_the_chef_server 'has a user "u" in single org mode', :
|
569
|
+
when_the_chef_server 'has a user "u" in single org mode', osc_compat: false do
|
572
570
|
user "u", {}
|
573
571
|
client "x", {}
|
574
572
|
container "x", {}
|
@@ -670,7 +668,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
670
668
|
end
|
671
669
|
|
672
670
|
context "ACLs on each container type" do
|
673
|
-
when_the_chef_server "has an organization named foo", :
|
671
|
+
when_the_chef_server "has an organization named foo", osc_compat: false, single_org: false do
|
674
672
|
organization "foo" do
|
675
673
|
user "u", {}
|
676
674
|
client "x", {}
|
@@ -738,7 +736,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
738
736
|
end
|
739
737
|
end
|
740
738
|
|
741
|
-
when_the_chef_server 'has a user "u" in single org mode', :
|
739
|
+
when_the_chef_server 'has a user "u" in single org mode', osc_compat: false do
|
742
740
|
user "u", {}
|
743
741
|
client "x", {}
|
744
742
|
container "x", {}
|
@@ -754,7 +752,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
754
752
|
%w{clients containers cookbooks data environments groups nodes roles sandboxes}.each do |type|
|
755
753
|
it "chef_acl #{type}' changes the acl" do
|
756
754
|
expect_recipe do
|
757
|
-
chef_acl
|
755
|
+
chef_acl type.to_s do
|
758
756
|
rights :read, users: %w{u}
|
759
757
|
end
|
760
758
|
end.to be_updated
|
@@ -777,7 +775,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
777
775
|
end
|
778
776
|
|
779
777
|
context "remove_rights" do
|
780
|
-
when_the_chef_server 'has a node "x" with "u", "c" and "g" in its acl', :
|
778
|
+
when_the_chef_server 'has a node "x" with "u", "c" and "g" in its acl', osc_compat: false do
|
781
779
|
user "u", {}
|
782
780
|
user "u2", {}
|
783
781
|
client "c", {}
|
@@ -838,12 +836,12 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
838
836
|
remove_rights :read, users: %w{u2}, clients: %w{c2}, groups: %w{g2}
|
839
837
|
end
|
840
838
|
end.to be_up_to_date
|
841
|
-
end.not_to
|
839
|
+
end.not_to(change { get("nodes/x/_acl") })
|
842
840
|
end
|
843
841
|
end
|
844
842
|
end
|
845
843
|
|
846
|
-
when_the_chef_server "has a node named data_bags", :
|
844
|
+
when_the_chef_server "has a node named data_bags", osc_compat: false do
|
847
845
|
user "blarghle", {}
|
848
846
|
node "data_bags", {}
|
849
847
|
|
@@ -857,7 +855,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
857
855
|
end
|
858
856
|
end
|
859
857
|
|
860
|
-
when_the_chef_server "has a node named data_bags in multi-org mode", :
|
858
|
+
when_the_chef_server "has a node named data_bags in multi-org mode", osc_compat: false, single_org: false do
|
861
859
|
user "blarghle", {}
|
862
860
|
organization "foo" do
|
863
861
|
node "data_bags", {}
|
@@ -873,7 +871,7 @@ if Gem::Version.new(ChefZero::VERSION) >= Gem::Version.new("3.1")
|
|
873
871
|
end
|
874
872
|
end
|
875
873
|
|
876
|
-
when_the_chef_server "has a user named data_bags in multi-org mode", :
|
874
|
+
when_the_chef_server "has a user named data_bags in multi-org mode", osc_compat: false, single_org: false do
|
877
875
|
user "data_bags", {}
|
878
876
|
user "blarghle", {}
|
879
877
|
|
@@ -30,7 +30,7 @@ describe Chef::Resource::ChefClient do
|
|
30
30
|
end.to have_updated "chef_client[blah]", :create
|
31
31
|
client = get("clients/blah")
|
32
32
|
expect(client["name"]).to eq("blah")
|
33
|
-
key,
|
33
|
+
key, _format = Cheffish::KeyFormatter.decode(client["public_key"])
|
34
34
|
expect(key).to be_public_key_for("#{repo_path}/blah.pem")
|
35
35
|
end
|
36
36
|
end
|
@@ -67,7 +67,7 @@ describe Chef::Resource::ChefClient do
|
|
67
67
|
end
|
68
68
|
end.to have_updated "chef_client[foobar]", :create
|
69
69
|
client = get("clients/foobar")
|
70
|
-
key,
|
70
|
+
key, _format = Cheffish::KeyFormatter.decode(client["public_key"])
|
71
71
|
expect(key).to be_public_key_for("#{repo_path}/blah.pem")
|
72
72
|
|
73
73
|
private_key = Cheffish::KeyFormatter.decode(Cheffish.get_private_key("blah"))
|
@@ -94,7 +94,7 @@ describe Chef::Resource::ChefClient do
|
|
94
94
|
end.to have_updated "chef_client[blah]", :create
|
95
95
|
client = get("clients/blah")
|
96
96
|
expect(client["name"]).to eq("blah")
|
97
|
-
key,
|
97
|
+
key, _format = Cheffish::KeyFormatter.decode(client["public_key"])
|
98
98
|
expect(key).to be_public_key_for("#{repo_path}/blah.pem")
|
99
99
|
end
|
100
100
|
end
|
@@ -48,7 +48,7 @@ describe Chef::Resource::ChefMirror do
|
|
48
48
|
action :download
|
49
49
|
end
|
50
50
|
end
|
51
|
-
end.to raise_error
|
51
|
+
end.to raise_error(/chef_mirror.concurrency must be above 0/)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -158,8 +158,8 @@ describe Chef::Resource::ChefMirror do
|
|
158
158
|
end.to have_updated("chef_mirror[]", :upload)
|
159
159
|
expect { get("nodes/x") }.not_to raise_error
|
160
160
|
expect { get("roles/x") }.not_to raise_error
|
161
|
-
expect { get("nodes/y") }.to raise_error
|
162
|
-
expect { get("roles/y") }.to raise_error
|
161
|
+
expect { get("nodes/y") }.to raise_error(/404/)
|
162
|
+
expect { get("roles/y") }.to raise_error(/404/)
|
163
163
|
end
|
164
164
|
|
165
165
|
it "Upload with chef_repo_path(:chef_repo_path) with multiple paths uploads everything" do
|
@@ -167,7 +167,7 @@ describe Chef::Resource::ChefMirror do
|
|
167
167
|
repo2_path = path_to("repo2")
|
168
168
|
expect_recipe do
|
169
169
|
chef_mirror "" do
|
170
|
-
chef_repo_path :
|
170
|
+
chef_repo_path chef_repo_path: [ repo_path, repo2_path ]
|
171
171
|
action :upload
|
172
172
|
end
|
173
173
|
end.to have_updated("chef_mirror[]", :upload)
|
@@ -183,15 +183,15 @@ describe Chef::Resource::ChefMirror do
|
|
183
183
|
|
184
184
|
expect_recipe do
|
185
185
|
chef_mirror "" do
|
186
|
-
chef_repo_path :
|
187
|
-
:
|
188
|
-
:
|
186
|
+
chef_repo_path chef_repo_path: "/blahblah",
|
187
|
+
node_path: "#{repo_path}/nodes",
|
188
|
+
role_path: "#{repo2_path}/roles"
|
189
189
|
action :upload
|
190
190
|
end
|
191
191
|
end.to have_updated("chef_mirror[]", :upload)
|
192
192
|
expect { get("nodes/x") }.not_to raise_error
|
193
|
-
expect { get("roles/x") }.to raise_error
|
194
|
-
expect { get("nodes/y") }.to raise_error
|
193
|
+
expect { get("roles/x") }.to raise_error(/404/)
|
194
|
+
expect { get("nodes/y") }.to raise_error(/404/)
|
195
195
|
expect { get("roles/y") }.not_to raise_error
|
196
196
|
end
|
197
197
|
|
@@ -201,14 +201,14 @@ describe Chef::Resource::ChefMirror do
|
|
201
201
|
|
202
202
|
expect_recipe do
|
203
203
|
chef_mirror "" do
|
204
|
-
chef_repo_path :
|
205
|
-
:
|
204
|
+
chef_repo_path chef_repo_path: repo_path,
|
205
|
+
role_path: "#{repo2_path}/roles"
|
206
206
|
action :upload
|
207
207
|
end
|
208
208
|
end.to have_updated("chef_mirror[]", :upload)
|
209
209
|
expect { get("nodes/x") }.not_to raise_error
|
210
|
-
expect { get("roles/x") }.to raise_error
|
211
|
-
expect { get("nodes/y") }.to raise_error
|
210
|
+
expect { get("roles/x") }.to raise_error(/404/)
|
211
|
+
expect { get("nodes/y") }.to raise_error(/404/)
|
212
212
|
expect { get("roles/y") }.not_to raise_error
|
213
213
|
end
|
214
214
|
|
@@ -218,9 +218,9 @@ describe Chef::Resource::ChefMirror do
|
|
218
218
|
|
219
219
|
expect_recipe do
|
220
220
|
chef_mirror "" do
|
221
|
-
chef_repo_path :
|
222
|
-
:
|
223
|
-
:
|
221
|
+
chef_repo_path chef_repo_path: %w{foo bar},
|
222
|
+
node_path: [ "#{repo_path}/nodes", "#{repo2_path}/nodes" ],
|
223
|
+
role_path: [ "#{repo_path}/roles", "#{repo2_path}/roles" ]
|
224
224
|
action :upload
|
225
225
|
end
|
226
226
|
end.to have_updated("chef_mirror[]", :upload)
|