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.
- checksums.yaml +4 -4
- data/lib/chef/api_client.rb +31 -129
- data/lib/chef/api_client_v1.rb +325 -0
- data/lib/chef/chef_class.rb +15 -7
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +2 -2
- data/lib/chef/dsl/resources.rb +6 -4
- data/lib/chef/exceptions.rb +2 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +2 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +4 -4
- data/lib/chef/knife/client_bulk_delete.rb +2 -2
- data/lib/chef/knife/client_create.rb +4 -4
- data/lib/chef/knife/client_delete.rb +3 -3
- data/lib/chef/knife/client_edit.rb +10 -2
- data/lib/chef/knife/client_list.rb +2 -2
- data/lib/chef/knife/client_reregister.rb +2 -2
- data/lib/chef/knife/client_show.rb +2 -2
- data/lib/chef/knife/osc_user_create.rb +3 -3
- data/lib/chef/knife/osc_user_delete.rb +2 -2
- data/lib/chef/knife/osc_user_edit.rb +3 -3
- data/lib/chef/knife/osc_user_list.rb +2 -2
- data/lib/chef/knife/osc_user_reregister.rb +2 -2
- data/lib/chef/knife/osc_user_show.rb +2 -2
- data/lib/chef/knife/user_create.rb +3 -3
- data/lib/chef/knife/user_delete.rb +4 -4
- data/lib/chef/knife/user_edit.rb +3 -3
- data/lib/chef/knife/user_list.rb +2 -2
- data/lib/chef/knife/user_reregister.rb +2 -2
- data/lib/chef/knife/user_show.rb +2 -2
- data/lib/chef/node_map.rb +14 -18
- data/lib/chef/platform/handler_map.rb +45 -0
- data/lib/chef/platform/priority_map.rb +19 -32
- data/lib/chef/platform/provider_handler_map.rb +29 -0
- data/lib/chef/platform/provider_mapping.rb +3 -2
- data/lib/chef/platform/resource_handler_map.rb +29 -0
- data/lib/chef/platform/resource_priority_map.rb +0 -6
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/dsc_resource.rb +2 -2
- data/lib/chef/provider/dsc_script.rb +1 -1
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/package.rb +0 -31
- data/lib/chef/provider/package/aix.rb +1 -0
- data/lib/chef/provider/package/apt.rb +1 -0
- data/lib/chef/provider/package/homebrew.rb +1 -0
- data/lib/chef/provider/package/ips.rb +1 -0
- data/lib/chef/provider/package/macports.rb +1 -0
- data/lib/chef/provider/package/openbsd.rb +1 -0
- data/lib/chef/provider/package/pacman.rb +1 -0
- data/lib/chef/provider/package/paludis.rb +1 -0
- data/lib/chef/provider/package/portage.rb +2 -0
- data/lib/chef/provider/package/smartos.rb +1 -0
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/yum.rb +1 -0
- data/lib/chef/provider/package/zypper.rb +1 -0
- data/lib/chef/provider/service.rb +4 -22
- data/lib/chef/provider/service/debian.rb +2 -0
- data/lib/chef/provider/service/insserv.rb +2 -0
- data/lib/chef/provider/service/invokercd.rb +2 -0
- data/lib/chef/provider/service/openbsd.rb +1 -1
- data/lib/chef/provider/service/redhat.rb +2 -0
- data/lib/chef/provider/service/upstart.rb +3 -0
- data/lib/chef/provider_resolver.rb +59 -53
- data/lib/chef/resource.rb +22 -73
- data/lib/chef/resource/dsc_script.rb +1 -1
- data/lib/chef/resource/ips_package.rb +1 -0
- data/lib/chef/resource/mount.rb +8 -0
- data/lib/chef/resource/openbsd_package.rb +0 -11
- data/lib/chef/resource/solaris_package.rb +1 -4
- data/lib/chef/resource_resolver.rb +54 -26
- data/lib/chef/run_list/versioned_recipe_list.rb +6 -5
- data/lib/chef/user.rb +52 -188
- data/lib/chef/user_v1.rb +335 -0
- data/lib/chef/version.rb +1 -1
- data/spec/data/trusted_certs/opscode.pem +53 -56
- data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +1 -1
- data/spec/functional/resource/package_spec.rb +0 -2
- data/spec/integration/recipes/recipe_dsl_spec.rb +661 -126
- data/spec/spec_helper.rb +19 -13
- data/spec/support/shared/unit/api_versioning.rb +2 -2
- data/spec/unit/api_client_spec.rb +22 -201
- data/spec/unit/api_client_v1_spec.rb +457 -0
- data/spec/unit/knife/client_bulk_delete_spec.rb +4 -4
- data/spec/unit/knife/client_create_spec.rb +1 -1
- data/spec/unit/knife/client_delete_spec.rb +3 -3
- data/spec/unit/knife/client_edit_spec.rb +14 -1
- data/spec/unit/knife/client_list_spec.rb +1 -1
- data/spec/unit/knife/client_reregister_spec.rb +2 -2
- data/spec/unit/knife/client_show_spec.rb +2 -2
- data/spec/unit/knife/osc_user_create_spec.rb +5 -5
- data/spec/unit/knife/osc_user_delete_spec.rb +1 -1
- data/spec/unit/knife/osc_user_edit_spec.rb +1 -1
- data/spec/unit/knife/osc_user_list_spec.rb +1 -1
- data/spec/unit/knife/osc_user_reregister_spec.rb +1 -1
- data/spec/unit/knife/osc_user_show_spec.rb +1 -1
- data/spec/unit/knife/user_create_spec.rb +1 -1
- data/spec/unit/knife/user_delete_spec.rb +2 -2
- data/spec/unit/knife/user_edit_spec.rb +2 -2
- data/spec/unit/knife/user_list_spec.rb +1 -1
- data/spec/unit/knife/user_reregister_spec.rb +1 -1
- data/spec/unit/knife/user_show_spec.rb +2 -2
- data/spec/unit/lwrp_spec.rb +146 -134
- data/spec/unit/node_map_spec.rb +12 -0
- data/spec/unit/platform_spec.rb +1 -1
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/dsc_resource_spec.rb +3 -3
- data/spec/unit/provider/dsc_script_spec.rb +2 -2
- data/spec/unit/provider_resolver_spec.rb +170 -135
- data/spec/unit/recipe_spec.rb +3 -3
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/cron_spec.rb +1 -1
- data/spec/unit/resource/directory_spec.rb +1 -1
- data/spec/unit/resource/dsc_resource_spec.rb +1 -1
- data/spec/unit/resource/dsc_script_spec.rb +2 -2
- data/spec/unit/resource/env_spec.rb +1 -1
- data/spec/unit/resource/erl_call_spec.rb +1 -1
- data/spec/unit/resource/file_spec.rb +1 -1
- data/spec/unit/resource/group_spec.rb +1 -1
- data/spec/unit/resource/link_spec.rb +1 -1
- data/spec/unit/resource/mdadm_spec.rb +1 -1
- data/spec/unit/resource/mount_spec.rb +1 -1
- data/spec/unit/resource/ohai_spec.rb +1 -1
- data/spec/unit/resource/registry_key_spec.rb +1 -1
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +3 -3
- data/spec/unit/resource/user_spec.rb +1 -1
- data/spec/unit/resource/windows_service_spec.rb +1 -1
- data/spec/unit/resource_resolver_spec.rb +8 -4
- data/spec/unit/resource_spec.rb +89 -3
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +115 -48
- data/spec/unit/user_spec.rb +97 -405
- data/spec/unit/user_v1_spec.rb +584 -0
- metadata +11 -6
- data/lib/chef/osc_user.rb +0 -194
- data/spec/unit/osc_user_spec.rb +0 -276
data/lib/chef/resource/mount.rb
CHANGED
@@ -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"
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
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
|
-
|
73
|
+
qualified_recipe = if recipe_name.include?('::')
|
74
74
|
recipe_name
|
75
75
|
else
|
76
76
|
"#{recipe_name}::default"
|
77
77
|
end
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
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
|
-
#
|
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
|
-
#
|
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
|
-
#
|
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
|
-
@
|
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
|
58
|
-
@
|
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
|
66
|
-
set_or_return(:
|
55
|
+
def name(arg=nil)
|
56
|
+
set_or_return(:name, arg,
|
67
57
|
:regex => /^[a-z0-9\-_]+$/)
|
68
58
|
end
|
69
59
|
|
70
|
-
def
|
71
|
-
set_or_return(:
|
72
|
-
arg, :kind_of =>
|
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
|
-
"
|
82
|
+
"name" => @name,
|
83
|
+
"public_key" => @public_key,
|
84
|
+
"admin" => @admin
|
123
85
|
}
|
124
|
-
result["
|
125
|
-
result["
|
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
|
-
|
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
|
-
|
147
|
-
|
148
|
-
|
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
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
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
|
-
|
239
|
-
|
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[#{@
|
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.
|
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.
|
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 =
|
162
|
+
response = Chef::ServerAPI.new(Chef::Config[:chef_server_url], {:api_version => "0"}).get('users')
|
290
163
|
users = if response.is_a?(Array)
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
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(
|
313
|
-
|
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.
|
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 :
|
332
|
-
|
196
|
+
private_class_method :transform_ohc_list_response
|
333
197
|
end
|
334
198
|
end
|