microwave 0.1006.31 → 0.1006.32

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1006.31
1
+ 0.1006.32
@@ -45,6 +45,7 @@ class Chef
45
45
 
46
46
  def load_cookbooks
47
47
  load_as(:attribute_filenames, 'attributes', '*.rb')
48
+ load_as(:definition_filenames, 'definitions', '*.rb')
48
49
  load_as(:recipe_filenames, 'recipes', '*.rb')
49
50
  load_as(:library_filenames, 'libraries', '*.rb')
50
51
  load_recursively_as(:template_filenames, "templates", "*")
@@ -22,6 +22,7 @@
22
22
  require 'chef/log'
23
23
  require 'chef/client'
24
24
  require 'chef/node'
25
+ require 'chef/resource_definition_list'
25
26
  require 'chef/recipe'
26
27
  require 'chef/cookbook/file_vendor'
27
28
  require 'chef/checksum'
@@ -91,7 +92,7 @@ class Chef
91
92
  class CookbookVersion
92
93
  include Comparable
93
94
 
94
- COOKBOOK_SEGMENTS = [ :resources, :providers, :recipes, :libraries, :attributes, :files, :templates, :root_files ]
95
+ COOKBOOK_SEGMENTS = [ :resources, :providers, :recipes, :definitions, :libraries, :attributes, :files, :templates, :root_files ]
95
96
 
96
97
  attr_accessor :root_dir
97
98
  attr_accessor :definition_filenames
@@ -342,6 +343,8 @@ class Chef
342
343
  @recipe_filenames
343
344
  when :libraries
344
345
  @library_filenames
346
+ when :definitions
347
+ @definition_filenames
345
348
  when :attributes
346
349
  @attribute_filenames
347
350
  when :files
@@ -588,6 +591,7 @@ class Chef
588
591
  def generate_manifest
589
592
  manifest = Mash.new({
590
593
  :recipes => Array.new,
594
+ :definitions => Array.new,
591
595
  :libraries => Array.new,
592
596
  :attributes => Array.new,
593
597
  :files => Array.new,
@@ -34,27 +34,43 @@ class Chef
34
34
  include Chef::Mixin::Language
35
35
 
36
36
  def method_missing(method_symbol, *args, &block)
37
- # Otherwise, we're rocking the regular resource call route.
38
- method_name = method_symbol.to_s
39
- rname = convert_to_class_name(method_name)
37
+ # If we have a definition that matches, we want to use that instead. This should
38
+ # let you do some really crazy over-riding of "native" types, if you really want
39
+ # to.
40
+ if run_context.definitions.has_key?(method_symbol)
41
+ # This dupes the high level object, but we still need to dup the params
42
+ new_def = run_context.definitions[method_symbol].dup
43
+ new_def.params = new_def.params.dup
44
+ new_def.node = run_context.node
45
+ # This sets up the parameter overrides
46
+ new_def.instance_eval(&block) if block
47
+ new_recipe = Chef::Recipe.new(cookbook_name, @recipe_name, run_context)
48
+ new_recipe.params = new_def.params
49
+ new_recipe.params[:name] = args[0]
50
+ new_recipe.instance_eval(&new_def.recipe)
51
+ else
52
+ # Otherwise, we're rocking the regular resource call route.
53
+ method_name = method_symbol.to_s
54
+ rname = convert_to_class_name(method_name)
40
55
 
41
- super unless Chef::Resource.const_defined?(rname)
42
- raise ArgumentError, "You must supply a name when declaring a #{method_name} resource" unless args.size > 0
56
+ super unless Chef::Resource.const_defined?(rname)
57
+ raise ArgumentError, "You must supply a name when declaring a #{method_name} resource" unless args.size > 0
43
58
 
44
- # If we have a resource like this one, we want to steal its state
45
- args << run_context
46
- resource = Chef::Resource.const_get(rname).new(*args)
47
- resource.load_prior_resource
48
- resource.cookbook_name = cookbook_name
49
- resource.recipe_name = @recipe_name
50
- resource.params = @params
51
- resource.source_line = caller[0]
52
- # Determine whether this resource is being created in the context of an enclosing Provider
53
- resource.enclosing_provider = self.is_a?(Chef::Provider) ? self : nil
54
- resource.instance_eval(&block) if block
59
+ # If we have a resource like this one, we want to steal its state
60
+ args << run_context
61
+ resource = Chef::Resource.const_get(rname).new(*args)
62
+ resource.load_prior_resource
63
+ resource.cookbook_name = cookbook_name
64
+ resource.recipe_name = @recipe_name
65
+ resource.params = @params
66
+ resource.source_line = caller[0]
67
+ # Determine whether this resource is being created in the context of an enclosing Provider
68
+ resource.enclosing_provider = self.is_a?(Chef::Provider) ? self : nil
69
+ resource.instance_eval(&block) if block
55
70
 
56
- run_context.resource_collection.insert(resource)
57
- resource
71
+ run_context.resource_collection.insert(resource)
72
+ resource
73
+ end
58
74
  end
59
75
 
60
76
  end
@@ -0,0 +1,67 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/mixin/from_file'
20
+ require 'chef/mixin/params_validate'
21
+
22
+ class Chef
23
+ class ResourceDefinition
24
+
25
+ include Chef::Mixin::FromFile
26
+ include Chef::Mixin::ParamsValidate
27
+
28
+ attr_accessor :name, :params, :recipe, :node
29
+
30
+ def initialize(node=nil)
31
+ @name = nil
32
+ @params = Hash.new
33
+ @recipe = nil
34
+ @node = node
35
+ end
36
+
37
+ def define(resource_name, prototype_params=nil, &block)
38
+ unless resource_name.kind_of?(Symbol)
39
+ raise ArgumentError, "You must use a symbol when defining a new resource!"
40
+ end
41
+ @name = resource_name
42
+ if prototype_params
43
+ unless prototype_params.kind_of?(Hash)
44
+ raise ArgumentError, "You must pass a hash as the prototype parameters for a definition."
45
+ end
46
+ @params = prototype_params
47
+ end
48
+ if Kernel.block_given?
49
+ @recipe = block
50
+ else
51
+ raise ArgumentError, "You must pass a block to a definition."
52
+ end
53
+ true
54
+ end
55
+
56
+ # When we do the resource definition, we're really just setting new values for
57
+ # the paramaters we prototyped at the top. This method missing is as simple as
58
+ # it gets.
59
+ def method_missing(symbol, *args)
60
+ @params[symbol] = args.length == 1 ? args[0] : args
61
+ end
62
+
63
+ def to_s
64
+ "#{name.to_s}"
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,38 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/mixin/from_file'
20
+ require 'chef/resource_definition'
21
+
22
+ class Chef
23
+ class ResourceDefinitionList
24
+ include Chef::Mixin::FromFile
25
+
26
+ attr_accessor :defines
27
+
28
+ def initialize
29
+ @defines = Hash.new
30
+ end
31
+
32
+ def define(resource_name, prototype_params=nil, &block)
33
+ @defines[resource_name] = ResourceDefinition.new
34
+ @defines[resource_name].define(resource_name, prototype_params, &block)
35
+ true
36
+ end
37
+ end
38
+ end
@@ -31,7 +31,7 @@ class Chef
31
31
  # Used to load the node's recipes after expanding its run list
32
32
  include Chef::Mixin::LanguageIncludeRecipe
33
33
 
34
- attr_reader :node, :cookbook_collection
34
+ attr_reader :node, :cookbook_collection, :definitions
35
35
 
36
36
  # Needs to be settable so deploy can run a resource_collection independent
37
37
  # of any cookbooks.
@@ -46,6 +46,7 @@ class Chef
46
46
  @node = node
47
47
  @cookbook_collection = cookbook_collection
48
48
  @resource_collection = Chef::ResourceCollection.new
49
+ @definitions = Hash.new
49
50
 
50
51
  # TODO: 5/18/2010 cw/timh - See note on Chef::Node's
51
52
  # cookbook_collection attr_accessor
@@ -57,6 +58,7 @@ class Chef
57
58
  load_lwrp_providers
58
59
  load_lwrp_resources
59
60
  load_attributes
61
+ load_resource_definitions
60
62
 
61
63
  # Precendence rules state that roles' attributes come after
62
64
  # cookbooks. Now we've loaded attributes from cookbooks with
@@ -99,6 +101,18 @@ class Chef
99
101
  node.load_attributes
100
102
  end
101
103
 
104
+ def load_resource_definitions
105
+ foreach_cookbook_load_segment(:definitions) do |cookbook_name, filename|
106
+ Chef::Log.debug("Loading cookbook #{cookbook_name}'s definitions from #{filename}")
107
+ resourcelist = Chef::ResourceDefinitionList.new
108
+ resourcelist.from_file(filename)
109
+ definitions.merge!(resourcelist.defines) do |key, oldval, newval|
110
+ Chef::Log.info("Overriding duplicate definition #{key}, new definition found in #{filename}")
111
+ newval
112
+ end
113
+ end
114
+ end
115
+
102
116
  def foreach_cookbook_load_segment(segment, &block)
103
117
  cookbook_collection.each do |cookbook_name, cookbook|
104
118
  segment_filenames = cookbook.segment_filenames(segment)
@@ -88,6 +88,7 @@ def create_cookbook(dir)
88
88
  puts "** Creating cookbook #{ENV["COOKBOOK"]}"
89
89
  sh "mkdir -p #{File.join(dir, ENV["COOKBOOK"], "attributes")}"
90
90
  sh "mkdir -p #{File.join(dir, ENV["COOKBOOK"], "recipes")}"
91
+ sh "mkdir -p #{File.join(dir, ENV["COOKBOOK"], "definitions")}"
91
92
  sh "mkdir -p #{File.join(dir, ENV["COOKBOOK"], "libraries")}"
92
93
  sh "mkdir -p #{File.join(dir, ENV["COOKBOOK"], "resources")}"
93
94
  sh "mkdir -p #{File.join(dir, ENV["COOKBOOK"], "providers")}"
metadata CHANGED
@@ -1,203 +1,208 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: microwave
3
- version: !ruby/object:Gem::Version
4
- hash: 3993
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 1006
9
- - 31
10
- version: 0.1006.31
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1006.32
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Tom Bombadil
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-09-09 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-09-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: mixlib-config
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 1
32
- - 1
33
- - 2
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
34
21
  version: 1.1.2
35
22
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: mixlib-cli
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: mixlib-cli
32
+ requirement: !ruby/object:Gem::Requirement
41
33
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 19
46
- segments:
47
- - 1
48
- - 1
49
- - 0
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
50
37
  version: 1.1.0
51
38
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: mixlib-log
55
39
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: mixlib-log
48
+ requirement: !ruby/object:Gem::Requirement
57
49
  none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 27
62
- segments:
63
- - 1
64
- - 3
65
- - 0
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
66
53
  version: 1.3.0
67
54
  type: :runtime
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: json
71
55
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
73
57
  none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 15
78
- segments:
79
- - 1
80
- - 4
81
- - 4
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: json
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
82
69
  version: 1.4.4
83
70
  - - <=
84
- - !ruby/object:Gem::Version
85
- hash: 11
86
- segments:
87
- - 1
88
- - 5
89
- - 4
71
+ - !ruby/object:Gem::Version
90
72
  version: 1.5.4
91
73
  type: :runtime
92
- version_requirements: *id004
93
- - !ruby/object:Gem::Dependency
94
- name: hike
95
74
  prerelease: false
96
- requirement: &id005 !ruby/object:Gem::Requirement
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 1.4.4
81
+ - - <=
82
+ - !ruby/object:Gem::Version
83
+ version: 1.5.4
84
+ - !ruby/object:Gem::Dependency
85
+ name: hike
86
+ requirement: !ruby/object:Gem::Requirement
97
87
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
105
92
  type: :runtime
106
- version_requirements: *id005
107
- - !ruby/object:Gem::Dependency
108
- name: surface
109
93
  prerelease: false
110
- requirement: &id006 !ruby/object:Gem::Requirement
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: surface
102
+ requirement: !ruby/object:Gem::Requirement
111
103
  none: false
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- hash: 3
116
- segments:
117
- - 0
118
- version: "0"
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
119
108
  type: :runtime
120
- version_requirements: *id006
121
- - !ruby/object:Gem::Dependency
122
- name: erubis
123
109
  prerelease: false
124
- requirement: &id007 !ruby/object:Gem::Requirement
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ - !ruby/object:Gem::Dependency
117
+ name: erubis
118
+ requirement: !ruby/object:Gem::Requirement
125
119
  none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- hash: 3
130
- segments:
131
- - 0
132
- version: "0"
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
133
124
  type: :runtime
134
- version_requirements: *id007
135
- - !ruby/object:Gem::Dependency
136
- name: moneta
137
125
  prerelease: false
138
- requirement: &id008 !ruby/object:Gem::Requirement
126
+ version_requirements: !ruby/object:Gem::Requirement
139
127
  none: false
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- hash: 3
144
- segments:
145
- - 0
146
- version: "0"
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: moneta
134
+ requirement: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
147
140
  type: :runtime
148
- version_requirements: *id008
149
- - !ruby/object:Gem::Dependency
150
- name: uuidtools
151
141
  prerelease: false
152
- requirement: &id009 !ruby/object:Gem::Requirement
142
+ version_requirements: !ruby/object:Gem::Requirement
153
143
  none: false
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- hash: 3
158
- segments:
159
- - 0
160
- version: "0"
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ - !ruby/object:Gem::Dependency
149
+ name: uuidtools
150
+ requirement: !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
161
156
  type: :runtime
162
- version_requirements: *id009
163
- - !ruby/object:Gem::Dependency
164
- name: sdoc
165
157
  prerelease: false
166
- requirement: &id010 !ruby/object:Gem::Requirement
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ - !ruby/object:Gem::Dependency
165
+ name: sdoc
166
+ requirement: !ruby/object:Gem::Requirement
167
167
  none: false
168
- requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- hash: 3
172
- segments:
173
- - 0
174
- version: "0"
168
+ requirements:
169
+ - - ! '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
175
172
  type: :runtime
176
- version_requirements: *id010
177
- - !ruby/object:Gem::Dependency
178
- name: fast_xs
179
173
  prerelease: false
180
- requirement: &id011 !ruby/object:Gem::Requirement
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ none: false
176
+ requirements:
177
+ - - ! '>='
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ - !ruby/object:Gem::Dependency
181
+ name: fast_xs
182
+ requirement: !ruby/object:Gem::Requirement
181
183
  none: false
182
- requirements:
183
- - - ">="
184
- - !ruby/object:Gem::Version
185
- hash: 3
186
- segments:
187
- - 0
188
- version: "0"
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
189
188
  type: :runtime
190
- version_requirements: *id011
191
- description: A systems integration framework, built to bring the benefits of configuration management to your entire infrastructure, forked from Opscode Chef
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ none: false
192
+ requirements:
193
+ - - ! '>='
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ description: A systems integration framework, built to bring the benefits of configuration
197
+ management to your entire infrastructure, forked from Opscode Chef
192
198
  email: amanibhavam@destructuring.org
193
- executables:
199
+ executables:
194
200
  - chef-solo
195
201
  extensions: []
196
-
197
- extra_rdoc_files:
202
+ extra_rdoc_files:
198
203
  - README.rdoc
199
204
  - LICENSE
200
- files:
205
+ files:
201
206
  - LICENSE
202
207
  - README.rdoc
203
208
  - VERSION
@@ -282,6 +287,8 @@ files:
282
287
  - lib/chef/resource.rb
283
288
  - lib/chef/resource_collection/stepable_iterator.rb
284
289
  - lib/chef/resource_collection.rb
290
+ - lib/chef/resource_definition.rb
291
+ - lib/chef/resource_definition_list.rb
285
292
  - lib/chef/resources.rb
286
293
  - lib/chef/role.rb
287
294
  - lib/chef/run_context.rb
@@ -302,39 +309,29 @@ files:
302
309
  - lib/chef/version_constraint.rb
303
310
  - lib/chef.rb
304
311
  - bin/chef-solo
305
- has_rdoc: true
306
312
  homepage: https://github.com/HeSYINUvSBZfxqA/microwave
307
313
  licenses: []
308
-
309
314
  post_install_message:
310
315
  rdoc_options: []
311
-
312
- require_paths:
316
+ require_paths:
313
317
  - lib
314
- required_ruby_version: !ruby/object:Gem::Requirement
318
+ required_ruby_version: !ruby/object:Gem::Requirement
315
319
  none: false
316
- requirements:
317
- - - ">="
318
- - !ruby/object:Gem::Version
319
- hash: 3
320
- segments:
321
- - 0
322
- version: "0"
323
- required_rubygems_version: !ruby/object:Gem::Requirement
320
+ requirements:
321
+ - - ! '>='
322
+ - !ruby/object:Gem::Version
323
+ version: '0'
324
+ required_rubygems_version: !ruby/object:Gem::Requirement
324
325
  none: false
325
- requirements:
326
- - - ">="
327
- - !ruby/object:Gem::Version
328
- hash: 3
329
- segments:
330
- - 0
331
- version: "0"
326
+ requirements:
327
+ - - ! '>='
328
+ - !ruby/object:Gem::Version
329
+ version: '0'
332
330
  requirements: []
333
-
334
331
  rubyforge_project:
335
- rubygems_version: 1.3.7
332
+ rubygems_version: 1.8.24
336
333
  signing_key:
337
334
  specification_version: 3
338
- summary: A systems integration framework, built to bring the benefits of configuration management to your entire infrastructure, forked from Opscode Chef
335
+ summary: A systems integration framework, built to bring the benefits of configuration
336
+ management to your entire infrastructure, forked from Opscode Chef
339
337
  test_files: []
340
-