cheffish 14.0.1 → 14.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|