chef 12.4.0-universal-mingw32 → 12.4.1-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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef/api_client.rb +31 -129
  3. data/lib/chef/api_client_v1.rb +325 -0
  4. data/lib/chef/chef_class.rb +15 -7
  5. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +2 -2
  6. data/lib/chef/dsl/resources.rb +6 -4
  7. data/lib/chef/exceptions.rb +2 -2
  8. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +2 -1
  9. data/lib/chef/knife/bootstrap/templates/chef-full.erb +4 -4
  10. data/lib/chef/knife/client_bulk_delete.rb +2 -2
  11. data/lib/chef/knife/client_create.rb +4 -4
  12. data/lib/chef/knife/client_delete.rb +3 -3
  13. data/lib/chef/knife/client_edit.rb +10 -2
  14. data/lib/chef/knife/client_list.rb +2 -2
  15. data/lib/chef/knife/client_reregister.rb +2 -2
  16. data/lib/chef/knife/client_show.rb +2 -2
  17. data/lib/chef/knife/osc_user_create.rb +3 -3
  18. data/lib/chef/knife/osc_user_delete.rb +2 -2
  19. data/lib/chef/knife/osc_user_edit.rb +3 -3
  20. data/lib/chef/knife/osc_user_list.rb +2 -2
  21. data/lib/chef/knife/osc_user_reregister.rb +2 -2
  22. data/lib/chef/knife/osc_user_show.rb +2 -2
  23. data/lib/chef/knife/user_create.rb +3 -3
  24. data/lib/chef/knife/user_delete.rb +4 -4
  25. data/lib/chef/knife/user_edit.rb +3 -3
  26. data/lib/chef/knife/user_list.rb +2 -2
  27. data/lib/chef/knife/user_reregister.rb +2 -2
  28. data/lib/chef/knife/user_show.rb +2 -2
  29. data/lib/chef/node_map.rb +14 -18
  30. data/lib/chef/platform/handler_map.rb +45 -0
  31. data/lib/chef/platform/priority_map.rb +19 -32
  32. data/lib/chef/platform/provider_handler_map.rb +29 -0
  33. data/lib/chef/platform/provider_mapping.rb +3 -2
  34. data/lib/chef/platform/resource_handler_map.rb +29 -0
  35. data/lib/chef/platform/resource_priority_map.rb +0 -6
  36. data/lib/chef/provider.rb +1 -1
  37. data/lib/chef/provider/dsc_resource.rb +2 -2
  38. data/lib/chef/provider/dsc_script.rb +1 -1
  39. data/lib/chef/provider/mount/aix.rb +1 -1
  40. data/lib/chef/provider/package.rb +0 -31
  41. data/lib/chef/provider/package/aix.rb +1 -0
  42. data/lib/chef/provider/package/apt.rb +1 -0
  43. data/lib/chef/provider/package/homebrew.rb +1 -0
  44. data/lib/chef/provider/package/ips.rb +1 -0
  45. data/lib/chef/provider/package/macports.rb +1 -0
  46. data/lib/chef/provider/package/openbsd.rb +1 -0
  47. data/lib/chef/provider/package/pacman.rb +1 -0
  48. data/lib/chef/provider/package/paludis.rb +1 -0
  49. data/lib/chef/provider/package/portage.rb +2 -0
  50. data/lib/chef/provider/package/smartos.rb +1 -0
  51. data/lib/chef/provider/package/solaris.rb +2 -0
  52. data/lib/chef/provider/package/yum.rb +1 -0
  53. data/lib/chef/provider/package/zypper.rb +1 -0
  54. data/lib/chef/provider/service.rb +4 -22
  55. data/lib/chef/provider/service/debian.rb +2 -0
  56. data/lib/chef/provider/service/insserv.rb +2 -0
  57. data/lib/chef/provider/service/invokercd.rb +2 -0
  58. data/lib/chef/provider/service/openbsd.rb +1 -1
  59. data/lib/chef/provider/service/redhat.rb +2 -0
  60. data/lib/chef/provider/service/upstart.rb +3 -0
  61. data/lib/chef/provider_resolver.rb +59 -53
  62. data/lib/chef/resource.rb +22 -73
  63. data/lib/chef/resource/dsc_script.rb +1 -1
  64. data/lib/chef/resource/ips_package.rb +1 -0
  65. data/lib/chef/resource/mount.rb +8 -0
  66. data/lib/chef/resource/openbsd_package.rb +0 -11
  67. data/lib/chef/resource/solaris_package.rb +1 -4
  68. data/lib/chef/resource_resolver.rb +54 -26
  69. data/lib/chef/run_list/versioned_recipe_list.rb +6 -5
  70. data/lib/chef/user.rb +52 -188
  71. data/lib/chef/user_v1.rb +335 -0
  72. data/lib/chef/version.rb +1 -1
  73. data/spec/data/trusted_certs/opscode.pem +53 -56
  74. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +1 -1
  75. data/spec/functional/resource/package_spec.rb +0 -2
  76. data/spec/integration/recipes/recipe_dsl_spec.rb +661 -126
  77. data/spec/spec_helper.rb +19 -13
  78. data/spec/support/shared/unit/api_versioning.rb +2 -2
  79. data/spec/unit/api_client_spec.rb +22 -201
  80. data/spec/unit/api_client_v1_spec.rb +457 -0
  81. data/spec/unit/knife/client_bulk_delete_spec.rb +4 -4
  82. data/spec/unit/knife/client_create_spec.rb +1 -1
  83. data/spec/unit/knife/client_delete_spec.rb +3 -3
  84. data/spec/unit/knife/client_edit_spec.rb +14 -1
  85. data/spec/unit/knife/client_list_spec.rb +1 -1
  86. data/spec/unit/knife/client_reregister_spec.rb +2 -2
  87. data/spec/unit/knife/client_show_spec.rb +2 -2
  88. data/spec/unit/knife/osc_user_create_spec.rb +5 -5
  89. data/spec/unit/knife/osc_user_delete_spec.rb +1 -1
  90. data/spec/unit/knife/osc_user_edit_spec.rb +1 -1
  91. data/spec/unit/knife/osc_user_list_spec.rb +1 -1
  92. data/spec/unit/knife/osc_user_reregister_spec.rb +1 -1
  93. data/spec/unit/knife/osc_user_show_spec.rb +1 -1
  94. data/spec/unit/knife/user_create_spec.rb +1 -1
  95. data/spec/unit/knife/user_delete_spec.rb +2 -2
  96. data/spec/unit/knife/user_edit_spec.rb +2 -2
  97. data/spec/unit/knife/user_list_spec.rb +1 -1
  98. data/spec/unit/knife/user_reregister_spec.rb +1 -1
  99. data/spec/unit/knife/user_show_spec.rb +2 -2
  100. data/spec/unit/lwrp_spec.rb +146 -134
  101. data/spec/unit/node_map_spec.rb +12 -0
  102. data/spec/unit/platform_spec.rb +1 -1
  103. data/spec/unit/provider/deploy_spec.rb +1 -1
  104. data/spec/unit/provider/dsc_resource_spec.rb +3 -3
  105. data/spec/unit/provider/dsc_script_spec.rb +2 -2
  106. data/spec/unit/provider_resolver_spec.rb +170 -135
  107. data/spec/unit/recipe_spec.rb +3 -3
  108. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  109. data/spec/unit/resource/cron_spec.rb +1 -1
  110. data/spec/unit/resource/directory_spec.rb +1 -1
  111. data/spec/unit/resource/dsc_resource_spec.rb +1 -1
  112. data/spec/unit/resource/dsc_script_spec.rb +2 -2
  113. data/spec/unit/resource/env_spec.rb +1 -1
  114. data/spec/unit/resource/erl_call_spec.rb +1 -1
  115. data/spec/unit/resource/file_spec.rb +1 -1
  116. data/spec/unit/resource/group_spec.rb +1 -1
  117. data/spec/unit/resource/link_spec.rb +1 -1
  118. data/spec/unit/resource/mdadm_spec.rb +1 -1
  119. data/spec/unit/resource/mount_spec.rb +1 -1
  120. data/spec/unit/resource/ohai_spec.rb +1 -1
  121. data/spec/unit/resource/registry_key_spec.rb +1 -1
  122. data/spec/unit/resource/route_spec.rb +1 -1
  123. data/spec/unit/resource/ruby_block_spec.rb +3 -3
  124. data/spec/unit/resource/user_spec.rb +1 -1
  125. data/spec/unit/resource/windows_service_spec.rb +1 -1
  126. data/spec/unit/resource_resolver_spec.rb +8 -4
  127. data/spec/unit/resource_spec.rb +89 -3
  128. data/spec/unit/run_list/versioned_recipe_list_spec.rb +115 -48
  129. data/spec/unit/user_spec.rb +97 -405
  130. data/spec/unit/user_v1_spec.rb +584 -0
  131. metadata +11 -6
  132. data/lib/chef/osc_user.rb +0 -194
  133. data/spec/unit/osc_user_spec.rb +0 -276
@@ -22,7 +22,7 @@ class Chef
22
22
  class Resource
23
23
  class DscScript < Chef::Resource
24
24
 
25
- provides :dsc_script, platform: "windows"
25
+ provides :dsc_script, os: "windows"
26
26
 
27
27
  default_action :run
28
28
 
@@ -23,6 +23,7 @@ class Chef
23
23
  class Resource
24
24
  class IpsPackage < ::Chef::Resource::Package
25
25
 
26
+ provides :package, os: "solaris2"
26
27
  provides :ips_package, os: "solaris2"
27
28
 
28
29
  allowed_actions :install, :remove, :upgrade
@@ -174,6 +174,14 @@ class Chef
174
174
  )
175
175
  end
176
176
 
177
+ private
178
+
179
+ # Used by the AIX provider to set fstype to nil.
180
+ # TODO use property to make nil a valid value for fstype
181
+ def clear_fstype
182
+ @fstype = nil
183
+ end
184
+
177
185
  end
178
186
  end
179
187
  end
@@ -29,17 +29,6 @@ class Chef
29
29
  include Chef::Mixin::ShellOut
30
30
 
31
31
  provides :package, os: "openbsd"
32
-
33
- def after_created
34
- assign_provider
35
- end
36
-
37
- private
38
-
39
- def assign_provider
40
- @provider = Chef::Provider::Package::Openbsd
41
- end
42
-
43
32
  end
44
33
  end
45
34
  end
@@ -24,10 +24,7 @@ class Chef
24
24
  class Resource
25
25
  class SolarisPackage < Chef::Resource::Package
26
26
  provides :package, os: "solaris2", platform_family: "nexentacore"
27
- provides :package, os: "solaris2", platform_family: "solaris2" do |node|
28
- # on >= Solaris 11 we default to IPS packages instead
29
- node[:platform_version].to_f <= 5.10
30
- end
27
+ provides :package, os: "solaris2", platform_family: "solaris2", platform_version: "<= 5.10"
31
28
  end
32
29
  end
33
30
  end
@@ -105,52 +105,80 @@ class Chef
105
105
  #
106
106
  # Whether this DSL is provided by the given resource_class.
107
107
  #
108
+ # Does NOT call provides? on the resource (it is assumed this is being
109
+ # called *from* provides?).
110
+ #
108
111
  # @api private
109
112
  def provided_by?(resource_class)
110
- !prioritized_handlers.include?(resource_class)
113
+ potential_handlers.include?(resource_class)
114
+ end
115
+
116
+ #
117
+ # Whether the given handler attempts to provide the resource class at all.
118
+ #
119
+ # @api private
120
+ def self.includes_handler?(resource_name, resource_class)
121
+ handler_map.list(nil, resource_name).include?(resource_class)
111
122
  end
112
123
 
113
124
  protected
114
125
 
126
+ def self.priority_map
127
+ Chef.resource_priority_map
128
+ end
129
+
130
+ def self.handler_map
131
+ Chef.resource_handler_map
132
+ end
133
+
115
134
  def priority_map
116
- Chef::Platform::ResourcePriorityMap.instance
135
+ Chef.resource_priority_map
136
+ end
137
+
138
+ def handler_map
139
+ Chef.resource_handler_map
140
+ end
141
+
142
+ # @api private
143
+ def potential_handlers
144
+ handler_map.list(node, resource_name, canonical: canonical).uniq
145
+ end
146
+
147
+ def enabled_handlers
148
+ potential_handlers.select { |handler| !overrode_provides?(handler) || handler.provides?(node, resource_name) }
117
149
  end
118
150
 
119
151
  def prioritized_handlers
120
- @prioritized_handlers ||=
121
- priority_map.list_handlers(node, resource_name, canonical: canonical)
152
+ @prioritized_handlers ||= begin
153
+ enabled_handlers = self.enabled_handlers
154
+
155
+ prioritized = priority_map.list(node, resource_name, canonical: canonical).flatten(1)
156
+ prioritized &= enabled_handlers # Filter the priority map by the actual enabled handlers
157
+ prioritized |= enabled_handlers # Bring back any handlers that aren't in the priority map, at the *end* (ordered set)
158
+ prioritized
159
+ end
160
+ end
161
+
162
+ def overrode_provides?(handler)
163
+ handler.method(:provides?).owner != Chef::Resource.method(:provides?).owner
122
164
  end
123
165
 
124
166
  module Deprecated
125
167
  # return a deterministically sorted list of Chef::Resource subclasses
126
- # @deprecated Now prioritized_handlers does its own work (more efficiently)
127
168
  def resources
128
169
  Chef::Resource.sorted_descendants
129
170
  end
130
171
 
131
- # A list of all handlers
132
- # @deprecated Now prioritized_handlers does its own work
133
172
  def enabled_handlers
134
- Chef::Log.deprecation("enabled_handlers is deprecated. If you are implementing a ResourceResolver, use provided_handlers. If you are not, use Chef::ResourceResolver.list(#{resource_name.inspect}, node: <node>)")
135
- resources.select { |klass| klass.provides?(node, resource_name) }
136
- end
137
-
138
- protected
139
-
140
- # A list of all handlers for the given DSL. If there are no handlers in
141
- # the map, we still check all descendants of Chef::Resource for backwards
142
- # compatibility purposes.
143
- def prioritized_handlers
144
- @prioritized_handlers ||= super ||
145
- resources.select do |klass|
146
- # Don't bother calling provides? unless it's overridden. We already
147
- # know prioritized_handlers
148
- if klass.method(:provides?).owner != Chef::Resource && klass.provides?(node, resource_name)
149
- Chef::Log.deprecation("Resources #{provided.join(", ")} are marked as providing DSL #{resource_name}, but provides #{resource_name.inspect} was never called!")
150
- Chef::Log.deprecation("In Chef 13, this will break: you must call provides to mark the names you provide, even if you also override provides? yourself.")
151
- true
152
- end
173
+ handlers = super
174
+ if handlers.empty?
175
+ handlers = resources.select { |handler| overrode_provides?(handler) && handler.provides?(node, resource_name) }
176
+ handlers.each do |handler|
177
+ Chef::Log.deprecation("#{handler}.provides? returned true when asked if it provides DSL #{resource_name}, but provides #{resource_name.inspect} was never called!")
178
+ Chef::Log.deprecation("In Chef 13, this will break: you must call provides to mark the names you provide, even if you also override provides? yourself.")
153
179
  end
180
+ end
181
+ handlers
154
182
  end
155
183
  end
156
184
  prepend Deprecated
@@ -70,15 +70,16 @@ class Chef
70
70
  # @return [Array] Array of strings with fully-qualified recipe names
71
71
  def with_fully_qualified_names_and_version_constraints
72
72
  self.map do |recipe_name|
73
- ret = if recipe_name.include?('::')
73
+ qualified_recipe = if recipe_name.include?('::')
74
74
  recipe_name
75
75
  else
76
76
  "#{recipe_name}::default"
77
77
  end
78
- if @versions[recipe_name]
79
- ret << "@#{@versions[recipe_name]}"
80
- end
81
- ret
78
+
79
+ version = @versions[recipe_name]
80
+ qualified_recipe = "#{qualified_recipe}@#{version}" if version
81
+
82
+ qualified_recipe
82
83
  end
83
84
  end
84
85
  end
data/lib/chef/user.rb CHANGED
@@ -21,85 +21,45 @@ require 'chef/mixin/from_file'
21
21
  require 'chef/mash'
22
22
  require 'chef/json_compat'
23
23
  require 'chef/search/query'
24
- require 'chef/mixin/api_version_request_handling'
25
- require 'chef/exceptions'
26
24
  require 'chef/server_api'
27
25
 
28
- # OSC 11 BACKWARDS COMPATIBILITY NOTE (remove after OSC 11 support ends)
26
+ # TODO
27
+ # DEPRECATION NOTE
28
+ # This class will be replaced by Chef::UserV1 in Chef 13. It is the code to support the User object
29
+ # corrosponding to the Open Source Chef Server 11 and only still exists to support
30
+ # users still on OSC 11.
29
31
  #
30
- # In general, Chef::User is no longer expected to support Open Source Chef 11 Server requests.
31
- # The object that handles those requests has been moved to the Chef::OscUser namespace.
32
+ # Chef::UserV1 now supports Chef Server 12 and will be moved to this namespace in Chef 13.
32
33
  #
33
- # Exception: self.list is backwards compatible with OSC 11
34
+ # New development should occur in Chef::UserV1.
35
+ # This file and corrosponding osc_user knife files
36
+ # should be removed once client support for Open Source Chef Server 11 expires.
34
37
  class Chef
35
38
  class User
36
39
 
37
40
  include Chef::Mixin::FromFile
38
41
  include Chef::Mixin::ParamsValidate
39
- include Chef::Mixin::ApiVersionRequestHandling
40
-
41
- SUPPORTED_API_VERSIONS = [0,1]
42
42
 
43
43
  def initialize
44
- @username = nil
45
- @display_name = nil
46
- @first_name = nil
47
- @middle_name = nil
48
- @last_name = nil
49
- @email = nil
50
- @password = nil
44
+ @name = ''
51
45
  @public_key = nil
52
46
  @private_key = nil
53
- @create_key = nil
54
47
  @password = nil
48
+ @admin = false
55
49
  end
56
50
 
57
- def chef_root_rest_v0
58
- @chef_root_rest_v0 ||= Chef::ServerAPI.new(Chef::Config[:chef_server_root], {:api_version => "0"})
59
- end
60
-
61
- def chef_root_rest_v1
62
- @chef_root_rest_v1 ||= Chef::ServerAPI.new(Chef::Config[:chef_server_root], {:api_version => "1"})
51
+ def chef_rest_v0
52
+ @chef_rest_v0 ||= Chef::ServerAPI.new(Chef::Config[:chef_server_url], {:api_version => "0"})
63
53
  end
64
54
 
65
- def username(arg=nil)
66
- set_or_return(:username, arg,
55
+ def name(arg=nil)
56
+ set_or_return(:name, arg,
67
57
  :regex => /^[a-z0-9\-_]+$/)
68
58
  end
69
59
 
70
- def display_name(arg=nil)
71
- set_or_return(:display_name,
72
- arg, :kind_of => String)
73
- end
74
-
75
- def first_name(arg=nil)
76
- set_or_return(:first_name,
77
- arg, :kind_of => String)
78
- end
79
-
80
- def middle_name(arg=nil)
81
- set_or_return(:middle_name,
82
- arg, :kind_of => String)
83
- end
84
-
85
- def last_name(arg=nil)
86
- set_or_return(:last_name,
87
- arg, :kind_of => String)
88
- end
89
-
90
- def email(arg=nil)
91
- set_or_return(:email,
92
- arg, :kind_of => String)
93
- end
94
-
95
- def password(arg=nil)
96
- set_or_return(:password,
97
- arg, :kind_of => String)
98
- end
99
-
100
- def create_key(arg=nil)
101
- set_or_return(:create_key, arg,
102
- :kind_of => [TrueClass, FalseClass])
60
+ def admin(arg=nil)
61
+ set_or_return(:admin,
62
+ arg, :kind_of => [TrueClass, FalseClass])
103
63
  end
104
64
 
105
65
  def public_key(arg=nil)
@@ -119,17 +79,12 @@ class Chef
119
79
 
120
80
  def to_hash
121
81
  result = {
122
- "username" => @username
82
+ "name" => @name,
83
+ "public_key" => @public_key,
84
+ "admin" => @admin
123
85
  }
124
- result["display_name"] = @display_name unless @display_name.nil?
125
- result["first_name"] = @first_name unless @first_name.nil?
126
- result["middle_name"] = @middle_name unless @middle_name.nil?
127
- result["last_name"] = @last_name unless @last_name.nil?
128
- result["email"] = @email unless @email.nil?
129
- result["password"] = @password unless @password.nil?
130
- result["public_key"] = @public_key unless @public_key.nil?
131
- result["private_key"] = @private_key unless @private_key.nil?
132
- result["create_key"] = @create_key unless @create_key.nil?
86
+ result["private_key"] = @private_key if @private_key
87
+ result["password"] = @password if @password
133
88
  result
134
89
  end
135
90
 
@@ -138,86 +93,21 @@ class Chef
138
93
  end
139
94
 
140
95
  def destroy
141
- # will default to the current API version (Chef::Authenticator::DEFAULT_SERVER_API_VERSION)
142
- Chef::REST.new(Chef::Config[:chef_server_url]).delete("users/#{@username}")
96
+ chef_rest_v0.delete("users/#{@name}")
143
97
  end
144
98
 
145
99
  def create
146
- # try v1, fail back to v0 if v1 not supported
147
- begin
148
- payload = {
149
- :username => @username,
150
- :display_name => @display_name,
151
- :first_name => @first_name,
152
- :last_name => @last_name,
153
- :email => @email,
154
- :password => @password
155
- }
156
- payload[:public_key] = @public_key unless @public_key.nil?
157
- payload[:create_key] = @create_key unless @create_key.nil?
158
- payload[:middle_name] = @middle_name unless @middle_name.nil?
159
- raise Chef::Exceptions::InvalidUserAttribute, "You cannot set both public_key and create_key for create." if !@create_key.nil? && !@public_key.nil?
160
- new_user = chef_root_rest_v1.post("users", payload)
161
-
162
- # get the private_key out of the chef_key hash if it exists
163
- if new_user['chef_key']
164
- if new_user['chef_key']['private_key']
165
- new_user['private_key'] = new_user['chef_key']['private_key']
166
- end
167
- new_user['public_key'] = new_user['chef_key']['public_key']
168
- new_user.delete('chef_key')
169
- end
170
- rescue Net::HTTPServerException => e
171
- # rescue API V0 if 406 and the server supports V0
172
- supported_versions = server_client_api_version_intersection(e, SUPPORTED_API_VERSIONS)
173
- raise e unless supported_versions && supported_versions.include?(0)
174
- payload = {
175
- :username => @username,
176
- :display_name => @display_name,
177
- :first_name => @first_name,
178
- :last_name => @last_name,
179
- :email => @email,
180
- :password => @password
181
- }
182
- payload[:middle_name] = @middle_name unless @middle_name.nil?
183
- payload[:public_key] = @public_key unless @public_key.nil?
184
- # under API V0, the server will create a key pair if public_key isn't passed
185
- new_user = chef_root_rest_v0.post("users", payload)
186
- end
187
-
100
+ payload = {:name => self.name, :admin => self.admin, :password => self.password }
101
+ payload[:public_key] = public_key if public_key
102
+ new_user = chef_rest_v0.post("users", payload)
188
103
  Chef::User.from_hash(self.to_hash.merge(new_user))
189
104
  end
190
105
 
191
106
  def update(new_key=false)
192
- begin
193
- payload = {:username => username}
194
- payload[:display_name] = display_name unless display_name.nil?
195
- payload[:first_name] = first_name unless first_name.nil?
196
- payload[:middle_name] = middle_name unless middle_name.nil?
197
- payload[:last_name] = last_name unless last_name.nil?
198
- payload[:email] = email unless email.nil?
199
- payload[:password] = password unless password.nil?
200
-
201
- # API V1 will fail if these key fields are defined, and try V0 below if relevant 400 is returned
202
- payload[:public_key] = public_key unless public_key.nil?
203
- payload[:private_key] = new_key if new_key
204
-
205
- updated_user = chef_root_rest_v1.put("users/#{username}", payload)
206
- rescue Net::HTTPServerException => e
207
- if e.response.code == "400"
208
- # if a 400 is returned but the error message matches the error related to private / public key fields, try V0
209
- # else, raise the 400
210
- error = Chef::JSONCompat.from_json(e.response.body)["error"].first
211
- error_match = /Since Server API v1, all keys must be updated via the keys endpoint/.match(error)
212
- if error_match.nil?
213
- raise e
214
- end
215
- else # for other types of errors, test for API versioning errors right away
216
- supported_versions = server_client_api_version_intersection(e, SUPPORTED_API_VERSIONS)
217
- raise e unless supported_versions && supported_versions.include?(0)
218
- end
219
- updated_user = chef_root_rest_v0.put("users/#{username}", payload)
220
- end
107
+ payload = {:name => name, :admin => admin}
108
+ payload[:private_key] = new_key if new_key
109
+ payload[:password] = password if password
110
+ updated_user = chef_rest_v0.put("users/#{name}", payload)
221
111
  Chef::User.from_hash(self.to_hash.merge(updated_user))
222
112
  end
223
113
 
@@ -233,47 +123,30 @@ class Chef
233
123
  end
234
124
  end
235
125
 
236
- # Note: remove after API v0 no longer supported by client (and knife command).
237
126
  def reregister
238
- begin
239
- payload = self.to_hash.merge({"private_key" => true})
240
- reregistered_self = chef_root_rest_v0.put("users/#{username}", payload)
241
- private_key(reregistered_self["private_key"])
242
- # only V0 supported for reregister
243
- rescue Net::HTTPServerException => e
244
- # if there was a 406 related to versioning, give error explaining that
245
- # only API version 0 is supported for reregister command
246
- if e.response.code == "406" && e.response["x-ops-server-api-version"]
247
- version_header = Chef::JSONCompat.from_json(e.response["x-ops-server-api-version"])
248
- min_version = version_header["min_version"]
249
- max_version = version_header["max_version"]
250
- error_msg = reregister_only_v0_supported_error_msg(max_version, min_version)
251
- raise Chef::Exceptions::OnlyApiVersion0SupportedForAction.new(error_msg)
252
- else
253
- raise e
254
- end
255
- end
127
+ reregistered_self = chef_rest_v0.put("users/#{name}", { :name => name, :admin => admin, :private_key => true })
128
+ private_key(reregistered_self["private_key"])
256
129
  self
257
130
  end
258
131
 
259
132
  def to_s
260
- "user[#{@username}]"
133
+ "user[#{@name}]"
134
+ end
135
+
136
+ def inspect
137
+ "Chef::User name:'#{name}' admin:'#{admin.inspect}'" +
138
+ "public_key:'#{public_key}' private_key:#{private_key}"
261
139
  end
262
140
 
263
141
  # Class Methods
264
142
 
265
143
  def self.from_hash(user_hash)
266
144
  user = Chef::User.new
267
- user.username user_hash['username']
268
- user.display_name user_hash['display_name'] if user_hash.key?('display_name')
269
- user.first_name user_hash['first_name'] if user_hash.key?('first_name')
270
- user.middle_name user_hash['middle_name'] if user_hash.key?('middle_name')
271
- user.last_name user_hash['last_name'] if user_hash.key?('last_name')
272
- user.email user_hash['email'] if user_hash.key?('email')
273
- user.password user_hash['password'] if user_hash.key?('password')
274
- user.public_key user_hash['public_key'] if user_hash.key?('public_key')
145
+ user.name user_hash['name']
275
146
  user.private_key user_hash['private_key'] if user_hash.key?('private_key')
276
- user.create_key user_hash['create_key'] if user_hash.key?('create_key')
147
+ user.password user_hash['password'] if user_hash.key?('password')
148
+ user.public_key user_hash['public_key']
149
+ user.admin user_hash['admin']
277
150
  user
278
151
  end
279
152
 
@@ -286,19 +159,12 @@ class Chef
286
159
  end
287
160
 
288
161
  def self.list(inflate=false)
289
- response = Chef::REST.new(Chef::Config[:chef_server_url]).get('users')
162
+ response = Chef::ServerAPI.new(Chef::Config[:chef_server_url], {:api_version => "0"}).get('users')
290
163
  users = if response.is_a?(Array)
291
- # EC 11 / CS 12 V0, V1
292
- # GET /organizations/<org>/users
293
- transform_list_response(response)
294
- else
295
- # OSC 11
296
- # GET /users
297
- # EC 11 / CS 12 V0, V1
298
- # GET /users
299
- response # OSC
300
- end
301
-
164
+ transform_ohc_list_response(response) # OHC/OPC
165
+ else
166
+ response # OSC
167
+ end
302
168
  if inflate
303
169
  users.inject({}) do |user_map, (name, _url)|
304
170
  user_map[name] = Chef::User.load(name)
@@ -309,9 +175,8 @@ class Chef
309
175
  end
310
176
  end
311
177
 
312
- def self.load(username)
313
- # will default to the current API version (Chef::Authenticator::DEFAULT_SERVER_API_VERSION)
314
- response = Chef::REST.new(Chef::Config[:chef_server_url]).get("users/#{username}")
178
+ def self.load(name)
179
+ response = Chef::ServerAPI.new(Chef::Config[:chef_server_url], {:api_version => "0"}).get("users/#{name}")
315
180
  Chef::User.from_hash(response)
316
181
  end
317
182
 
@@ -319,7 +184,7 @@ class Chef
319
184
  # [ { "user" => { "username" => USERNAME }}, ...]
320
185
  # into the form
321
186
  # { "USERNAME" => "URI" }
322
- def self.transform_list_response(response)
187
+ def self.transform_ohc_list_response(response)
323
188
  new_response = Hash.new
324
189
  response.each do |u|
325
190
  name = u['user']['username']
@@ -328,7 +193,6 @@ class Chef
328
193
  new_response
329
194
  end
330
195
 
331
- private_class_method :transform_list_response
332
-
196
+ private_class_method :transform_ohc_list_response
333
197
  end
334
198
  end