foodcritic 10.4.1 → 11.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -1
  3. data/Rakefile +7 -1
  4. data/features/step_definitions/cookbook_steps.rb +0 -96
  5. data/lib/foodcritic/api.rb +77 -79
  6. data/lib/foodcritic/rules/fc008.rb +2 -2
  7. data/lib/foodcritic/rules/fc029.rb +1 -1
  8. data/lib/foodcritic/rules/fc042.rb +1 -1
  9. data/lib/foodcritic/rules/fc052.rb +1 -1
  10. data/lib/foodcritic/rules/fc053.rb +1 -1
  11. data/lib/foodcritic/rules/fc057.rb +1 -1
  12. data/lib/foodcritic/rules/fc058.rb +1 -1
  13. data/lib/foodcritic/rules/fc060.rb +1 -1
  14. data/lib/foodcritic/rules/fc061.rb +3 -3
  15. data/lib/foodcritic/rules/fc063.rb +1 -2
  16. data/lib/foodcritic/rules/fc069.rb +2 -4
  17. data/lib/foodcritic/rules/fc078.rb +2 -3
  18. data/lib/foodcritic/rules/fc079.rb +6 -0
  19. data/lib/foodcritic/rules/fc080.rb +6 -0
  20. data/lib/foodcritic/rules/fc081.rb +6 -0
  21. data/lib/foodcritic/rules/fc082.rb +9 -0
  22. data/lib/foodcritic/rules/fc083.rb +6 -0
  23. data/lib/foodcritic/rules/fc084.rb +9 -0
  24. data/lib/foodcritic/rules/fc085.rb +12 -0
  25. data/lib/foodcritic/version.rb +1 -1
  26. data/spec/functional/fc007_spec.rb +127 -0
  27. data/spec/functional/fc049_spec.rb +56 -0
  28. data/spec/functional/fc050_spec.rb +85 -0
  29. data/spec/functional/fc066_spec.rb +20 -0
  30. data/spec/functional/fc069_spec.rb +15 -0
  31. data/spec/functional/fc070_spec.rb +9 -0
  32. data/spec/functional/fc076_spec.rb +2 -2
  33. data/spec/functional/fc077_spec.rb +2 -2
  34. data/spec/functional/fc078_spec.rb +14 -4
  35. data/spec/functional/fc079_spec.rb +21 -0
  36. data/spec/functional/fc080_spec.rb +68 -0
  37. data/spec/functional/fc081_spec.rb +25 -0
  38. data/spec/functional/fc082_spec.rb +23 -0
  39. data/spec/functional/fc083_spec.rb +34 -0
  40. data/spec/functional/fc084_spec.rb +49 -0
  41. data/spec/functional/fc085_spec.rb +58 -0
  42. data/spec/regression/expected/aix.txt +1 -0
  43. data/spec/regression/expected/aws.txt +3 -0
  44. data/spec/regression/expected/chef-client.txt +2 -0
  45. data/spec/regression/expected/chef.txt +67 -0
  46. data/spec/regression/expected/database.txt +1 -0
  47. data/spec/regression/expected/drbd.txt +1 -0
  48. data/spec/regression/expected/jetty.txt +1 -0
  49. data/spec/regression/expected/mysql.txt +4 -0
  50. data/spec/regression/expected/openssh.txt +1 -0
  51. data/spec/regression/expected/postfix.txt +1 -0
  52. data/spec/regression/expected/rsyslog.txt +1 -0
  53. data/spec/regression/expected/smokeping.txt +1 -0
  54. data/spec/regression/expected/sql_server.txt +1 -0
  55. data/spec/regression/expected/ufw.txt +1 -0
  56. data/spec/regression/expected/users.txt +2 -0
  57. data/spec/regression/expected/xml.txt +1 -0
  58. data/spec/regression/expected/yum.txt +0 -1
  59. data/spec/regression/regression_spec.rb +2 -2
  60. data/spec/unit/api_spec.rb +130 -149
  61. metadata +20 -32
  62. data/features/007_check_for_undeclared_recipe_dependencies.feature +0 -59
  63. data/features/049_check_for_role_name_mismatch_with_file_name.feature +0 -31
  64. data/features/050_check_for_invalid_name.feature +0 -33
  65. data/man/foodcritic.1 +0 -81
  66. data/spec/foodcritic/coverage/assets/0.10.0/application.css +0 -799
  67. data/spec/foodcritic/coverage/assets/0.10.0/application.js +0 -1707
  68. data/spec/foodcritic/coverage/assets/0.10.0/colorbox/border.png +0 -0
  69. data/spec/foodcritic/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  70. data/spec/foodcritic/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  71. data/spec/foodcritic/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  72. data/spec/foodcritic/coverage/assets/0.10.0/favicon_green.png +0 -0
  73. data/spec/foodcritic/coverage/assets/0.10.0/favicon_red.png +0 -0
  74. data/spec/foodcritic/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  75. data/spec/foodcritic/coverage/assets/0.10.0/loading.gif +0 -0
  76. data/spec/foodcritic/coverage/assets/0.10.0/magnify.png +0 -0
  77. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  78. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  79. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  80. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  81. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  82. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  83. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  84. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  85. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  86. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  87. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  88. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  89. data/spec/foodcritic/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  90. data/spec/foodcritic/coverage/index.html +0 -72
@@ -10,4 +10,24 @@ describe "FC066" do
10
10
  metadata_file "chef_version '>= 12.1'"
11
11
  it { is_expected.to_not violate_rule("FC066") }
12
12
  end
13
+
14
+ context "with a cookbook with a metadata file that specifies a chef_version with a guard" do
15
+ metadata_file "chef_version '>= 12.1' if defined?(chef_version)"
16
+ it { is_expected.to_not violate_rule("FC066") }
17
+ end
18
+
19
+ context "with a cookbook with a metadata file that specifies a chef_version with parens" do
20
+ metadata_file "chef_version('>= 12.1')"
21
+ it { is_expected.to_not violate_rule("FC066") }
22
+ end
23
+
24
+ context "with a cookbook with a metadata file that specifies a chef_version with multiple arguments" do
25
+ metadata_file "chef_version '>= 12.1', '< 14'"
26
+ it { is_expected.to_not violate_rule("FC066") }
27
+ end
28
+
29
+ context "with a cookbook with a metadata file that specifies a chef_version with a splat" do
30
+ metadata_file "chef_version(*['>= 12.1', '< 14'])"
31
+ it { is_expected.to_not violate_rule("FC066") }
32
+ end
13
33
  end
@@ -20,4 +20,19 @@ describe "FC069" do
20
20
  metadata_file "license 'All Rights Reserved'"
21
21
  it { is_expected.to_not violate_rule("FC069") }
22
22
  end
23
+
24
+ context "with a cookbook with a metadata file that specifies ChefDK's non-SPDX all rights reserved string with a different casing" do
25
+ metadata_file "license 'All rights reserved'"
26
+ it { is_expected.to_not violate_rule("FC069") }
27
+ end
28
+
29
+ context "with a cookbook with a metadata file that specifies a license with parens" do
30
+ metadata_file "license('Apache-2.0')"
31
+ it { is_expected.to_not violate_rule }
32
+ end
33
+
34
+ context "with a cookbook with a metadata file that does not specifiy a license" do
35
+ metadata_file
36
+ it { is_expected.to violate_rule }
37
+ end
23
38
  end
@@ -53,4 +53,13 @@ describe "FC070" do
53
53
  EOH
54
54
  it { is_expected.to_not violate_rule("FC070") }
55
55
  end
56
+
57
+ context "with a word list and a version constraint" do
58
+ metadata_file <<-EOH
59
+ %w{ redhat centos scientific amazon }.each do |os|
60
+ supports os, ">= 5.0"
61
+ end
62
+ EOH
63
+ it { is_expected.to_not violate_rule("FC070") }
64
+ end
56
65
  end
@@ -3,11 +3,11 @@ require "spec_helper"
3
3
  describe "FC076" do
4
4
  context "with a cookbook with a metadata file that does contain the conflicts keyword" do
5
5
  metadata_file "conflicts 'runit'"
6
- it { is_expected.to violate_rule("FC076") }
6
+ it { is_expected.to violate_rule }
7
7
  end
8
8
 
9
9
  context "with a cookbook with a metadata file that does not contain the conflicts keyword" do
10
10
  metadata_file
11
- it { is_expected.to_not violate_rule("FC076") }
11
+ it { is_expected.to_not violate_rule }
12
12
  end
13
13
  end
@@ -3,11 +3,11 @@ require "spec_helper"
3
3
  describe "FC077" do
4
4
  context "with a cookbook with a metadata file that does contain the replaces keyword" do
5
5
  metadata_file "replaces 'runit'"
6
- it { is_expected.to violate_rule("FC077") }
6
+ it { is_expected.to violate_rule }
7
7
  end
8
8
 
9
9
  context "with a cookbook with a metadata file that does not contain the replaces keyword" do
10
10
  metadata_file
11
- it { is_expected.to_not violate_rule("FC077") }
11
+ it { is_expected.to_not violate_rule }
12
12
  end
13
13
  end
@@ -4,22 +4,32 @@ describe "FC078" do
4
4
  context "with a cookbook with a metadata file that specifies" do
5
5
  context "a license generated by knife cookbook create" do
6
6
  metadata_file "license 'Apache 2.0'"
7
- it { is_expected.to violate_rule("FC078") }
7
+ it { is_expected.to violate_rule }
8
8
  end
9
9
 
10
10
  context "a license generated by chef generate cookbook" do
11
11
  metadata_file "license 'apache_2'"
12
- it { is_expected.to violate_rule("FC078") }
12
+ it { is_expected.to violate_rule }
13
13
  end
14
14
 
15
15
  context "a valid OSI-approved open source license in SPDX format" do
16
16
  metadata_file "license 'Apache-2.0'"
17
- it { is_expected.to_not violate_rule("FC078") }
17
+ it { is_expected.to_not violate_rule }
18
18
  end
19
19
 
20
20
  context "ChefDK's non-SPDX all rights reserved string" do
21
21
  metadata_file "license 'All Rights Reserved'"
22
- it { is_expected.to violate_rule("FC078") }
22
+ it { is_expected.to violate_rule }
23
+ end
24
+
25
+ context "a license with parens" do
26
+ metadata_file "license('Apache-2.0')"
27
+ it { is_expected.to_not violate_rule }
28
+ end
29
+
30
+ context "no license" do
31
+ metadata_file
32
+ it { is_expected.to violate_rule }
23
33
  end
24
34
  end
25
35
  end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe "FC079" do
4
+ context "with a cookbook with a recipe that includes an easy_install_package resource" do
5
+ recipe_file <<-EOF
6
+ easy_install_package "foo" do
7
+ action :install
8
+ end
9
+ EOF
10
+ it { is_expected.to violate_rule }
11
+ end
12
+
13
+ context "with a cookbook with a recipe that doesn't include an easy_install_package resource" do
14
+ recipe_file <<-EOF
15
+ package "foo" do
16
+ action :install
17
+ end
18
+ EOF
19
+ it { is_expected.not_to violate_rule }
20
+ end
21
+ end
@@ -0,0 +1,68 @@
1
+ require "spec_helper"
2
+
3
+ describe "FC080" do
4
+ context "with a cookbook with a recipe that includes a user resource using supports" do
5
+ recipe_file <<-EOF
6
+ user 'betty' do
7
+ action :create
8
+ supports({
9
+ manage_home: true,
10
+ non_unique: true
11
+ })
12
+ end
13
+ EOF
14
+ it { is_expected.to violate_rule }
15
+ end
16
+
17
+ context "with a cookbook with a recipe that includes a user resource using supports w/o parens" do
18
+ recipe_file <<-EOF
19
+ user 'betty' do
20
+ action :create
21
+ supports manage_home: true
22
+ end
23
+ EOF
24
+ it { is_expected.to violate_rule }
25
+ end
26
+
27
+ context "with a cookbook with a recipe that includes a user resource not using supports" do
28
+ recipe_file <<-EOF
29
+ user username do
30
+ shell '/bin/false'
31
+ home deploy_path
32
+ system true
33
+ action :create
34
+ end
35
+ EOF
36
+ it { is_expected.not_to violate_rule }
37
+ end
38
+
39
+ context "with a cookbook with a recipe that includes a resource with supports" do
40
+ recipe_file <<-EOF
41
+ service 'foo' do
42
+ action :start
43
+ supports :restart
44
+ EOF
45
+ it { is_expected.not_to violate_rule }
46
+ end
47
+
48
+ context "with a cookbook with a recipe that includes a user resource and other supports uses" do
49
+ recipe_file <<-EOF
50
+ user 'foo' do
51
+ system true
52
+ action :create
53
+ end
54
+
55
+ def supports(thing)
56
+ puts thing
57
+ end
58
+
59
+ supports('something')
60
+
61
+ service 'foo' do
62
+ supports restart: true, status: true
63
+ action [:enable, :start]
64
+ end
65
+ EOF
66
+ it { is_expected.not_to violate_rule }
67
+ end
68
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe "FC081" do
4
+ context "with a cookbook with a metadata file that depends on partial_search cookbook" do
5
+ metadata_file <<-META
6
+ name 'my_cookbook'
7
+ depends 'partial_search'
8
+ META
9
+ it { is_expected.to violate_rule }
10
+ end
11
+
12
+ context "with a cookbook with a metadata file that depends on partial_search cookbook and others" do
13
+ metadata_file <<-META
14
+ name 'my_cookbook'
15
+ depends 'partial_search'
16
+ depends 'windows'
17
+ META
18
+ it { is_expected.to violate_rule }
19
+ end
20
+
21
+ context "with a cookbook with a metadata file that depends on no cookbooks" do
22
+ metadata_file "name 'my_cookbook'"
23
+ it { is_expected.not_to violate_rule }
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe "FC082" do
4
+ context "with a cookbook with a recipe that sets an attribute with node.set" do
5
+ recipe_file "node.set['foo']['bar'] = baz"
6
+ it { is_expected.to violate_rule }
7
+ end
8
+
9
+ context "with a cookbook with a recipe that sets an attribute with node.set_unless" do
10
+ recipe_file "node.set_unless['foo']['bar'] = baz"
11
+ it { is_expected.to violate_rule }
12
+ end
13
+
14
+ context "with a cookbook with a recipe that sets an attribute with node.normal" do
15
+ recipe_file "node.normal['foo']['bar'] = baz"
16
+ it { is_expected.to_not violate_rule }
17
+ end
18
+
19
+ context "with a cookbook with a recipe that reads a value using node.set" do
20
+ recipe_file "foo = node.set['foo']"
21
+ it { is_expected.to violate_rule }
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe "FC083" do
4
+ context "with a cookbook with a recipe that includes a execute resource specifying path" do
5
+ recipe_file <<-EOF
6
+ execute 'food' do
7
+ path '/some/path'
8
+ command 'build.sh'
9
+ end
10
+ EOF
11
+ it { is_expected.to violate_rule }
12
+ end
13
+
14
+ context "with a cookbook with a recipe that includes a execute resource not specifying path" do
15
+ recipe_file <<-EOF
16
+ execute 'food' do
17
+ command 'build.sh'
18
+ end
19
+ EOF
20
+ it { is_expected.not_to violate_rule }
21
+ end
22
+
23
+ context "with a cookbook with a recipe that doesn't include an execute resource" do
24
+ recipe_file <<-EOF
25
+ directory '/tmp/something' do
26
+ owner 'root'
27
+ group 'root'
28
+ mode '0755'
29
+ action :create
30
+ end
31
+ EOF
32
+ it { is_expected.not_to violate_rule }
33
+ end
34
+ end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe "FC084" do
4
+ context "with a cookbook with a recipe that includes Chef::REST" do
5
+ recipe_file 'Chef::REST::RESTRequest.new(:GET, "http://foo.com", nil).call'
6
+ it { is_expected.to violate_rule }
7
+ end
8
+
9
+ context "with a cookbook with a library that includes Chef::REST" do
10
+ recipe_file <<-EOF
11
+ def response
12
+ response = Chef::REST::RESTRequest.new(:GET, 'http://foo.com', nil).call
13
+ end
14
+ EOF
15
+ it { is_expected.to violate_rule }
16
+ end
17
+
18
+ context "with a cookbook with a LWRP that includes Chef::REST" do
19
+ recipe_file <<-EOF
20
+ action :doit do
21
+ Chef::REST::RESTRequest.new(:GET, 'http://foo.com', nil).call
22
+ end
23
+ EOF
24
+ it { is_expected.to violate_rule }
25
+ end
26
+
27
+ context "with a cookbook with a recipe that includes Chef::ServerAPI" do
28
+ recipe_file "server_conn = Chef::ServerAPI.new"
29
+ it { is_expected.not_to violate_rule }
30
+ end
31
+
32
+ context "with a cookbook with a library that includes Chef::ServerAPI" do
33
+ recipe_file <<-EOF
34
+ def server_conn
35
+ server_conn = Chef::ServerAPI.new
36
+ end
37
+ EOF
38
+ it { is_expected.not_to violate_rule }
39
+ end
40
+
41
+ context "with a cookbook with a LWRP that includes Chef::ServerAPI" do
42
+ recipe_file <<-EOF
43
+ action :doit do
44
+ Chef::ServerAPI.new
45
+ end
46
+ EOF
47
+ it { is_expected.not_to violate_rule }
48
+ end
49
+ end
@@ -0,0 +1,58 @@
1
+ require "spec_helper"
2
+
3
+ describe "FC085" do
4
+ context "with a cookbook with a custom resource that converges with updated_by_last_action" do
5
+ resource_file <<-EOF
6
+ action :create do
7
+ template "/etc/something.conf" do
8
+ notifies :restart, "service[something]"
9
+ end
10
+
11
+ new_resource.updated_by_last_action(true)
12
+ end
13
+ EOF
14
+ it { is_expected.to violate_rule }
15
+ end
16
+
17
+ context "with a cookbook with a LWRP that converges with updated_by_last_action" do
18
+ resource_file <<-EOF
19
+ use_inline_resources
20
+
21
+ action :create do
22
+ template "/etc/something.conf" do
23
+ notifies :restart, "service[something]"
24
+ end
25
+
26
+ new_resource.updated_by_last_action(true)
27
+ end
28
+ EOF
29
+ it { is_expected.to violate_rule }
30
+ end
31
+
32
+ context "with a cookbook with a custom resource that relies on resources for convergence" do
33
+ resource_file <<-EOF
34
+ action :create do
35
+ file "the_file" do
36
+ template "/etc/something.conf" do
37
+ notifies :restart, "service[something]"
38
+ end
39
+ end
40
+ EOF
41
+ it { is_expected.to_not violate_rule }
42
+ end
43
+
44
+ context "with a cookbook with a LWRP that relies on resources for convergence" do
45
+ resource_file <<-EOF
46
+ use_inline_resources
47
+
48
+ action :create do
49
+ file "the_file" do
50
+ template "/etc/something.conf" do
51
+ notifies :restart, "service[something]"
52
+ end
53
+ end
54
+ EOF
55
+ it { is_expected.to_not violate_rule }
56
+ end
57
+
58
+ end
@@ -1,2 +1,3 @@
1
1
  FC069: Ensure standardized license defined in metadata: ./metadata.rb:1
2
2
  FC078: Ensure cookbook shared under an OSI-approved open source license: ./metadata.rb:1
3
+ FC080: User resource uses supports property: ./recipes/default.rb:8
@@ -15,3 +15,6 @@ FC075: Cookbook uses node.save to save partial node data to the chef-server mid-
15
15
  FC075: Cookbook uses node.save to save partial node data to the chef-server mid-run: ./providers/ebs_volume.rb:40
16
16
  FC075: Cookbook uses node.save to save partial node data to the chef-server mid-run: ./providers/ebs_volume.rb:60
17
17
  FC078: Ensure cookbook shared under an OSI-approved open source license: ./metadata.rb:1
18
+ FC082: node.set or node.set_unless used to set node attributes: ./providers/ebs_volume.rb:32
19
+ FC082: node.set or node.set_unless used to set node attributes: ./providers/ebs_volume.rb:39
20
+ FC082: node.set or node.set_unless used to set node attributes: ./providers/ebs_volume.rb:59
@@ -12,3 +12,5 @@ FC066: Ensure chef_version is set in metadata: ./metadata.rb:1
12
12
  FC069: Ensure standardized license defined in metadata: ./metadata.rb:1
13
13
  FC070: Ensure supports metadata defines valid platforms: ./metadata.rb:1
14
14
  FC078: Ensure cookbook shared under an OSI-approved open source license: ./metadata.rb:1
15
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/service.rb:59
16
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/task.rb:49
@@ -35,3 +35,70 @@ FC065: Ensure source_url is set in metadata: ./metadata.rb:1
35
35
  FC066: Ensure chef_version is set in metadata: ./metadata.rb:1
36
36
  FC069: Ensure standardized license defined in metadata: ./metadata.rb:1
37
37
  FC078: Ensure cookbook shared under an OSI-approved open source license: ./metadata.rb:1
38
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:27
39
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:28
40
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:29
41
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:30
42
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:31
43
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:32
44
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:33
45
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:34
46
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:35
47
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:36
48
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:37
49
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:38
50
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/bootstrap_server.rb:39
51
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:25
52
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:26
53
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:27
54
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:28
55
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:29
56
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:30
57
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:31
58
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:32
59
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:33
60
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:34
61
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client.rb:35
62
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:24
63
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:25
64
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:26
65
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:27
66
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:28
67
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:29
68
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:30
69
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:31
70
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:32
71
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:33
72
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/client_service.rb:34
73
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:25
74
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:26
75
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:27
76
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:28
77
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:29
78
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:30
79
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:31
80
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:32
81
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:33
82
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:34
83
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:35
84
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:36
85
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:37
86
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:38
87
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server.rb:39
88
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:23
89
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:24
90
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:25
91
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:26
92
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:27
93
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:28
94
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:29
95
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:30
96
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:31
97
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:32
98
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:33
99
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:34
100
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:35
101
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:36
102
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:37
103
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:38
104
+ FC082: node.set or node.set_unless used to set node attributes: ./recipes/server_proxy.rb:39