chef 0.9.0.rc02 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -36,6 +36,12 @@ class Chef
36
36
  # The time the chef run ended
37
37
  def_delegator :@run_status, :end_time
38
38
 
39
+ ##
40
+ # :method: elapsed_time
41
+ #
42
+ # The time elapsed between the start and finish of the chef run
43
+ def_delegator :@run_status, :elapsed_time
44
+
39
45
  ##
40
46
  # :method: run_context
41
47
  #
@@ -195,7 +195,9 @@ class Chef
195
195
  config[:attribute].split(".").each do |attr|
196
196
  if data.respond_to?(:[])
197
197
  data = data[attr]
198
- else
198
+ elsif data.nil?
199
+ nil # don't get no method error on nil
200
+ else data.respond_to?(attr.to_sym)
199
201
  data = data.send(attr.to_sym)
200
202
  end
201
203
  end
@@ -37,9 +37,17 @@ class Chef
37
37
 
38
38
  banner "Sub-Command: client create CLIENT (options)"
39
39
 
40
- def run
40
+ def run
41
+ @client_name = @name_args[0]
42
+
43
+ if @client_name.nil?
44
+ show_usage
45
+ Chef::Log.fatal("You must specify a client name")
46
+ exit 1
47
+ end
48
+
41
49
  client = Chef::ApiClient.new
42
- client.name(@name_args[0])
50
+ client.name(@client_name)
43
51
  client.admin(config[:admin])
44
52
 
45
53
  output = edit_data(client)
@@ -27,7 +27,15 @@ class Chef
27
27
  banner "Sub-Command: client delete CLIENT (options)"
28
28
 
29
29
  def run
30
- delete_object(Chef::ApiClient, @name_args[0])
30
+ @client_name = @name_args[0]
31
+
32
+ if @client_name.nil?
33
+ show_usage
34
+ Chef::Log.fatal("You must specify a client name")
35
+ exit 1
36
+ end
37
+
38
+ delete_object(Chef::ApiClient, @client_name)
31
39
  end
32
40
 
33
41
  end
@@ -26,8 +26,16 @@ class Chef
26
26
 
27
27
  banner "Sub-Command: client edit CLIENT (options)"
28
28
 
29
- def run
30
- edit_object(Chef::ApiClient, @name_args[0])
29
+ def run
30
+ @client_name = @name_args[0]
31
+
32
+ if @client_name.nil?
33
+ show_usage
34
+ Chef::Log.fatal("You must specify a client name")
35
+ exit 1
36
+ end
37
+
38
+ edit_object(Chef::ApiClient, @client_name)
31
39
  end
32
40
  end
33
41
  end
@@ -31,8 +31,16 @@ class Chef
31
31
  :long => "--file FILE",
32
32
  :description => "Write the key to a file"
33
33
 
34
- def run
35
- client = Chef::ApiClient.load(@name_args[0])
34
+ def run
35
+ @client_name = @name_args[0]
36
+
37
+ if @client_name.nil?
38
+ show_usage
39
+ Chef::Log.fatal("You must specify a client name")
40
+ exit 1
41
+ end
42
+
43
+ client = Chef::ApiClient.load(@client_name)
36
44
  key = client.save(true)
37
45
  if config[:file]
38
46
  File.open(config[:file], "w") do |f|
@@ -31,8 +31,16 @@ class Chef
31
31
  :long => "--attribute ATTR",
32
32
  :description => "Show only one attribute"
33
33
 
34
- def run
35
- client = Chef::ApiClient.load(@name_args[0])
34
+ def run
35
+ @client_name = @name_args[0]
36
+
37
+ if @client_name.nil?
38
+ show_usage
39
+ Chef::Log.fatal("You must specify a client name")
40
+ exit 1
41
+ end
42
+
43
+ client = Chef::ApiClient.load(@client_name)
36
44
  output(format_for_display(client))
37
45
  end
38
46
 
@@ -0,0 +1,50 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class ConfigureClient < Knife
24
+ banner "Sub-Command: configure client DIRECTORY"
25
+
26
+ def run
27
+ unless @config_dir = @name_args[0]
28
+ Chef::Log.fatal "You must provide the directory to put the files in"
29
+ show_usage
30
+ exit(1)
31
+ end
32
+
33
+ Chef::Log.info("Creating client configuration")
34
+ system("mkdir -p #{@config_dir}")
35
+ Chef::Log.info("Writing client.rb")
36
+ File.open(File.join(@config_dir, "client.rb"), "w") do |file|
37
+ file.puts('log_level :info')
38
+ file.puts('log_location STDOUT')
39
+ file.puts("chef_server_url '#{Chef::Config[:chef_server_url]}'")
40
+ file.puts("validation_client_name '#{Chef::Config[:validation_client_name]}'")
41
+ end
42
+ Chef::Log.info("Writing validation.pem")
43
+ system("cp #{Chef::Config[:validation_key]} #{File.join(@config_dir, 'validation.pem')}")
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -74,6 +74,10 @@ class Chef
74
74
  output(rest.get_rest("cookbooks/#{@name_args[0]}/#{cookbook_version}"))
75
75
  when 1 # We are showing the cookbook versions
76
76
  output(rest.get_rest("cookbooks/#{@name_args[0]}"))
77
+ when 0
78
+ show_usage
79
+ Chef::Log.fatal("You must specify a cookbook name")
80
+ exit 1
77
81
  end
78
82
  end
79
83
 
@@ -31,13 +31,20 @@ class Chef
31
31
  :boolean => true,
32
32
  :description => "Grab dependencies automatically"
33
33
 
34
+ option :cookbook_path,
35
+ :short => "-o PATH:PATH",
36
+ :long => "--cookbook-path PATH:PATH",
37
+ :description => "A colon-separated path to look for cookbooks in",
38
+ :proc => lambda { |o| o.split(":") }
39
+
34
40
  def run
35
41
  if config[:cookbook_path]
36
- vendor_path = File.expand_path(File.join(config[:cookbook_path].first))
42
+ Chef::Config[:cookbook_path] = config[:cookbook_path]
37
43
  else
38
- Chef::Log.warn("cookbook path is not configured in your knife.rb, using the current directory for the cookbook repo")
39
- vendor_path = Dir.pwd
44
+ config[:cookbook_path] = Chef::Config[:cookbook_path]
40
45
  end
46
+
47
+ vendor_path = File.expand_path(File.join(config[:cookbook_path].first))
41
48
  cookbook_path = File.join(vendor_path, name_args[0])
42
49
  upstream_file = File.join(vendor_path, "#{name_args[0]}.tar.gz")
43
50
  branch_name = "chef-vendor-#{name_args[0]}"
@@ -45,10 +45,10 @@ class Chef
45
45
  config[:cookbook_path] = Chef::Config[:cookbook_path]
46
46
  end
47
47
 
48
- if config[:all]
48
+ if config[:all]
49
49
  cl = Chef::CookbookLoader.new
50
- cl.each do |cookbook|
51
- test_cookbook(cookbook.name.to_s)
50
+ cl.each do |key, cookbook|
51
+ test_cookbook(key)
52
52
  end
53
53
  else
54
54
  @name_args.each do |cb|
@@ -60,42 +60,21 @@ class Chef
60
60
  def test_cookbook(cookbook)
61
61
  Chef::Log.info("Running syntax check on #{cookbook}")
62
62
  Array(config[:cookbook_path]).reverse.each do |path|
63
- cookbook_dir = File.expand_path(File.join(path, cookbook))
64
- test_ruby(cookbook_dir)
65
- test_templates(cookbook_dir)
63
+ syntax_checker = Chef::Cookbook::SyntaxCheck.for_cookbook(cookbook, path)
64
+ test_ruby(syntax_checker)
65
+ test_templates(syntax_checker)
66
66
  end
67
67
  end
68
68
 
69
- def test_ruby(cookbook_dir)
70
- cache = Chef::Cache::Checksum.instance
71
- Dir[File.join(cookbook_dir, '**', '*.rb')].each do |ruby_file|
72
- key = cache.generate_key(ruby_file, "chef-test")
73
- fstat = File.stat(ruby_file)
74
69
 
75
- if cache.lookup_checksum(key, fstat)
76
- Chef::Log.info("No change in checksum of #{ruby_file}")
77
- else
78
- Chef::Log.info("Testing #{ruby_file} for syntax errors...")
79
- Chef::Mixin::Command.run_command(:command => "ruby -c #{ruby_file}", :output_on_failure => true)
80
- cache.generate_checksum(key, ruby_file, fstat)
81
- end
82
- end
70
+ def test_ruby(syntax_checker)
71
+ Chef::Log.info("Validating ruby files")
72
+ exit(1) unless syntax_checker.validate_ruby_files
83
73
  end
84
-
85
- def test_templates(cookbook_dir)
86
- cache = Chef::Cache::Checksum.instance
87
- Dir[File.join(cookbook_dir, '**', '*.erb')].each do |erb_file|
88
- key = cache.generate_key(erb_file, "chef-test")
89
- fstat = File.stat(erb_file)
90
-
91
- if cache.lookup_checksum(key, fstat)
92
- Chef::Log.info("No change in checksum of #{erb_file}")
93
- else
94
- Chef::Log.info("Testing template #{erb_file} for syntax errors...")
95
- Chef::Mixin::Command.run_command(:command => "sh -c 'erubis -x #{erb_file} | ruby -c'", :output_on_failure => true)
96
- cache.generate_checksum(key, erb_file, fstat)
97
- end
98
- end
74
+
75
+ def test_templates(syntax_checker)
76
+ Chef::Log.info("Validating templates")
77
+ exit(1) unless syntax_checker.validate_templates
99
78
  end
100
79
 
101
80
  end
@@ -63,6 +63,11 @@ class Chef
63
63
  upload_cookbook(cookbook)
64
64
  end
65
65
  else
66
+ if @name_args.length < 1
67
+ show_usage
68
+ Chef::Log.fatal("You must specify the --all flag or at least one cookbook name")
69
+ exit 1
70
+ end
66
71
  @name_args.each do |cookbook_name|
67
72
  if cl.cookbook_exists?(cookbook_name)
68
73
  upload_cookbook(cl[cookbook_name])
@@ -133,7 +138,19 @@ class Chef
133
138
  end
134
139
  sandbox_url = new_sandbox['uri']
135
140
  Chef::Log.debug("Committing sandbox")
136
- catch_auth_exceptions{ rest.put_rest(sandbox_url, {:is_completed => true}) }
141
+ # Retry if S3 is claims a checksum doesn't exist (the eventual
142
+ # in eventual consistency)
143
+ retries = 0
144
+ begin
145
+ catch_auth_exceptions{ rest.put_rest(sandbox_url, {:is_completed => true}) }
146
+ rescue Net::HTTPServerException => e
147
+ if e.to_s =~ /400 "Bad Request"/ && retries += 1 <= 1
148
+ sleep 2
149
+ retry
150
+ else
151
+ raise
152
+ end
153
+ end
137
154
 
138
155
  # files are uploaded, so save the manifest
139
156
  catch_auth_exceptions{ build_dir_cookbook.save }
@@ -25,14 +25,29 @@ class Chef
25
25
 
26
26
  banner "Sub-Command: data bag create BAG [ITEM] (options)"
27
27
 
28
- def run
29
- if @name_args.length == 2
30
- create_object({ "id" => @name_args[1] }, "data_bag_item[#{@name_args[1]}]") do |output|
31
- rest.post_rest("data/#{@name_args[0]}", output)
28
+ def run
29
+ @data_bag_name, @data_bag_item_name = @name_args
30
+
31
+ if @data_bag_name.nil?
32
+ show_usage
33
+ Chef::Log.fatal("You must specify a data bag name")
34
+ exit 1
35
+ end
36
+
37
+ # create the data bag
38
+ begin
39
+ rest.post_rest("data", { "name" => @data_bag_name })
40
+ Chef::Log.info("Created data_bag[#{@data_bag_name}]")
41
+ rescue Net::HTTPServerException => e
42
+ raise unless e.to_s =~ /^409/
43
+ Chef::Log.info("Data bag #{@data_bag_name} already exists")
44
+ end
45
+
46
+ # if an item is specified, create it, as well
47
+ if @data_bag_item_name
48
+ create_object({ "id" => @data_bag_item_name }, "data_bag_item[#{@data_bag_item_name}]") do |output|
49
+ rest.post_rest("data/#{@data_bag_name}", output)
32
50
  end
33
- else
34
- rest.post_rest("data", { "name" => @name_args[0] })
35
- Chef::Log.info("Created data_bag[#{@name_args[0]}]")
36
51
  end
37
52
  end
38
53
  end
@@ -30,10 +30,14 @@ class Chef
30
30
  delete_object(Chef::DataBagItem, @name_args[1], "data_bag_item") do
31
31
  rest.delete_rest("data/#{@name_args[0]}/#{@name_args[1]}")
32
32
  end
33
- else
33
+ elsif @name_args.length == 1
34
34
  delete_object(Chef::DataBag, @name_args[0], "data_bag") do
35
35
  rest.delete_rest("data/#{@name_args[0]}")
36
36
  end
37
+ else
38
+ show_usage
39
+ Chef::Log.fatal("You must specify at least a data bag name")
40
+ exit 1
37
41
  end
38
42
  end
39
43
  end
@@ -26,9 +26,17 @@ class Chef
26
26
 
27
27
  banner "Sub-Command: node create NODE (options)"
28
28
 
29
- def run
29
+ def run
30
+ @node_name = @name_args[0]
31
+
32
+ if @node_name.nil?
33
+ show_usage
34
+ Chef::Log.fatal("You must specify a node name")
35
+ exit 1
36
+ end
37
+
30
38
  node = Chef::Node.new
31
- node.name(@name_args[0])
39
+ node.name(@node_name)
32
40
  create_object(node)
33
41
  end
34
42
  end
@@ -27,7 +27,15 @@ class Chef
27
27
  banner "Sub-Command: node delete NODE (options)"
28
28
 
29
29
  def run
30
- delete_object(Chef::Node, @name_args[0])
30
+ @node_name = @name_args[0]
31
+
32
+ if @node_name.nil?
33
+ show_usage
34
+ Chef::Log.fatal("You must specify a node name")
35
+ exit 1
36
+ end
37
+
38
+ delete_object(Chef::Node, @node_name)
31
39
  end
32
40
 
33
41
  end
@@ -27,7 +27,15 @@ class Chef
27
27
  banner "Sub-Command: node edit NODE (options)"
28
28
 
29
29
  def run
30
- edit_object(Chef::Node, @name_args[0])
30
+ @node_name = @name_args[0]
31
+
32
+ if @node_name.nil?
33
+ show_usage
34
+ Chef::Log.fatal("You must specify a node name")
35
+ exit 1
36
+ end
37
+
38
+ edit_object(Chef::Node, @node_name)
31
39
  end
32
40
  end
33
41
  end
@@ -37,7 +37,15 @@ class Chef
37
37
  :description => "Show only the run list"
38
38
 
39
39
  def run
40
- node = Chef::Node.load(@name_args[0])
40
+ @node_name = @name_args[0]
41
+
42
+ if @node_name.nil?
43
+ show_usage
44
+ Chef::Log.fatal("You must specify a node name")
45
+ exit 1
46
+ end
47
+
48
+ node = Chef::Node.load(@node_name)
41
49
  output(format_for_display(node))
42
50
  end
43
51
  end
@@ -31,9 +31,17 @@ class Chef
31
31
  :long => "--description",
32
32
  :description => "The role description"
33
33
 
34
- def run
34
+ def run
35
+ @role_name = @name_args[0]
36
+
37
+ if @role_name.nil?
38
+ show_usage
39
+ Chef::Log.fatal("You must specify a role name")
40
+ exit 1
41
+ end
42
+
35
43
  role = Chef::Role.new
36
- role.name(@name_args[0])
44
+ role.name(@role_name)
37
45
  role.description(config[:description]) if config[:description]
38
46
  create_object(role)
39
47
  end
@@ -27,7 +27,15 @@ class Chef
27
27
  banner "Sub-Command: role delete ROLE (options)"
28
28
 
29
29
  def run
30
- delete_object(Chef::Role, @name_args[0])
30
+ @role_name = @name_args[0]
31
+
32
+ if @role_name.nil?
33
+ show_usage
34
+ Chef::Log.fatal("You must specify a role name")
35
+ exit 1
36
+ end
37
+
38
+ delete_object(Chef::Role, @role_name)
31
39
  end
32
40
 
33
41
  end
@@ -27,7 +27,15 @@ class Chef
27
27
  banner "Sub-Command: role edit ROLE (options)"
28
28
 
29
29
  def run
30
- edit_object(Chef::Role, @name_args[0])
30
+ @role_name = @name_args[0]
31
+
32
+ if @role_name.nil?
33
+ show_usage
34
+ Chef::Log.fatal("You must specify a role name")
35
+ exit 1
36
+ end
37
+
38
+ edit_object(Chef::Role, @role_name)
31
39
  end
32
40
  end
33
41
  end
@@ -32,7 +32,15 @@ class Chef
32
32
  :description => "Show only one attribute"
33
33
 
34
34
  def run
35
- role = Chef::Role.load(@name_args[0])
35
+ @role_name = @name_args[0]
36
+
37
+ if @role_name.nil?
38
+ show_usage
39
+ Chef::Log.fatal("You must specify a role name")
40
+ exit 1
41
+ end
42
+
43
+ role = Chef::Role.load(@role_name)
36
44
  output(format_for_display(role))
37
45
  end
38
46
 
@@ -65,6 +65,7 @@ class Chef
65
65
  # Chef::Provider.
66
66
  # resource.recipe_name = @recipe_name
67
67
  resource.params = @params
68
+ resource.source_line = caller[0]
68
69
  # Determine whether this resource is being created in the context of an enclosing Provider
69
70
  resource.enclosing_provider = self.is_a?(Chef::Provider) ? self : nil
70
71
  resource.instance_eval(&block) if block
@@ -26,6 +26,7 @@ require 'chef/node'
26
26
 
27
27
  class Chef
28
28
  class Resource
29
+ HIDDEN_IVARS = [:@allowed_actions, :@resource_name, :@source_line, :@run_context, :@name]
29
30
 
30
31
  include Chef::Mixin::CheckHelper
31
32
  include Chef::Mixin::ParamsValidate
@@ -33,7 +34,8 @@ class Chef
33
34
  include Chef::Mixin::ConvertToClassName
34
35
 
35
36
  attr_accessor :params, :provider, :updated, :allowed_actions, :run_context, :cookbook_name, :recipe_name, :enclosing_provider
36
- attr_reader :resource_name, :source_line, :not_if_args, :only_if_args
37
+ attr_accessor :source_line
38
+ attr_reader :resource_name, :not_if_args, :only_if_args
37
39
 
38
40
  # Each notify entry is a resource/action pair, modeled as an
39
41
  # OpenStruct with a .resource and .action member
@@ -57,11 +59,7 @@ class Chef
57
59
  @only_if_args = {}
58
60
  @notifies_immediate = Array.new
59
61
  @notifies_delayed = Array.new
60
- sline = caller(4).shift
61
- if sline
62
- @source_line = sline.gsub!(/^(.+):(.+):.+$/, '\1 line \2')
63
- @source_line = ::File.expand_path(@source_line) if @source_line
64
- end
62
+ @source_line = nil
65
63
  end
66
64
 
67
65
  def node
@@ -206,6 +204,20 @@ class Chef
206
204
  def to_s
207
205
  "#{@resource_name}[#{@name}]"
208
206
  end
207
+
208
+ def to_text
209
+ skip =
210
+ ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
211
+ text = "# Declared in #{@source_line}\n"
212
+ text << convert_to_snake_case(self.class.name, 'Chef::Resource') + "(#{name}) do\n"
213
+ ivars.each do |ivar|
214
+ #next if skip.include?(ivar)
215
+ if (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
216
+ text << " #{ivar.to_s.sub(/^@/,'')}(#{value.inspect})\n"
217
+ end
218
+ end
219
+ text << "end\n"
220
+ end
209
221
 
210
222
  # Serialize this object as a hash
211
223
  def to_json(*a)
@@ -16,5 +16,5 @@
16
16
  # limitations under the License.
17
17
 
18
18
  class Chef
19
- VERSION = '0.9.0.rc02'
19
+ VERSION = '0.9.0'
20
20
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: true
4
+ hash: 59
5
+ prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 9
8
9
  - 0
9
- - rc02
10
- version: 0.9.0.rc02
10
+ version: 0.9.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Adam Jacob
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-16 00:00:00 -07:00
18
+ date: 2010-06-20 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,6 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
+ hash: 19
29
30
  segments:
30
31
  - 1
31
32
  - 1
@@ -41,6 +42,7 @@ dependencies:
41
42
  requirements:
42
43
  - - ">="
43
44
  - !ruby/object:Gem::Version
45
+ hash: 19
44
46
  segments:
45
47
  - 1
46
48
  - 1
@@ -56,6 +58,7 @@ dependencies:
56
58
  requirements:
57
59
  - - ">="
58
60
  - !ruby/object:Gem::Version
61
+ hash: 19
59
62
  segments:
60
63
  - 1
61
64
  - 1
@@ -71,6 +74,7 @@ dependencies:
71
74
  requirements:
72
75
  - - ">="
73
76
  - !ruby/object:Gem::Version
77
+ hash: 19
74
78
  segments:
75
79
  - 1
76
80
  - 1
@@ -86,6 +90,7 @@ dependencies:
86
90
  requirements:
87
91
  - - ">="
88
92
  - !ruby/object:Gem::Version
93
+ hash: 11
89
94
  segments:
90
95
  - 0
91
96
  - 5
@@ -101,6 +106,7 @@ dependencies:
101
106
  requirements:
102
107
  - - ">="
103
108
  - !ruby/object:Gem::Version
109
+ hash: 31
104
110
  segments:
105
111
  - 1
106
112
  - 0
@@ -108,6 +114,7 @@ dependencies:
108
114
  version: 1.0.4
109
115
  - - <=
110
116
  - !ruby/object:Gem::Version
117
+ hash: 1
111
118
  segments:
112
119
  - 1
113
120
  - 5
@@ -123,6 +130,7 @@ dependencies:
123
130
  requirements:
124
131
  - - ">="
125
132
  - !ruby/object:Gem::Version
133
+ hash: 7
126
134
  segments:
127
135
  - 0
128
136
  - 6
@@ -138,6 +146,7 @@ dependencies:
138
146
  requirements:
139
147
  - - <=
140
148
  - !ruby/object:Gem::Version
149
+ hash: 3
141
150
  segments:
142
151
  - 1
143
152
  - 4
@@ -153,6 +162,7 @@ dependencies:
153
162
  requirements:
154
163
  - - ">="
155
164
  - !ruby/object:Gem::Version
165
+ hash: 3
156
166
  segments:
157
167
  - 0
158
168
  version: "0"
@@ -166,6 +176,7 @@ dependencies:
166
176
  requirements:
167
177
  - - ">="
168
178
  - !ruby/object:Gem::Version
179
+ hash: 3
169
180
  segments:
170
181
  - 0
171
182
  version: "0"
@@ -179,6 +190,7 @@ dependencies:
179
190
  requirements:
180
191
  - - ">="
181
192
  - !ruby/object:Gem::Version
193
+ hash: 3
182
194
  segments:
183
195
  - 0
184
196
  version: "0"
@@ -192,6 +204,7 @@ dependencies:
192
204
  requirements:
193
205
  - - ">="
194
206
  - !ruby/object:Gem::Version
207
+ hash: 3
195
208
  segments:
196
209
  - 0
197
210
  version: "0"
@@ -205,6 +218,7 @@ dependencies:
205
218
  requirements:
206
219
  - - ">="
207
220
  - !ruby/object:Gem::Version
221
+ hash: 3
208
222
  segments:
209
223
  - 0
210
224
  version: "0"
@@ -308,6 +322,7 @@ files:
308
322
  - lib/chef/knife/client_reregister.rb
309
323
  - lib/chef/knife/client_show.rb
310
324
  - lib/chef/knife/configure.rb
325
+ - lib/chef/knife/configure_client.rb
311
326
  - lib/chef/knife/cookbook_bulk_delete.rb
312
327
  - lib/chef/knife/cookbook_delete.rb
313
328
  - lib/chef/knife/cookbook_download.rb
@@ -546,19 +561,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
546
561
  requirements:
547
562
  - - ">="
548
563
  - !ruby/object:Gem::Version
564
+ hash: 3
549
565
  segments:
550
566
  - 0
551
567
  version: "0"
552
568
  required_rubygems_version: !ruby/object:Gem::Requirement
553
569
  none: false
554
570
  requirements:
555
- - - ">"
571
+ - - ">="
556
572
  - !ruby/object:Gem::Version
573
+ hash: 3
557
574
  segments:
558
- - 1
559
- - 3
560
- - 1
561
- version: 1.3.1
575
+ - 0
576
+ version: "0"
562
577
  requirements: []
563
578
 
564
579
  rubyforge_project: