chef 12.15.19-universal-mingw32 → 12.16.42-universal-mingw32

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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/VERSION +1 -1
  4. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +3 -1
  5. data/acceptance/Gemfile.lock +14 -14
  6. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +3 -11
  7. data/distro/common/html/knife_bootstrap.html +1 -1
  8. data/distro/common/man/man1/README.md +2 -2
  9. data/distro/common/man/man1/knife-client.1 +1 -1
  10. data/lib/chef/application.rb +7 -15
  11. data/lib/chef/application/client.rb +2 -2
  12. data/lib/chef/application/solo.rb +1 -1
  13. data/lib/chef/chef_class.rb +1 -0
  14. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +3 -7
  15. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +1 -1
  16. data/lib/chef/data_collector.rb +83 -9
  17. data/lib/chef/data_collector/messages.rb +2 -1
  18. data/lib/chef/dsl/core.rb +1 -1
  19. data/lib/chef/dsl/declare_resource.rb +10 -4
  20. data/lib/chef/dsl/method_missing.rb +1 -1
  21. data/lib/chef/dsl/recipe.rb +1 -1
  22. data/lib/chef/dsl/universal.rb +1 -1
  23. data/lib/chef/event_dispatch/base.rb +3 -0
  24. data/lib/chef/http.rb +3 -4
  25. data/lib/chef/knife.rb +20 -2
  26. data/lib/chef/knife/core/generic_presenter.rb +18 -4
  27. data/lib/chef/knife/node_show.rb +0 -5
  28. data/lib/chef/knife/osc_user_show.rb +0 -1
  29. data/lib/chef/knife/ssl_fetch.rb +9 -5
  30. data/lib/chef/mixin/powershell_out.rb +1 -1
  31. data/lib/chef/mixin/shell_out.rb +1 -1
  32. data/lib/chef/node.rb +1 -5
  33. data/lib/chef/node/attribute.rb +70 -98
  34. data/lib/chef/node/attribute_collections.rb +28 -19
  35. data/lib/chef/node/common_api.rb +0 -6
  36. data/lib/chef/node/immutable_collections.rb +16 -79
  37. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -0
  38. data/lib/chef/node/mixin/immutablize_array.rb +67 -0
  39. data/lib/chef/node/mixin/immutablize_hash.rb +54 -0
  40. data/lib/chef/node/mixin/state_tracking.rb +93 -0
  41. data/lib/chef/property.rb +4 -4
  42. data/lib/chef/provider/cron.rb +1 -1
  43. data/lib/chef/provider/group/suse.rb +23 -4
  44. data/lib/chef/provider/package.rb +43 -5
  45. data/lib/chef/provider/package/apt.rb +20 -0
  46. data/lib/chef/provider/package/windows/exe.rb +4 -3
  47. data/lib/chef/provider/package/windows/msi.rb +4 -3
  48. data/lib/chef/provider/package/yum.rb +20 -0
  49. data/lib/chef/provider/package/zypper.rb +20 -0
  50. data/lib/chef/provider/ruby_block.rb +1 -1
  51. data/lib/chef/provider/service/upstart.rb +25 -9
  52. data/lib/chef/provider/user.rb +4 -6
  53. data/lib/chef/provider/user/dscl.rb +8 -3
  54. data/lib/chef/provider/user/solaris.rb +5 -12
  55. data/lib/chef/resource.rb +19 -0
  56. data/lib/chef/resource/file.rb +1 -1
  57. data/lib/chef/resource/package.rb +1 -1
  58. data/lib/chef/resource/scm.rb +1 -7
  59. data/lib/chef/resource/yum_repository.rb +1 -1
  60. data/lib/chef/rest.rb +1 -0
  61. data/lib/chef/run_context.rb +12 -0
  62. data/lib/chef/version.rb +1 -1
  63. data/spec/data/trusted_certs/example_no_cn.crt +36 -0
  64. data/spec/functional/resource/group_spec.rb +1 -0
  65. data/spec/functional/resource/user/useradd_spec.rb +4 -2
  66. data/spec/integration/knife/data_bag_create_spec.rb +0 -3
  67. data/spec/integration/knife/environment_show_spec.rb +24 -4
  68. data/spec/integration/knife/node_environment_set_spec.rb +4 -1
  69. data/spec/integration/recipes/accumulator_spec.rb +232 -0
  70. data/spec/integration/recipes/resource_action_spec.rb +1 -1
  71. data/spec/spec_helper.rb +2 -2
  72. data/spec/support/shared/context/client.rb +12 -3
  73. data/spec/support/shared/integration/app_server_support.rb +1 -1
  74. data/spec/support/shared/integration/knife_support.rb +4 -1
  75. data/spec/unit/data_collector/messages_spec.rb +2 -0
  76. data/spec/unit/data_collector_spec.rb +158 -21
  77. data/spec/unit/http_spec.rb +1 -1
  78. data/spec/unit/knife/core/gem_glob_loader_spec.rb +1 -1
  79. data/spec/unit/knife/core/ui_spec.rb +10 -0
  80. data/spec/unit/knife/ssl_fetch_spec.rb +38 -0
  81. data/spec/unit/knife_spec.rb +31 -0
  82. data/spec/unit/mixin/powershell_out_spec.rb +25 -1
  83. data/spec/unit/node/attribute_spec.rb +46 -1
  84. data/spec/unit/node/vivid_mash_spec.rb +27 -89
  85. data/spec/unit/node_spec.rb +134 -3
  86. data/spec/unit/provider/deploy_spec.rb +1 -1
  87. data/spec/unit/provider/group/suse_spec.rb +90 -0
  88. data/spec/unit/provider/package/apt_spec.rb +22 -0
  89. data/spec/unit/provider/package/windows/msi_spec.rb +13 -4
  90. data/spec/unit/provider/package/windows_spec.rb +3 -3
  91. data/spec/unit/provider/package/yum_spec.rb +18 -0
  92. data/spec/unit/provider/package/zypper_spec.rb +64 -0
  93. data/spec/unit/provider/package_spec.rb +58 -0
  94. data/spec/unit/provider/remote_file/content_spec.rb +1 -1
  95. data/spec/unit/provider/service/upstart_service_spec.rb +13 -6
  96. data/spec/unit/provider/user/solaris_spec.rb +36 -9
  97. data/spec/unit/provider/user_spec.rb +6 -0
  98. data/spec/unit/resource/apt_repository_spec.rb +1 -1
  99. metadata +12 -5
@@ -17,6 +17,7 @@
17
17
  #
18
18
 
19
19
  require "chef/node/common_api"
20
+ require "chef/node/mixin/state_tracking"
20
21
 
21
22
  class Chef
22
23
  class Node
@@ -33,7 +34,6 @@ class Chef
33
34
  :compact!,
34
35
  :default=,
35
36
  :default_proc=,
36
- :delete,
37
37
  :delete_at,
38
38
  :delete_if,
39
39
  :fill,
@@ -63,15 +63,17 @@ class Chef
63
63
  MUTATOR_METHODS.each do |mutator|
64
64
  define_method(mutator) do |*args, &block|
65
65
  ret = super(*args, &block)
66
- root.reset_cache(root.top_level_breadcrumb)
66
+ send_reset_cache
67
67
  ret
68
68
  end
69
69
  end
70
70
 
71
- attr_reader :root
71
+ def delete(key, &block)
72
+ send_reset_cache(__path__, key)
73
+ super
74
+ end
72
75
 
73
- def initialize(root, data)
74
- @root = root
76
+ def initialize(data = [])
75
77
  super(data)
76
78
  map! { |e| convert_value(e) }
77
79
  end
@@ -96,14 +98,20 @@ class Chef
96
98
  when AttrArray
97
99
  value
98
100
  when Hash
99
- VividMash.new(root, value)
101
+ VividMash.new(value, __root__, __node__, __precedence__)
100
102
  when Array
101
- AttrArray.new(root, value)
103
+ AttrArray.new(value, __root__, __node__, __precedence__)
102
104
  else
103
105
  value
104
106
  end
105
107
  end
106
108
 
109
+ # needed for __path__
110
+ def convert_key(key)
111
+ key
112
+ end
113
+
114
+ prepend Chef::Node::Mixin::StateTracking
107
115
  end
108
116
 
109
117
  # == VividMash
@@ -117,8 +125,6 @@ class Chef
117
125
  # #fetch, work as normal).
118
126
  # * attr_accessor style element set and get are supported via method_missing
119
127
  class VividMash < Mash
120
- attr_reader :root
121
-
122
128
  include CommonAPI
123
129
 
124
130
  # Methods that mutate a VividMash. Each of them is overridden so that it
@@ -126,7 +132,6 @@ class Chef
126
132
  # object.
127
133
  MUTATOR_METHODS = [
128
134
  :clear,
129
- :delete,
130
135
  :delete_if,
131
136
  :keep_if,
132
137
  :merge!,
@@ -140,23 +145,27 @@ class Chef
140
145
  # For all of the mutating methods on Mash, override them so that they
141
146
  # also invalidate the cached `merged_attributes` on the root Attribute
142
147
  # object.
148
+
149
+ def delete(key, &block)
150
+ send_reset_cache(__path__, key)
151
+ super
152
+ end
153
+
143
154
  MUTATOR_METHODS.each do |mutator|
144
155
  define_method(mutator) do |*args, &block|
145
- root.reset_cache(root.top_level_breadcrumb)
156
+ send_reset_cache
146
157
  super(*args, &block)
147
158
  end
148
159
  end
149
160
 
150
- def initialize(root, data = {})
151
- @root = root
161
+ def initialize(data = {})
152
162
  super(data)
153
163
  end
154
164
 
155
165
  def [](key)
156
- root.top_level_breadcrumb ||= key
157
166
  value = super
158
167
  if !key?(key)
159
- value = self.class.new(root)
168
+ value = self.class.new({}, __root__)
160
169
  self[key] = value
161
170
  else
162
171
  value
@@ -164,9 +173,8 @@ class Chef
164
173
  end
165
174
 
166
175
  def []=(key, value)
167
- root.top_level_breadcrumb ||= key
168
176
  ret = super
169
- root.reset_cache(root.top_level_breadcrumb)
177
+ send_reset_cache(__path__, key)
170
178
  ret
171
179
  end
172
180
 
@@ -205,9 +213,9 @@ class Chef
205
213
  when AttrArray
206
214
  value
207
215
  when Hash
208
- VividMash.new(root, value)
216
+ VividMash.new(value, __root__, __node__, __precedence__)
209
217
  when Array
210
- AttrArray.new(root, value)
218
+ AttrArray.new(value, __root__, __node__, __precedence__)
211
219
  else
212
220
  value
213
221
  end
@@ -217,6 +225,7 @@ class Chef
217
225
  Mash.new(self)
218
226
  end
219
227
 
228
+ prepend Chef::Node::Mixin::StateTracking
220
229
  end
221
230
  end
222
231
  end
@@ -32,7 +32,6 @@ class Chef
32
32
  # - autovivifying / autoreplacing writer
33
33
  # - non-container-ey intermediate objects are replaced with hashes
34
34
  def write(*args, &block)
35
- root.top_level_breadcrumb = nil if respond_to?(:root)
36
35
  value = block_given? ? yield : args.pop
37
36
  last = args.pop
38
37
  prev_memo = prev_key = nil
@@ -56,7 +55,6 @@ class Chef
56
55
  # something that is not a container ("schema violation" issues).
57
56
  #
58
57
  def write!(*args, &block)
59
- root.top_level_breadcrumb = nil if respond_to?(:root)
60
58
  value = block_given? ? yield : args.pop
61
59
  last = args.pop
62
60
  obj = args.inject(self) do |memo, key|
@@ -71,7 +69,6 @@ class Chef
71
69
 
72
70
  # return true or false based on if the attribute exists
73
71
  def exist?(*path)
74
- root.top_level_breadcrumb = nil if respond_to?(:root)
75
72
  path.inject(self) do |memo, key|
76
73
  return false unless valid_container?(memo, key)
77
74
  if memo.is_a?(Hash)
@@ -103,7 +100,6 @@ class Chef
103
100
  # non-autovivifying reader that throws an exception if the attribute does not exist
104
101
  def read!(*path)
105
102
  raise Chef::Exceptions::NoSuchAttribute unless exist?(*path)
106
- root.top_level_breadcrumb = nil if respond_to?(:root)
107
103
  path.inject(self) do |memo, key|
108
104
  memo[key]
109
105
  end
@@ -112,10 +108,8 @@ class Chef
112
108
  # FIXME:(?) does anyone really like the autovivifying reader that we have and wants the same behavior? readers that write? ugh...
113
109
 
114
110
  def unlink(*path, last)
115
- root.top_level_breadcrumb = nil if respond_to?(:root)
116
111
  hash = path.empty? ? self : read(*path)
117
112
  return nil unless hash.is_a?(Hash) || hash.is_a?(Array)
118
- root.top_level_breadcrumb ||= last
119
113
  hash.delete(last)
120
114
  end
121
115
 
@@ -16,6 +16,9 @@
16
16
  #
17
17
 
18
18
  require "chef/node/common_api"
19
+ require "chef/node/mixin/state_tracking"
20
+ require "chef/node/mixin/immutablize_array"
21
+ require "chef/node/mixin/immutablize_hash"
19
22
 
20
23
  class Chef
21
24
  class Node
@@ -24,9 +27,9 @@ class Chef
24
27
  def immutablize(value)
25
28
  case value
26
29
  when Hash
27
- ImmutableMash.new(value)
30
+ ImmutableMash.new(value, __root__, __node__, __precedence__)
28
31
  when Array
29
- ImmutableArray.new(value)
32
+ ImmutableArray.new(value, __root__, __node__, __precedence__)
30
33
  else
31
34
  value
32
35
  end
@@ -49,55 +52,12 @@ class Chef
49
52
  alias :internal_push :<<
50
53
  private :internal_push
51
54
 
52
- # A list of methods that mutate Array. Each of these is overridden to
53
- # raise an error, making this instances of this class more or less
54
- # immutable.
55
- DISALLOWED_MUTATOR_METHODS = [
56
- :<<,
57
- :[]=,
58
- :clear,
59
- :collect!,
60
- :compact!,
61
- :default=,
62
- :default_proc=,
63
- :delete,
64
- :delete_at,
65
- :delete_if,
66
- :fill,
67
- :flatten!,
68
- :insert,
69
- :keep_if,
70
- :map!,
71
- :merge!,
72
- :pop,
73
- :push,
74
- :update,
75
- :reject!,
76
- :reverse!,
77
- :replace,
78
- :select!,
79
- :shift,
80
- :slice!,
81
- :sort!,
82
- :sort_by!,
83
- :uniq!,
84
- :unshift,
85
- ]
86
-
87
- def initialize(array_data)
55
+ def initialize(array_data = [])
88
56
  array_data.each do |value|
89
57
  internal_push(immutablize(value))
90
58
  end
91
59
  end
92
60
 
93
- # Redefine all of the methods that mutate a Hash to raise an error when called.
94
- # This is the magic that makes this object "Immutable"
95
- DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name|
96
- define_method(mutator_method_name) do |*args, &block|
97
- raise Exceptions::ImmutableAttributeModification
98
- end
99
- end
100
-
101
61
  # For elements like Fixnums, true, nil...
102
62
  def safe_dup(e)
103
63
  e.dup
@@ -125,6 +85,13 @@ class Chef
125
85
  a
126
86
  end
127
87
 
88
+ # for consistency's sake -- integers 'converted' to integers
89
+ def convert_key(key)
90
+ key
91
+ end
92
+
93
+ prepend Chef::Node::Mixin::StateTracking
94
+ prepend Chef::Node::Mixin::ImmutablizeArray
128
95
  end
129
96
 
130
97
  # == ImmutableMash
@@ -140,36 +107,13 @@ class Chef
140
107
  # it is stale.
141
108
  # * Values can be accessed in attr_reader-like fashion via method_missing.
142
109
  class ImmutableMash < Mash
143
-
144
110
  include Immutablize
145
111
  include CommonAPI
146
112
 
147
113
  alias :internal_set :[]=
148
114
  private :internal_set
149
115
 
150
- DISALLOWED_MUTATOR_METHODS = [
151
- :[]=,
152
- :clear,
153
- :collect!,
154
- :default=,
155
- :default_proc=,
156
- :delete,
157
- :delete_if,
158
- :keep_if,
159
- :map!,
160
- :merge!,
161
- :update,
162
- :reject!,
163
- :replace,
164
- :select!,
165
- :shift,
166
- :write,
167
- :write!,
168
- :unlink,
169
- :unlink!,
170
- ]
171
-
172
- def initialize(mash_data)
116
+ def initialize(mash_data = {})
173
117
  mash_data.each do |key, value|
174
118
  internal_set(key, immutablize(value))
175
119
  end
@@ -181,14 +125,6 @@ class Chef
181
125
 
182
126
  alias :attribute? :has_key?
183
127
 
184
- # Redefine all of the methods that mutate a Hash to raise an error when called.
185
- # This is the magic that makes this object "Immutable"
186
- DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name|
187
- define_method(mutator_method_name) do |*args, &block|
188
- raise Exceptions::ImmutableAttributeModification
189
- end
190
- end
191
-
192
128
  def method_missing(symbol, *args)
193
129
  if symbol == :to_ary
194
130
  super
@@ -238,7 +174,8 @@ class Chef
238
174
  h
239
175
  end
240
176
 
177
+ prepend Chef::Node::Mixin::StateTracking
178
+ prepend Chef::Node::Mixin::ImmutablizeHash
241
179
  end
242
-
243
180
  end
244
181
  end
@@ -0,0 +1,61 @@
1
+ #--
2
+ # Copyright:: Copyright 2016, Chef Software, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ class Chef
19
+ class Node
20
+ module Mixin
21
+ module DeepMergeCache
22
+ # Cache of deep merged values by top-level key. This is a simple hash which has keys that are the
23
+ # top-level keys of the node object, and we save the computed deep-merge for that key here. There is
24
+ # no cache of subtrees.
25
+ attr_accessor :deep_merge_cache
26
+
27
+ def initialize
28
+ @merged_attributes = nil
29
+ @combined_override = nil
30
+ @combined_default = nil
31
+ @deep_merge_cache = {}
32
+ end
33
+
34
+ # Invalidate a key in the deep_merge_cache. If called with nil, or no arg, this will invalidate
35
+ # the entire deep_merge cache. In the case of the user doing node.default['foo']['bar']['baz']=
36
+ # that eventually results in a call to reset_cache('foo') here. A node.default=hash_thing call
37
+ # must invalidate the entire cache and re-deep-merge the entire node object.
38
+ def reset_cache(path = nil)
39
+ if path.nil?
40
+ deep_merge_cache.clear
41
+ else
42
+ deep_merge_cache.delete(path.to_s)
43
+ end
44
+ end
45
+
46
+ alias :reset :reset_cache
47
+
48
+ def [](key)
49
+ if deep_merge_cache.has_key?(key.to_s)
50
+ # return the cache of the deep merged values by top-level key
51
+ deep_merge_cache[key.to_s]
52
+ else
53
+ # save all the work of computing node[key]
54
+ deep_merge_cache[key.to_s] = merged_attributes(key)
55
+ end
56
+ end
57
+
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,67 @@
1
+ #--
2
+ # Copyright:: Copyright 2016, Chef Software, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ class Chef
19
+ class Node
20
+ module Mixin
21
+ module ImmutablizeArray
22
+ # A list of methods that mutate Array. Each of these is overridden to
23
+ # raise an error, making this instances of this class more or less
24
+ # immutable.
25
+ DISALLOWED_MUTATOR_METHODS = [
26
+ :<<,
27
+ :[]=,
28
+ :clear,
29
+ :collect!,
30
+ :compact!,
31
+ :default=,
32
+ :default_proc=,
33
+ :delete,
34
+ :delete_at,
35
+ :delete_if,
36
+ :fill,
37
+ :flatten!,
38
+ :insert,
39
+ :keep_if,
40
+ :map!,
41
+ :merge!,
42
+ :pop,
43
+ :push,
44
+ :update,
45
+ :reject!,
46
+ :reverse!,
47
+ :replace,
48
+ :select!,
49
+ :shift,
50
+ :slice!,
51
+ :sort!,
52
+ :sort_by!,
53
+ :uniq!,
54
+ :unshift,
55
+ ]
56
+
57
+ # Redefine all of the methods that mutate a Hash to raise an error when called.
58
+ # This is the magic that makes this object "Immutable"
59
+ DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name|
60
+ define_method(mutator_method_name) do |*args, &block|
61
+ raise Exceptions::ImmutableAttributeModification
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end