chef 16.3.45-universal-mingw32 → 16.4.35-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 (199) hide show
  1. checksums.yaml +4 -4
  2. data/chef-universal-mingw32.gemspec +0 -1
  3. data/lib/chef/action_collection.rb +4 -0
  4. data/lib/chef/api_client/registration.rb +2 -2
  5. data/lib/chef/application.rb +1 -1
  6. data/lib/chef/application/apply.rb +5 -5
  7. data/lib/chef/application/windows_service.rb +27 -27
  8. data/lib/chef/chef_class.rb +0 -1
  9. data/lib/chef/chef_fs/chef_fs_data_store.rb +54 -54
  10. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
  11. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
  12. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
  13. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  14. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
  16. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  18. data/lib/chef/client.rb +11 -11
  19. data/lib/chef/data_collector/run_end_message.rb +11 -1
  20. data/lib/chef/dsl/platform_introspection.rb +8 -8
  21. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  22. data/lib/chef/environment.rb +2 -2
  23. data/lib/chef/exceptions.rb +1 -1
  24. data/lib/chef/file_content_management/tempfile.rb +9 -9
  25. data/lib/chef/http.rb +2 -1
  26. data/lib/chef/json_compat.rb +1 -1
  27. data/lib/chef/knife/bootstrap.rb +2 -2
  28. data/lib/chef/knife/cookbook_download.rb +1 -1
  29. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  30. data/lib/chef/knife/cookbook_upload.rb +23 -23
  31. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  32. data/lib/chef/knife/core/hashed_command_loader.rb +2 -2
  33. data/lib/chef/knife/core/windows_bootstrap_context.rb +32 -24
  34. data/lib/chef/knife/delete.rb +15 -15
  35. data/lib/chef/knife/exec.rb +2 -2
  36. data/lib/chef/knife/ssh.rb +6 -6
  37. data/lib/chef/knife/xargs.rb +19 -19
  38. data/lib/chef/knife/yaml_convert.rb +1 -1
  39. data/lib/chef/mixin/checksum.rb +0 -1
  40. data/lib/chef/mixin/deep_merge.rb +35 -6
  41. data/lib/chef/mixin/openssl_helper.rb +3 -1
  42. data/lib/chef/mixin/shell_out.rb +1 -1
  43. data/lib/chef/mixin/which.rb +1 -1
  44. data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
  45. data/lib/chef/node/attribute.rb +2 -4
  46. data/lib/chef/platform/service_helpers.rb +1 -1
  47. data/lib/chef/property.rb +1 -1
  48. data/lib/chef/provider/cron/unix.rb +0 -2
  49. data/lib/chef/provider/git.rb +5 -5
  50. data/lib/chef/provider/group.rb +0 -2
  51. data/lib/chef/provider/group/suse.rb +5 -5
  52. data/lib/chef/provider/ifconfig.rb +1 -4
  53. data/lib/chef/provider/mount.rb +0 -2
  54. data/lib/chef/provider/package.rb +0 -2
  55. data/lib/chef/provider/package/rubygems.rb +1 -1
  56. data/lib/chef/provider/package/snap.rb +1 -1
  57. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -9
  58. data/lib/chef/provider/powershell_script.rb +21 -5
  59. data/lib/chef/provider/route.rb +1 -1
  60. data/lib/chef/provider/service/arch.rb +1 -1
  61. data/lib/chef/provider/service/debian.rb +1 -1
  62. data/lib/chef/provider/service/gentoo.rb +2 -2
  63. data/lib/chef/provider/service/macosx.rb +2 -2
  64. data/lib/chef/provider/service/openbsd.rb +1 -4
  65. data/lib/chef/provider/service/redhat.rb +2 -2
  66. data/lib/chef/provider/service/upstart.rb +1 -1
  67. data/lib/chef/provider/service/windows.rb +10 -10
  68. data/lib/chef/provider/systemd_unit.rb +0 -2
  69. data/lib/chef/provider/template/content.rb +1 -0
  70. data/lib/chef/provider/user/dscl.rb +2 -2
  71. data/lib/chef/provider/user/mac.rb +9 -9
  72. data/lib/chef/provider/windows_task.rb +0 -3
  73. data/lib/chef/provider/zypper_repository.rb +0 -1
  74. data/lib/chef/providers.rb +0 -1
  75. data/lib/chef/recipe.rb +1 -1
  76. data/lib/chef/resource.rb +6 -10
  77. data/lib/chef/resource/apt_repository.rb +1 -10
  78. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  79. data/lib/chef/resource/chef_vault_secret.rb +13 -13
  80. data/lib/chef/resource/execute.rb +2 -3
  81. data/lib/chef/resource/homebrew_update.rb +2 -2
  82. data/lib/chef/resource/openssl_dhparam.rb +2 -0
  83. data/lib/chef/resource/openssl_ec_private_key.rb +2 -0
  84. data/lib/chef/resource/openssl_ec_public_key.rb +2 -0
  85. data/lib/chef/resource/openssl_rsa_private_key.rb +2 -0
  86. data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
  87. data/lib/chef/resource/openssl_x509_certificate.rb +24 -21
  88. data/lib/chef/resource/openssl_x509_crl.rb +2 -0
  89. data/lib/chef/resource/openssl_x509_request.rb +23 -20
  90. data/lib/chef/resource/osx_profile.rb +227 -5
  91. data/lib/chef/resource/powershell_package_source.rb +1 -1
  92. data/lib/chef/resource/powershell_script.rb +24 -30
  93. data/lib/chef/resource/sudo.rb +1 -1
  94. data/lib/chef/resource/sysctl.rb +5 -5
  95. data/lib/chef/resource/windows_ad_join.rb +2 -0
  96. data/lib/chef/resource/windows_audit_policy.rb +3 -0
  97. data/lib/chef/resource/windows_auto_run.rb +2 -0
  98. data/lib/chef/resource/windows_certificate.rb +2 -0
  99. data/lib/chef/resource/windows_dfs_folder.rb +2 -0
  100. data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
  101. data/lib/chef/resource/windows_dfs_server.rb +2 -0
  102. data/lib/chef/resource/windows_dns_record.rb +10 -7
  103. data/lib/chef/resource/windows_dns_zone.rb +12 -7
  104. data/lib/chef/resource/windows_feature.rb +2 -0
  105. data/lib/chef/resource/windows_feature_dism.rb +10 -0
  106. data/lib/chef/resource/windows_feature_powershell.rb +14 -2
  107. data/lib/chef/resource/windows_firewall_profile.rb +4 -2
  108. data/lib/chef/resource/windows_firewall_rule.rb +5 -3
  109. data/lib/chef/resource/windows_font.rb +3 -1
  110. data/lib/chef/resource/windows_pagefile.rb +4 -0
  111. data/lib/chef/resource/windows_printer.rb +17 -18
  112. data/lib/chef/resource/windows_printer_port.rb +14 -13
  113. data/lib/chef/resource/windows_security_policy.rb +2 -0
  114. data/lib/chef/resource/windows_share.rb +5 -3
  115. data/lib/chef/resource/windows_shortcut.rb +2 -0
  116. data/lib/chef/resource/windows_uac.rb +2 -0
  117. data/lib/chef/resource/windows_user_privilege.rb +2 -0
  118. data/lib/chef/resource/windows_workgroup.rb +2 -3
  119. data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
  120. data/lib/chef/role.rb +2 -2
  121. data/lib/chef/run_context/cookbook_compiler.rb +20 -20
  122. data/lib/chef/run_status.rb +2 -6
  123. data/lib/chef/shell.rb +1 -1
  124. data/lib/chef/util/backup.rb +1 -1
  125. data/lib/chef/util/diff.rb +11 -11
  126. data/lib/chef/util/powershell/cmdlet.rb +1 -1
  127. data/lib/chef/version.rb +1 -1
  128. data/lib/chef/win32/file.rb +2 -2
  129. data/lib/chef/win32/file/version_info.rb +5 -5
  130. data/spec/data/ssl/chef-rspec.cert +15 -15
  131. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  132. data/spec/functional/resource/bff_spec.rb +2 -2
  133. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  134. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  135. data/spec/functional/resource/dsc_script_spec.rb +0 -1
  136. data/spec/functional/resource/group_spec.rb +6 -6
  137. data/spec/functional/resource/insserv_spec.rb +4 -4
  138. data/spec/functional/resource/link_spec.rb +20 -20
  139. data/spec/functional/resource/powershell_script_spec.rb +4 -4
  140. data/spec/functional/resource/rpm_spec.rb +2 -2
  141. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  142. data/spec/functional/resource/windows_font_spec.rb +49 -0
  143. data/spec/functional/resource/windows_security_policy_spec.rb +0 -3
  144. data/spec/functional/run_lock_spec.rb +24 -24
  145. data/spec/functional/win32/registry_spec.rb +8 -8
  146. data/spec/functional/win32/service_manager_spec.rb +1 -1
  147. data/spec/integration/knife/common_options_spec.rb +12 -12
  148. data/spec/integration/knife/config_get_profile_spec.rb +69 -68
  149. data/spec/integration/knife/config_get_spec.rb +126 -125
  150. data/spec/integration/knife/config_list_profiles_spec.rb +181 -180
  151. data/spec/integration/knife/config_use_profile_spec.rb +110 -109
  152. data/spec/integration/knife/diff_spec.rb +3 -1
  153. data/spec/integration/knife/download_spec.rb +3 -1
  154. data/spec/integration/knife/serve_spec.rb +5 -5
  155. data/spec/integration/knife/upload_spec.rb +3 -1
  156. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  157. data/spec/spec_helper.rb +6 -6
  158. data/spec/support/platform_helpers.rb +9 -9
  159. data/spec/support/platforms/win32/spec_service.rb +1 -1
  160. data/spec/support/shared/functional/directory_resource.rb +1 -1
  161. data/spec/support/shared/functional/execute_resource.rb +1 -1
  162. data/spec/support/shared/functional/file_resource.rb +20 -20
  163. data/spec/support/shared/functional/win32_service.rb +1 -1
  164. data/spec/support/shared/functional/windows_script.rb +3 -3
  165. data/spec/support/shared/integration/integration_helper.rb +22 -52
  166. data/spec/support/shared/unit/script_resource.rb +6 -20
  167. data/spec/support/shared/unit/windows_script_resource.rb +15 -28
  168. data/spec/unit/data_collector_spec.rb +22 -0
  169. data/spec/unit/environment_spec.rb +7 -7
  170. data/spec/unit/knife/bootstrap_spec.rb +14 -14
  171. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  172. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  173. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  174. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
  175. data/spec/unit/knife/supermarket_share_spec.rb +1 -1
  176. data/spec/unit/mixin/template_spec.rb +30 -30
  177. data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
  178. data/spec/unit/node/immutable_collections_spec.rb +6 -2
  179. data/spec/unit/node_spec.rb +5 -5
  180. data/spec/unit/provider/powershell_script_spec.rb +11 -4
  181. data/spec/unit/provider/remote_directory_spec.rb +9 -9
  182. data/spec/unit/provider/service/arch_service_spec.rb +3 -2
  183. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  184. data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
  185. data/spec/unit/provider/service/macosx_spec.rb +3 -3
  186. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  187. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  188. data/spec/unit/provider_resolver_spec.rb +6 -6
  189. data/spec/unit/resource/batch_spec.rb +6 -6
  190. data/spec/unit/resource/execute_spec.rb +113 -118
  191. data/spec/unit/resource/osx_profile_spec.rb +233 -0
  192. data/spec/unit/resource/powershell_script_spec.rb +11 -29
  193. data/spec/unit/resource/script_spec.rb +6 -1
  194. data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
  195. data/spec/unit/role_spec.rb +11 -11
  196. data/tasks/rspec.rb +1 -1
  197. metadata +7 -22
  198. data/lib/chef/provider/osx_profile.rb +0 -255
  199. data/spec/unit/provider/osx_profile_spec.rb +0 -255
@@ -30,7 +30,7 @@ begin
30
30
  %w{chef-utils chef-config}.each do |gem|
31
31
  Dir.chdir(gem) do
32
32
  Bundler.with_unbundled_env do
33
- sh("bundle install")
33
+ sh("bundle install --jobs=3 --retry=3")
34
34
  sh("bundle exec rake spec")
35
35
  end
36
36
  end
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: 16.3.45
4
+ version: 16.4.35
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: 2020-07-29 00:00:00.000000000 Z
11
+ date: 2020-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-config
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 16.3.45
19
+ version: 16.4.35
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: 16.3.45
26
+ version: 16.4.35
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: chef-utils
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 16.3.45
33
+ version: 16.4.35
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 16.3.45
40
+ version: 16.4.35
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: train-core
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -578,20 +578,6 @@ dependencies:
578
578
  - - "~>"
579
579
  - !ruby/object:Gem::Version
580
580
  version: 1.5.3
581
- - !ruby/object:Gem::Dependency
582
- name: win32-dir
583
- requirement: !ruby/object:Gem::Requirement
584
- requirements:
585
- - - "~>"
586
- - !ruby/object:Gem::Version
587
- version: 0.5.0
588
- type: :runtime
589
- prerelease: false
590
- version_requirements: !ruby/object:Gem::Requirement
591
- requirements:
592
- - - "~>"
593
- - !ruby/object:Gem::Version
594
- version: 0.5.0
595
581
  - !ruby/object:Gem::Dependency
596
582
  name: win32-event
597
583
  requirement: !ruby/object:Gem::Requirement
@@ -1290,7 +1276,6 @@ files:
1290
1276
  - lib/chef/provider/mount/solaris.rb
1291
1277
  - lib/chef/provider/mount/windows.rb
1292
1278
  - lib/chef/provider/noop.rb
1293
- - lib/chef/provider/osx_profile.rb
1294
1279
  - lib/chef/provider/package.rb
1295
1280
  - lib/chef/provider/package/apt.rb
1296
1281
  - lib/chef/provider/package/bff.rb
@@ -2145,6 +2130,7 @@ files:
2145
2130
  - spec/functional/resource/user/windows_spec.rb
2146
2131
  - spec/functional/resource/windows_certificate_spec.rb
2147
2132
  - spec/functional/resource/windows_env_spec.rb
2133
+ - spec/functional/resource/windows_font_spec.rb
2148
2134
  - spec/functional/resource/windows_package_spec.rb
2149
2135
  - spec/functional/resource/windows_path_spec.rb
2150
2136
  - spec/functional/resource/windows_security_policy_spec.rb
@@ -2591,7 +2577,6 @@ files:
2591
2577
  - spec/unit/provider/mount/solaris_spec.rb
2592
2578
  - spec/unit/provider/mount/windows_spec.rb
2593
2579
  - spec/unit/provider/mount_spec.rb
2594
- - spec/unit/provider/osx_profile_spec.rb
2595
2580
  - spec/unit/provider/package/apt_spec.rb
2596
2581
  - spec/unit/provider/package/bff_spec.rb
2597
2582
  - spec/unit/provider/package/cab_spec.rb
@@ -1,255 +0,0 @@
1
- #
2
- # Author:: Nate Walck (<nate.walck@gmail.com>)
3
- # Copyright:: Copyright 2015-2016, Facebook, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require_relative "../log"
20
- require_relative "../provider"
21
- require_relative "../resource"
22
- require_relative "../resource/file"
23
- require "uuidtools"
24
- require "plist"
25
-
26
- class Chef
27
- class Provider
28
- class OsxProfile < Chef::Provider
29
- provides :osx_profile
30
- provides :osx_config_profile
31
-
32
- def load_current_resource
33
- @current_resource = Chef::Resource::OsxProfile.new(new_resource.name)
34
- current_resource.profile_name(new_resource.profile_name)
35
-
36
- all_profiles = get_installed_profiles
37
- # FIXME: stop mutating the desired state
38
- new_resource.profile(
39
- new_resource.profile ||
40
- new_resource.profile_name
41
- )
42
-
43
- @new_profile_hash = get_profile_hash(new_resource.profile)
44
- if @new_profile_hash
45
- @new_profile_hash["PayloadUUID"] =
46
- config_uuid(@new_profile_hash)
47
- end
48
-
49
- if @new_profile_hash
50
- @new_profile_identifier = @new_profile_hash["PayloadIdentifier"]
51
- else
52
- @new_profile_identifier = new_resource.identifier ||
53
- new_resource.profile_name
54
- end
55
-
56
- current_profile = nil
57
- if all_profiles && all_profiles.key?("_computerlevel")
58
- current_profile = all_profiles["_computerlevel"].find do |item|
59
- item["ProfileIdentifier"] == @new_profile_identifier
60
- end
61
- end
62
- current_resource.profile(current_profile)
63
- end
64
-
65
- def define_resource_requirements
66
- requirements.assert(:remove) do |a|
67
- if @new_profile_identifier
68
- a.assertion do
69
- !@new_profile_identifier.nil? &&
70
- !@new_profile_identifier.end_with?(".mobileconfig") &&
71
- /^\w+(?:(\.| )\w+)+$/.match(@new_profile_identifier)
72
- end
73
- a.failure_message RuntimeError, "when removing using the identifier property, it must match the profile identifier"
74
- else
75
- new_profile_name = new_resource.profile_name
76
- a.assertion do
77
- !new_profile_name.end_with?(".mobileconfig") &&
78
- /^\w+(?:(\.| )\w+)+$/.match(new_profile_name)
79
- end
80
- a.failure_message RuntimeError, "When removing by resource name, it must match the profile identifier "
81
- end
82
- end
83
-
84
- requirements.assert(:install) do |a|
85
- if @new_profile_hash.is_a?(Hash)
86
- a.assertion do
87
- @new_profile_hash.include?("PayloadIdentifier")
88
- end
89
- a.failure_message RuntimeError, "The specified profile does not seem to be valid"
90
- end
91
- if @new_profile_hash.is_a?(String)
92
- a.assertion do
93
- @new_profile_hash.end_with?(".mobileconfig")
94
- end
95
- a.failure_message RuntimeError, "#{new_profile_hash}' is not a valid profile"
96
- end
97
- end
98
- end
99
-
100
- action :install do
101
- unless profile_installed?
102
- converge_by("install profile #{@new_profile_identifier}") do
103
- profile_path = write_profile_to_disk
104
- install_profile(profile_path)
105
- get_installed_profiles(true)
106
- end
107
- end
108
- end
109
-
110
- action :remove do
111
- # Clean up profile after removing it
112
- if profile_installed?
113
- converge_by("remove profile #{@new_profile_identifier}") do
114
- remove_profile
115
- get_installed_profiles(true)
116
- end
117
- end
118
- end
119
-
120
- def load_profile_hash(new_profile)
121
- # file must exist in cookbook
122
- if new_profile.end_with?(".mobileconfig")
123
- unless cookbook_file_available?(new_profile)
124
- error_string = "#{self}: '#{new_profile}' not found in cookbook"
125
- raise Chef::Exceptions::FileNotFound, error_string
126
- end
127
- cookbook_profile = cache_cookbook_profile(new_profile)
128
- read_plist(cookbook_profile)
129
- else
130
- nil
131
- end
132
- end
133
-
134
- def cookbook_file_available?(cookbook_file)
135
- run_context.has_cookbook_file_in_cookbook?(
136
- new_resource.cookbook_name, cookbook_file
137
- )
138
- end
139
-
140
- def get_cache_dir
141
- cache_dir = Chef::FileCache.create_cache_path(
142
- "profiles/#{new_resource.cookbook_name}"
143
- )
144
- end
145
-
146
- def cache_cookbook_profile(cookbook_file)
147
- Chef::FileCache.create_cache_path(
148
- ::File.join(
149
- "profiles",
150
- new_resource.cookbook_name,
151
- ::File.dirname(cookbook_file)
152
- )
153
- )
154
- # FIXME: should use a real cookbook file, or document what this craziness is
155
- remote_file = Chef::Resource::CookbookFile.new(
156
- ::File.join(
157
- get_cache_dir,
158
- "#{cookbook_file}.remote"
159
- ),
160
- run_context
161
- )
162
- remote_file.cookbook_name = new_resource.cookbook_name
163
- remote_file.source(cookbook_file)
164
- remote_file.backup(false)
165
- remote_file.run_action(:create)
166
- remote_file.path
167
- end
168
-
169
- def get_profile_hash(new_profile)
170
- if new_profile.is_a?(Hash)
171
- new_profile
172
- elsif new_profile.is_a?(String)
173
- load_profile_hash(new_profile)
174
- end
175
- end
176
-
177
- def config_uuid(profile)
178
- # Make a UUID of the profile contents and return as string
179
- UUIDTools::UUID.sha1_create(
180
- UUIDTools::UUID_DNS_NAMESPACE,
181
- profile.to_s
182
- ).to_s
183
- end
184
-
185
- def write_profile_to_disk
186
- # FIXME: use a real chef file resource and stop hacking up tempfiles directly
187
- new_resource.path(Chef::FileCache.create_cache_path("profiles"))
188
- tempfile = Chef::FileContentManagement::Tempfile.new(new_resource).tempfile
189
- tempfile.write(@new_profile_hash.to_plist)
190
- tempfile.close
191
- tempfile.path
192
- end
193
-
194
- def install_profile(profile_path)
195
- cmd = [ "/usr/bin/profiles", "-I", "-F", profile_path ]
196
- logger.trace("cmd: #{cmd.join(" ")}")
197
- shellout_results = shell_out(*cmd)
198
- shellout_results.exitstatus
199
- end
200
-
201
- def remove_profile
202
- cmd = [ "/usr/bin/profiles", "-R", "-p", @new_profile_identifier ]
203
- logger.trace("cmd: #{cmd.join(" ")}")
204
- shellout_results = shell_out(*cmd)
205
- shellout_results.exitstatus
206
- end
207
-
208
- def get_installed_profiles(update = nil)
209
- if update
210
- node.run_state[:config_profiles] = query_installed_profiles
211
- else
212
- node.run_state[:config_profiles] ||= query_installed_profiles
213
- end
214
- end
215
-
216
- def query_installed_profiles
217
- # Dump all profile metadata to a tempfile
218
- tempfile = generate_tempfile
219
- write_installed_profiles(tempfile)
220
- installed_profiles = read_plist(tempfile)
221
- logger.trace("Saved profiles to run_state")
222
- # Clean up the temp file as we do not need it anymore
223
- ::File.unlink(tempfile)
224
- installed_profiles
225
- end
226
-
227
- def generate_tempfile
228
- tempfile = ::Dir::Tmpname.create("allprofiles.plist") {}
229
- end
230
-
231
- def write_installed_profiles(tempfile)
232
- shell_out!( "/usr/bin/profiles", "-P", "-o", tempfile )
233
- end
234
-
235
- def read_plist(xml_file)
236
- ::Plist.parse_xml(xml_file)
237
- end
238
-
239
- def profile_installed?
240
- # Profile Identifier and UUID must match a currently installed profile
241
- if current_resource.profile.nil? || current_resource.profile.empty?
242
- false
243
- else
244
- if new_resource.action.include?(:remove)
245
- true
246
- else
247
- current_resource.profile["ProfileUUID"] ==
248
- @new_profile_hash["PayloadUUID"]
249
- end
250
- end
251
- end
252
-
253
- end
254
- end
255
- end
@@ -1,255 +0,0 @@
1
- #
2
- # Author:: Nate Walck (<nate.walck@gmail.com>)
3
- # Copyright:: Copyright 2015-2016, Chef, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require "spec_helper"
20
-
21
- describe Chef::Provider::OsxProfile do
22
- let(:shell_out_success) do
23
- double("shell_out", exitstatus: 0, error?: false)
24
- end
25
- describe "action_create" do
26
- let(:node) { Chef::Node.new }
27
- let(:events) { Chef::EventDispatch::Dispatcher.new }
28
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
29
- let(:new_resource) { Chef::Resource::OsxProfile.new("Profile Test", run_context) }
30
- let(:provider) { Chef::Provider::OsxProfile.new(new_resource, run_context) }
31
- let(:all_profiles) do
32
- { "_computerlevel" => [{ "ProfileDisplayName" => "Finder Settings",
33
- "ProfileIdentifier" => "com.apple.finder",
34
- "ProfileInstallDate" => "2015-11-08 23:15:21 +0000",
35
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.finder" => { "Forced" => [{ "mcx_preference_settings" => { "ShowExternalHardDrivesOnDesktop" => false } }] } } },
36
- "PayloadDisplayName" => "Custom: (com.apple.finder)",
37
- "PayloadIdentifier" => "com.apple.finder",
38
- "PayloadType" => "com.apple.ManagedClient.preferences",
39
- "PayloadUUID" => "a017048f-684b-4e81-baa3-43afe316d739",
40
- "PayloadVersion" => 1 }],
41
- "ProfileOrganization" => "Chef",
42
- "ProfileRemovalDisallowed" => "false",
43
- "ProfileType" => "Configuration",
44
- "ProfileUUID" => "e2e09bef-e673-44a6-bcbe-ecb5f1c1b740",
45
- "ProfileVerificationState" => "unsigned",
46
- "ProfileVersion" => 1 },
47
- { "ProfileDisplayName" => "ScreenSaver Settings",
48
- "ProfileIdentifier" => "com.testprofile.screensaver",
49
- "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
50
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
51
- "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
52
- "PayloadIdentifier" => "com.apple.screensaver",
53
- "PayloadType" => "com.apple.ManagedClient.preferences",
54
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c110",
55
- "PayloadVersion" => 1 }],
56
- "ProfileOrganization" => "Chef",
57
- "ProfileRemovalDisallowed" => "false",
58
- "ProfileType" => "Configuration",
59
- "ProfileUUID" => "6e95927c-f200-54b4-85c7-52ab99b61c47",
60
- "ProfileVerificationState" => "unsigned",
61
- "ProfileVersion" => 1 }],
62
- }
63
- end
64
- # If anything is changed within this profile, be sure to update the
65
- # ProfileUUID in all_profiles to match the new config specific UUID
66
- let(:test_profile) do
67
- {
68
- "PayloadIdentifier" => "com.testprofile.screensaver",
69
- "PayloadRemovalDisallowed" => false,
70
- "PayloadScope" => "System",
71
- "PayloadType" => "Configuration",
72
- "PayloadUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
73
- "PayloadOrganization" => "Chef",
74
- "PayloadVersion" => 1,
75
- "PayloadDisplayName" => "Screensaver Settings",
76
- "PayloadContent" => [
77
- {
78
- "PayloadType" => "com.apple.ManagedClient.preferences",
79
- "PayloadVersion" => 1,
80
- "PayloadIdentifier" => "com.testprofile.screensaver",
81
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c108",
82
- "PayloadEnabled" => true,
83
- "PayloadDisplayName" => "com.apple.screensaver",
84
- "PayloadContent" => {
85
- "com.apple.screensaver" => {
86
- "Forced" => [
87
- {
88
- "mcx_preference_settings" => {
89
- "idleTime" => 0,
90
- },
91
- },
92
- ],
93
- },
94
- },
95
- },
96
- ],
97
- }
98
- end
99
- let(:no_profiles) do
100
- {}
101
- end
102
-
103
- before(:each) do
104
- allow(provider).to receive(:cookbook_file_available?).and_return(true)
105
- allow(provider).to receive(:cache_cookbook_profile).and_return("/tmp/test.mobileconfig.remote")
106
- allow(provider).to receive(:get_new_profile_hash).and_return(test_profile)
107
- allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
108
- allow(provider).to receive(:read_plist).and_return(all_profiles)
109
- allow(::File).to receive(:unlink).and_return(true)
110
- end
111
-
112
- it "should build the get all profiles shellout command correctly" do
113
- profile_name = "com.testprofile.screensaver.mobileconfig"
114
- tempfile = "/tmp/allprofiles.plist"
115
- new_resource.profile_name profile_name
116
- allow(provider).to receive(:generate_tempfile).and_return(tempfile)
117
- allow(provider).to receive(:get_installed_profiles).and_call_original
118
- allow(provider).to receive(:read_plist).and_return(all_profiles)
119
- expect(provider).to receive(:shell_out_compacted!).with("/usr/bin/profiles", "-P", "-o", "/tmp/allprofiles.plist")
120
- provider.load_current_resource
121
- end
122
-
123
- it "should use profile name as profile when no profile is set" do
124
- profile_name = "com.testprofile.screensaver.mobileconfig"
125
- new_resource.profile_name profile_name
126
- provider.load_current_resource
127
- expect(new_resource.profile_name).to eql(profile_name)
128
- end
129
-
130
- it "should use identifier from specified profile" do
131
- new_resource.profile test_profile
132
- provider.load_current_resource
133
- expect(
134
- provider.instance_variable_get(:@new_profile_identifier)
135
- ).to eql(test_profile["PayloadIdentifier"])
136
- end
137
-
138
- it "should install when not installed" do
139
- new_resource.profile test_profile
140
- allow(provider).to receive(:get_installed_profiles).and_return(no_profiles)
141
- provider.load_current_resource
142
- expect(provider).to receive(:install_profile)
143
- expect { provider.run_action(:install) }.to_not raise_error
144
- end
145
-
146
- it "does not install if the profile is already installed" do
147
- new_resource.profile test_profile
148
- allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
149
- provider.load_current_resource
150
- expect(provider).to_not receive(:install_profile)
151
- expect { provider.action_install }.to_not raise_error
152
- end
153
-
154
- it "should install when installed but uuid differs" do
155
- new_resource.profile test_profile
156
- all_profiles["_computerlevel"][1]["ProfileUUID"] = "1781fbec-3325-565f-9022-9bb39245d4dd"
157
- provider.load_current_resource
158
- expect(provider).to receive(:install_profile)
159
- expect { provider.run_action(:install) }.to_not raise_error
160
- end
161
-
162
- it "should build the shellout install command correctly" do
163
- profile_path = "/tmp/test.mobileconfig"
164
- new_resource.profile test_profile
165
- # Change the profile so it triggers an install
166
- all_profiles["_computerlevel"][1]["ProfileUUID"] = "1781fbec-3325-565f-9022-9bb39245d4dd"
167
- provider.load_current_resource
168
- allow(provider).to receive(:write_profile_to_disk).and_return(profile_path)
169
- expect(provider).to receive(:shell_out_compacted).with("/usr/bin/profiles", "-I", "-F", profile_path).and_return(shell_out_success)
170
- provider.action_install
171
- end
172
-
173
- it "should fail if there is no identifier inside the profile" do
174
- test_profile.delete("PayloadIdentifier")
175
- new_resource.profile test_profile
176
- error_message = "The specified profile does not seem to be valid"
177
- expect { provider.run_action(:install) }.to raise_error(RuntimeError, error_message)
178
- end
179
-
180
- end
181
-
182
- describe "action_remove" do
183
- let(:node) { Chef::Node.new }
184
- let(:events) { Chef::EventDispatch::Dispatcher.new }
185
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
186
- let(:new_resource) { Chef::Resource::OsxProfile.new("Profile Test", run_context) }
187
- let(:provider) { Chef::Provider::OsxProfile.new(new_resource, run_context) }
188
- let(:current_resource) { Chef::Resource::OsxProfile.new("Profile Test") }
189
- let(:all_profiles) do
190
- { "_computerlevel" => [{ "ProfileDisplayName" => "ScreenSaver Settings",
191
- "ProfileIdentifier" => "com.apple.screensaver",
192
- "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
193
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
194
- "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
195
- "PayloadIdentifier" => "com.apple.screensaver",
196
- "PayloadType" => "com.apple.ManagedClient.preferences",
197
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c108",
198
- "PayloadVersion" => 1 }],
199
- "ProfileOrganization" => "Chef",
200
- "ProfileRemovalDisallowed" => "false",
201
- "ProfileType" => "Configuration",
202
- "ProfileUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
203
- "ProfileVerificationState" => "unsigned",
204
- "ProfileVersion" => 1 },
205
- { "ProfileDisplayName" => "ScreenSaver Settings",
206
- "ProfileIdentifier" => "com.testprofile.screensaver",
207
- "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
208
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
209
- "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
210
- "PayloadIdentifier" => "com.apple.screensaver",
211
- "PayloadType" => "com.apple.ManagedClient.preferences",
212
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c110",
213
- "PayloadVersion" => 1 }],
214
- "ProfileOrganization" => "Chef",
215
- "ProfileRemovalDisallowed" => "false",
216
- "ProfileType" => "Configuration",
217
- "ProfileUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
218
- "ProfileVerificationState" => "unsigned",
219
- "ProfileVersion" => 1 }],
220
- }
221
- end
222
- before(:each) do
223
- provider.current_resource = current_resource
224
- allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
225
- end
226
-
227
- it "should use resource name for identifier when not specified" do
228
- new_resource.profile_name "com.testprofile.screensaver"
229
- new_resource.action(:remove)
230
- provider.load_current_resource
231
- expect(provider.instance_variable_get(:@new_profile_identifier)).to eql(new_resource.profile_name)
232
- end
233
-
234
- it "should use specified identifier" do
235
- new_resource.identifier "com.testprofile.screensaver"
236
- new_resource.action(:remove)
237
- provider.load_current_resource
238
- expect(provider.instance_variable_get(:@new_profile_identifier)).to eql(new_resource.identifier)
239
- end
240
-
241
- it "should work with spaces in the identifier" do
242
- provider.action = :remove
243
- provider.define_resource_requirements
244
- expect { provider.process_resource_requirements }.not_to raise_error
245
- end
246
-
247
- it "should build the shellout remove command correctly" do
248
- new_resource.identifier "com.testprofile.screensaver"
249
- new_resource.action(:remove)
250
- provider.load_current_resource
251
- expect(provider).to receive(:shell_out_compacted).with("/usr/bin/profiles", "-R", "-p", new_resource.identifier).and_return(shell_out_success)
252
- provider.action_remove
253
- end
254
- end
255
- end