chef 12.4.0-universal-mingw32 → 12.4.1-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- 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
|