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
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 12.4.
|
4
|
+
version: 12.4.1
|
5
5
|
platform: universal-mingw32
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 12.4.
|
19
|
+
version: 12.4.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 12.4.
|
26
|
+
version: 12.4.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mixlib-cli
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -750,6 +750,7 @@ files:
|
|
750
750
|
- lib/chef.rb
|
751
751
|
- lib/chef/api_client.rb
|
752
752
|
- lib/chef/api_client/registration.rb
|
753
|
+
- lib/chef/api_client_v1.rb
|
753
754
|
- lib/chef/application.rb
|
754
755
|
- lib/chef/application/apply.rb
|
755
756
|
- lib/chef/application/client.rb
|
@@ -1133,13 +1134,15 @@ files:
|
|
1133
1134
|
- lib/chef/node_map.rb
|
1134
1135
|
- lib/chef/null_logger.rb
|
1135
1136
|
- lib/chef/org.rb
|
1136
|
-
- lib/chef/osc_user.rb
|
1137
1137
|
- lib/chef/platform.rb
|
1138
|
+
- lib/chef/platform/handler_map.rb
|
1138
1139
|
- lib/chef/platform/priority_map.rb
|
1140
|
+
- lib/chef/platform/provider_handler_map.rb
|
1139
1141
|
- lib/chef/platform/provider_mapping.rb
|
1140
1142
|
- lib/chef/platform/provider_priority_map.rb
|
1141
1143
|
- lib/chef/platform/query_helpers.rb
|
1142
1144
|
- lib/chef/platform/rebooter.rb
|
1145
|
+
- lib/chef/platform/resource_handler_map.rb
|
1143
1146
|
- lib/chef/platform/resource_priority_map.rb
|
1144
1147
|
- lib/chef/platform/service_helpers.rb
|
1145
1148
|
- lib/chef/policy_builder.rb
|
@@ -1375,6 +1378,7 @@ files:
|
|
1375
1378
|
- lib/chef/shell_out.rb
|
1376
1379
|
- lib/chef/tasks/chef_repo.rake
|
1377
1380
|
- lib/chef/user.rb
|
1381
|
+
- lib/chef/user_v1.rb
|
1378
1382
|
- lib/chef/util/backup.rb
|
1379
1383
|
- lib/chef/util/diff.rb
|
1380
1384
|
- lib/chef/util/dsc/configuration_generator.rb
|
@@ -1868,6 +1872,7 @@ files:
|
|
1868
1872
|
- spec/tiny_server.rb
|
1869
1873
|
- spec/unit/api_client/registration_spec.rb
|
1870
1874
|
- spec/unit/api_client_spec.rb
|
1875
|
+
- spec/unit/api_client_v1_spec.rb
|
1871
1876
|
- spec/unit/application/agent_spec.rb
|
1872
1877
|
- spec/unit/application/apply_spec.rb
|
1873
1878
|
- spec/unit/application/client_spec.rb
|
@@ -2082,7 +2087,6 @@ files:
|
|
2082
2087
|
- spec/unit/node_map_spec.rb
|
2083
2088
|
- spec/unit/node_spec.rb
|
2084
2089
|
- spec/unit/org_spec.rb
|
2085
|
-
- spec/unit/osc_user_spec.rb
|
2086
2090
|
- spec/unit/platform/query_helpers_spec.rb
|
2087
2091
|
- spec/unit/platform_spec.rb
|
2088
2092
|
- spec/unit/policy_builder/expand_node_object_spec.rb
|
@@ -2291,6 +2295,7 @@ files:
|
|
2291
2295
|
- spec/unit/shell_out_spec.rb
|
2292
2296
|
- spec/unit/shell_spec.rb
|
2293
2297
|
- spec/unit/user_spec.rb
|
2298
|
+
- spec/unit/user_v1_spec.rb
|
2294
2299
|
- spec/unit/util/backup_spec.rb
|
2295
2300
|
- spec/unit/util/diff_spec.rb
|
2296
2301
|
- spec/unit/util/dsc/configuration_generator_spec.rb
|
data/lib/chef/osc_user.rb
DELETED
@@ -1,194 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Steven Danna (steve@opscode.com)
|
3
|
-
# Copyright:: Copyright 2012 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
|
-
require 'chef/config'
|
19
|
-
require 'chef/mixin/params_validate'
|
20
|
-
require 'chef/mixin/from_file'
|
21
|
-
require 'chef/mash'
|
22
|
-
require 'chef/json_compat'
|
23
|
-
require 'chef/search/query'
|
24
|
-
|
25
|
-
# TODO
|
26
|
-
# DEPRECATION NOTE
|
27
|
-
# This class was previously Chef::User. It is the code to support the User object
|
28
|
-
# corrosponding to the Open Source Chef Server 11 and only still exists to support
|
29
|
-
# users still on OSC 11.
|
30
|
-
#
|
31
|
-
# Chef::User now supports Chef Server 12.
|
32
|
-
#
|
33
|
-
# New development should occur in Chef::User.
|
34
|
-
# This file and corrosponding osc_user knife files
|
35
|
-
# should be removed once client support for Open Source Chef Server 11 expires.
|
36
|
-
class Chef
|
37
|
-
class OscUser
|
38
|
-
|
39
|
-
include Chef::Mixin::FromFile
|
40
|
-
include Chef::Mixin::ParamsValidate
|
41
|
-
|
42
|
-
def initialize
|
43
|
-
@name = ''
|
44
|
-
@public_key = nil
|
45
|
-
@private_key = nil
|
46
|
-
@password = nil
|
47
|
-
@admin = false
|
48
|
-
end
|
49
|
-
|
50
|
-
def name(arg=nil)
|
51
|
-
set_or_return(:name, arg,
|
52
|
-
:regex => /^[a-z0-9\-_]+$/)
|
53
|
-
end
|
54
|
-
|
55
|
-
def admin(arg=nil)
|
56
|
-
set_or_return(:admin,
|
57
|
-
arg, :kind_of => [TrueClass, FalseClass])
|
58
|
-
end
|
59
|
-
|
60
|
-
def public_key(arg=nil)
|
61
|
-
set_or_return(:public_key,
|
62
|
-
arg, :kind_of => String)
|
63
|
-
end
|
64
|
-
|
65
|
-
def private_key(arg=nil)
|
66
|
-
set_or_return(:private_key,
|
67
|
-
arg, :kind_of => String)
|
68
|
-
end
|
69
|
-
|
70
|
-
def password(arg=nil)
|
71
|
-
set_or_return(:password,
|
72
|
-
arg, :kind_of => String)
|
73
|
-
end
|
74
|
-
|
75
|
-
def to_hash
|
76
|
-
result = {
|
77
|
-
"name" => @name,
|
78
|
-
"public_key" => @public_key,
|
79
|
-
"admin" => @admin
|
80
|
-
}
|
81
|
-
result["private_key"] = @private_key if @private_key
|
82
|
-
result["password"] = @password if @password
|
83
|
-
result
|
84
|
-
end
|
85
|
-
|
86
|
-
def to_json(*a)
|
87
|
-
Chef::JSONCompat.to_json(to_hash, *a)
|
88
|
-
end
|
89
|
-
|
90
|
-
def destroy
|
91
|
-
Chef::REST.new(Chef::Config[:chef_server_url]).delete_rest("users/#{@name}")
|
92
|
-
end
|
93
|
-
|
94
|
-
def create
|
95
|
-
payload = {:name => self.name, :admin => self.admin, :password => self.password }
|
96
|
-
payload[:public_key] = public_key if public_key
|
97
|
-
new_user =Chef::REST.new(Chef::Config[:chef_server_url]).post_rest("users", payload)
|
98
|
-
Chef::OscUser.from_hash(self.to_hash.merge(new_user))
|
99
|
-
end
|
100
|
-
|
101
|
-
def update(new_key=false)
|
102
|
-
payload = {:name => name, :admin => admin}
|
103
|
-
payload[:private_key] = new_key if new_key
|
104
|
-
payload[:password] = password if password
|
105
|
-
updated_user = Chef::REST.new(Chef::Config[:chef_server_url]).put_rest("users/#{name}", payload)
|
106
|
-
Chef::OscUser.from_hash(self.to_hash.merge(updated_user))
|
107
|
-
end
|
108
|
-
|
109
|
-
def save(new_key=false)
|
110
|
-
begin
|
111
|
-
create
|
112
|
-
rescue Net::HTTPServerException => e
|
113
|
-
if e.response.code == "409"
|
114
|
-
update(new_key)
|
115
|
-
else
|
116
|
-
raise e
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def reregister
|
122
|
-
r = Chef::REST.new(Chef::Config[:chef_server_url])
|
123
|
-
reregistered_self = r.put_rest("users/#{name}", { :name => name, :admin => admin, :private_key => true })
|
124
|
-
private_key(reregistered_self["private_key"])
|
125
|
-
self
|
126
|
-
end
|
127
|
-
|
128
|
-
def to_s
|
129
|
-
"user[#{@name}]"
|
130
|
-
end
|
131
|
-
|
132
|
-
def inspect
|
133
|
-
"Chef::OscUser name:'#{name}' admin:'#{admin.inspect}'" +
|
134
|
-
"public_key:'#{public_key}' private_key:#{private_key}"
|
135
|
-
end
|
136
|
-
|
137
|
-
# Class Methods
|
138
|
-
|
139
|
-
def self.from_hash(user_hash)
|
140
|
-
user = Chef::OscUser.new
|
141
|
-
user.name user_hash['name']
|
142
|
-
user.private_key user_hash['private_key'] if user_hash.key?('private_key')
|
143
|
-
user.password user_hash['password'] if user_hash.key?('password')
|
144
|
-
user.public_key user_hash['public_key']
|
145
|
-
user.admin user_hash['admin']
|
146
|
-
user
|
147
|
-
end
|
148
|
-
|
149
|
-
def self.from_json(json)
|
150
|
-
Chef::OscUser.from_hash(Chef::JSONCompat.from_json(json))
|
151
|
-
end
|
152
|
-
|
153
|
-
class << self
|
154
|
-
alias_method :json_create, :from_json
|
155
|
-
end
|
156
|
-
|
157
|
-
def self.list(inflate=false)
|
158
|
-
response = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest('users')
|
159
|
-
users = if response.is_a?(Array)
|
160
|
-
transform_ohc_list_response(response) # OHC/OPC
|
161
|
-
else
|
162
|
-
response # OSC
|
163
|
-
end
|
164
|
-
if inflate
|
165
|
-
users.inject({}) do |user_map, (name, _url)|
|
166
|
-
user_map[name] = Chef::OscUser.load(name)
|
167
|
-
user_map
|
168
|
-
end
|
169
|
-
else
|
170
|
-
users
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
def self.load(name)
|
175
|
-
response = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("users/#{name}")
|
176
|
-
Chef::OscUser.from_hash(response)
|
177
|
-
end
|
178
|
-
|
179
|
-
# Gross. Transforms an API response in the form of:
|
180
|
-
# [ { "user" => { "username" => USERNAME }}, ...]
|
181
|
-
# into the form
|
182
|
-
# { "USERNAME" => "URI" }
|
183
|
-
def self.transform_ohc_list_response(response)
|
184
|
-
new_response = Hash.new
|
185
|
-
response.each do |u|
|
186
|
-
name = u['user']['username']
|
187
|
-
new_response[name] = Chef::Config[:chef_server_url] + "/users/#{name}"
|
188
|
-
end
|
189
|
-
new_response
|
190
|
-
end
|
191
|
-
|
192
|
-
private_class_method :transform_ohc_list_response
|
193
|
-
end
|
194
|
-
end
|
data/spec/unit/osc_user_spec.rb
DELETED
@@ -1,276 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Steven Danna (steve@opscode.com)
|
3
|
-
# Copyright:: Copyright (c) 2012 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
|
-
# DEPRECATION NOTE
|
20
|
-
# This code only remains to support users still operating with
|
21
|
-
# Open Source Chef Server 11 and should be removed once support
|
22
|
-
# for OSC 11 ends. New development should occur in user_spec.rb.
|
23
|
-
|
24
|
-
require 'spec_helper'
|
25
|
-
|
26
|
-
require 'chef/osc_user'
|
27
|
-
require 'tempfile'
|
28
|
-
|
29
|
-
describe Chef::OscUser do
|
30
|
-
before(:each) do
|
31
|
-
@user = Chef::OscUser.new
|
32
|
-
end
|
33
|
-
|
34
|
-
describe "initialize" do
|
35
|
-
it "should be a Chef::OscUser" do
|
36
|
-
expect(@user).to be_a_kind_of(Chef::OscUser)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "name" do
|
41
|
-
it "should let you set the name to a string" do
|
42
|
-
expect(@user.name("ops_master")).to eq("ops_master")
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should return the current name" do
|
46
|
-
@user.name "ops_master"
|
47
|
-
expect(@user.name).to eq("ops_master")
|
48
|
-
end
|
49
|
-
|
50
|
-
# It is not feasible to check all invalid characters. Here are a few
|
51
|
-
# that we probably care about.
|
52
|
-
it "should not accept invalid characters" do
|
53
|
-
# capital letters
|
54
|
-
expect { @user.name "Bar" }.to raise_error(ArgumentError)
|
55
|
-
# slashes
|
56
|
-
expect { @user.name "foo/bar" }.to raise_error(ArgumentError)
|
57
|
-
# ?
|
58
|
-
expect { @user.name "foo?" }.to raise_error(ArgumentError)
|
59
|
-
# &
|
60
|
-
expect { @user.name "foo&" }.to raise_error(ArgumentError)
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
it "should not accept spaces" do
|
65
|
-
expect { @user.name "ops master" }.to raise_error(ArgumentError)
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should throw an ArgumentError if you feed it anything but a string" do
|
69
|
-
expect { @user.name Hash.new }.to raise_error(ArgumentError)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "admin" do
|
74
|
-
it "should let you set the admin bit" do
|
75
|
-
expect(@user.admin(true)).to eq(true)
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should return the current admin value" do
|
79
|
-
@user.admin true
|
80
|
-
expect(@user.admin).to eq(true)
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should default to false" do
|
84
|
-
expect(@user.admin).to eq(false)
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should throw an ArgumentError if you feed it anything but true or false" do
|
88
|
-
expect { @user.name Hash.new }.to raise_error(ArgumentError)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe "public_key" do
|
93
|
-
it "should let you set the public key" do
|
94
|
-
expect(@user.public_key("super public")).to eq("super public")
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should return the current public key" do
|
98
|
-
@user.public_key("super public")
|
99
|
-
expect(@user.public_key).to eq("super public")
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should throw an ArgumentError if you feed it something lame" do
|
103
|
-
expect { @user.public_key Hash.new }.to raise_error(ArgumentError)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe "private_key" do
|
108
|
-
it "should let you set the private key" do
|
109
|
-
expect(@user.private_key("super private")).to eq("super private")
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should return the private key" do
|
113
|
-
@user.private_key("super private")
|
114
|
-
expect(@user.private_key).to eq("super private")
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should throw an ArgumentError if you feed it something lame" do
|
118
|
-
expect { @user.private_key Hash.new }.to raise_error(ArgumentError)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
describe "when serializing to JSON" do
|
123
|
-
before(:each) do
|
124
|
-
@user.name("black")
|
125
|
-
@user.public_key("crowes")
|
126
|
-
@json = @user.to_json
|
127
|
-
end
|
128
|
-
|
129
|
-
it "serializes as a JSON object" do
|
130
|
-
expect(@json).to match(/^\{.+\}$/)
|
131
|
-
end
|
132
|
-
|
133
|
-
it "includes the name value" do
|
134
|
-
expect(@json).to include(%q{"name":"black"})
|
135
|
-
end
|
136
|
-
|
137
|
-
it "includes the public key value" do
|
138
|
-
expect(@json).to include(%{"public_key":"crowes"})
|
139
|
-
end
|
140
|
-
|
141
|
-
it "includes the 'admin' flag" do
|
142
|
-
expect(@json).to include(%q{"admin":false})
|
143
|
-
end
|
144
|
-
|
145
|
-
it "includes the private key when present" do
|
146
|
-
@user.private_key("monkeypants")
|
147
|
-
expect(@user.to_json).to include(%q{"private_key":"monkeypants"})
|
148
|
-
end
|
149
|
-
|
150
|
-
it "does not include the private key if not present" do
|
151
|
-
expect(@json).not_to include("private_key")
|
152
|
-
end
|
153
|
-
|
154
|
-
it "includes the password if present" do
|
155
|
-
@user.password "password"
|
156
|
-
expect(@user.to_json).to include(%q{"password":"password"})
|
157
|
-
end
|
158
|
-
|
159
|
-
it "does not include the password if not present" do
|
160
|
-
expect(@json).not_to include("password")
|
161
|
-
end
|
162
|
-
|
163
|
-
include_examples "to_json equivalent to Chef::JSONCompat.to_json" do
|
164
|
-
let(:jsonable) { @user }
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
describe "when deserializing from JSON" do
|
169
|
-
before(:each) do
|
170
|
-
user = { "name" => "mr_spinks",
|
171
|
-
"public_key" => "turtles",
|
172
|
-
"private_key" => "pandas",
|
173
|
-
"password" => "password",
|
174
|
-
"admin" => true }
|
175
|
-
@user = Chef::OscUser.from_json(Chef::JSONCompat.to_json(user))
|
176
|
-
end
|
177
|
-
|
178
|
-
it "should deserialize to a Chef::OscUser object" do
|
179
|
-
expect(@user).to be_a_kind_of(Chef::OscUser)
|
180
|
-
end
|
181
|
-
|
182
|
-
it "preserves the name" do
|
183
|
-
expect(@user.name).to eq("mr_spinks")
|
184
|
-
end
|
185
|
-
|
186
|
-
it "preserves the public key" do
|
187
|
-
expect(@user.public_key).to eq("turtles")
|
188
|
-
end
|
189
|
-
|
190
|
-
it "preserves the admin status" do
|
191
|
-
expect(@user.admin).to be_truthy
|
192
|
-
end
|
193
|
-
|
194
|
-
it "includes the private key if present" do
|
195
|
-
expect(@user.private_key).to eq("pandas")
|
196
|
-
end
|
197
|
-
|
198
|
-
it "includes the password if present" do
|
199
|
-
expect(@user.password).to eq("password")
|
200
|
-
end
|
201
|
-
|
202
|
-
end
|
203
|
-
|
204
|
-
describe "API Interactions" do
|
205
|
-
before (:each) do
|
206
|
-
@user = Chef::OscUser.new
|
207
|
-
@user.name "foobar"
|
208
|
-
@http_client = double("Chef::REST mock")
|
209
|
-
allow(Chef::REST).to receive(:new).and_return(@http_client)
|
210
|
-
end
|
211
|
-
|
212
|
-
describe "list" do
|
213
|
-
before(:each) do
|
214
|
-
Chef::Config[:chef_server_url] = "http://www.example.com"
|
215
|
-
@osc_response = { "admin" => "http://www.example.com/users/admin"}
|
216
|
-
@ohc_response = [ { "user" => { "username" => "admin" }} ]
|
217
|
-
allow(Chef::OscUser).to receive(:load).with("admin").and_return(@user)
|
218
|
-
@osc_inflated_response = { "admin" => @user }
|
219
|
-
end
|
220
|
-
|
221
|
-
it "lists all clients on an OSC server" do
|
222
|
-
allow(@http_client).to receive(:get_rest).with("users").and_return(@osc_response)
|
223
|
-
expect(Chef::OscUser.list).to eq(@osc_response)
|
224
|
-
end
|
225
|
-
|
226
|
-
it "inflate all clients on an OSC server" do
|
227
|
-
allow(@http_client).to receive(:get_rest).with("users").and_return(@osc_response)
|
228
|
-
expect(Chef::OscUser.list(true)).to eq(@osc_inflated_response)
|
229
|
-
end
|
230
|
-
|
231
|
-
it "lists all clients on an OHC/OPC server" do
|
232
|
-
allow(@http_client).to receive(:get_rest).with("users").and_return(@ohc_response)
|
233
|
-
# We expect that Chef::OscUser.list will give a consistent response
|
234
|
-
# so OHC API responses should be transformed to OSC-style output.
|
235
|
-
expect(Chef::OscUser.list).to eq(@osc_response)
|
236
|
-
end
|
237
|
-
|
238
|
-
it "inflate all clients on an OHC/OPC server" do
|
239
|
-
allow(@http_client).to receive(:get_rest).with("users").and_return(@ohc_response)
|
240
|
-
expect(Chef::OscUser.list(true)).to eq(@osc_inflated_response)
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
describe "create" do
|
245
|
-
it "creates a new user via the API" do
|
246
|
-
@user.password "password"
|
247
|
-
expect(@http_client).to receive(:post_rest).with("users", {:name => "foobar", :admin => false, :password => "password"}).and_return({})
|
248
|
-
@user.create
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
describe "read" do
|
253
|
-
it "loads a named user from the API" do
|
254
|
-
expect(@http_client).to receive(:get_rest).with("users/foobar").and_return({"name" => "foobar", "admin" => true, "public_key" => "pubkey"})
|
255
|
-
user = Chef::OscUser.load("foobar")
|
256
|
-
expect(user.name).to eq("foobar")
|
257
|
-
expect(user.admin).to eq(true)
|
258
|
-
expect(user.public_key).to eq("pubkey")
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
describe "update" do
|
263
|
-
it "updates an existing user on via the API" do
|
264
|
-
expect(@http_client).to receive(:put_rest).with("users/foobar", {:name => "foobar", :admin => false}).and_return({})
|
265
|
-
@user.update
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
describe "destroy" do
|
270
|
-
it "deletes the specified user via the API" do
|
271
|
-
expect(@http_client).to receive(:delete_rest).with("users/foobar")
|
272
|
-
@user.destroy
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|