chef 11.18.12-x86-mingw32 → 12.0.0.alpha.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (307) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +10 -0
  3. data/README.md +1 -1
  4. data/distro/common/html/_sources/index.txt +5 -2
  5. data/distro/common/html/_sources/knife_serve.txt +19 -0
  6. data/distro/common/html/_sources/knife_ssl_check.txt +2 -2
  7. data/distro/common/html/_sources/knife_ssl_fetch.txt +2 -2
  8. data/distro/common/html/_static/basic.css +1 -1
  9. data/distro/common/html/_static/doctools.js +1 -1
  10. data/distro/common/html/_static/searchtools.js +1 -1
  11. data/distro/common/html/_static/websupport.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +19 -9
  13. data/distro/common/html/ctl_chef_server.html +7 -1
  14. data/distro/common/html/ctl_chef_shell.html +3 -4
  15. data/distro/common/html/ctl_chef_solo.html +12 -7
  16. data/distro/common/html/index.html +19 -12
  17. data/distro/common/html/knife.html +1 -2
  18. data/distro/common/html/knife_bootstrap.html +16 -5
  19. data/distro/common/html/knife_client.html +8 -5
  20. data/distro/common/html/knife_common_options.html +11 -12
  21. data/distro/common/html/knife_configure.html +2 -3
  22. data/distro/common/html/knife_cookbook.html +16 -17
  23. data/distro/common/html/knife_cookbook_site.html +19 -18
  24. data/distro/common/html/knife_data_bag.html +6 -7
  25. data/distro/common/html/knife_delete.html +2 -3
  26. data/distro/common/html/knife_deps.html +2 -3
  27. data/distro/common/html/knife_diff.html +3 -4
  28. data/distro/common/html/knife_download.html +6 -7
  29. data/distro/common/html/knife_edit.html +0 -1
  30. data/distro/common/html/knife_environment.html +3 -4
  31. data/distro/common/html/knife_exec.html +0 -1
  32. data/distro/common/html/knife_index_rebuild.html +0 -1
  33. data/distro/common/html/knife_list.html +5 -6
  34. data/distro/common/html/knife_node.html +13 -6
  35. data/distro/common/html/knife_raw.html +0 -1
  36. data/distro/common/html/knife_recipe_list.html +0 -1
  37. data/distro/common/html/knife_role.html +1 -2
  38. data/distro/common/html/knife_search.html +2 -3
  39. data/distro/common/html/knife_serve.html +79 -0
  40. data/distro/common/html/knife_show.html +1 -2
  41. data/distro/common/html/knife_ssh.html +2 -3
  42. data/distro/common/html/knife_ssl_check.html +12 -9
  43. data/distro/common/html/knife_ssl_fetch.html +9 -10
  44. data/distro/common/html/knife_status.html +2 -3
  45. data/distro/common/html/knife_tag.html +0 -1
  46. data/distro/common/html/knife_upload.html +3 -4
  47. data/distro/common/html/knife_user.html +2 -3
  48. data/distro/common/html/knife_using.html +0 -1
  49. data/distro/common/html/knife_xargs.html +3 -4
  50. data/distro/common/html/search.html +0 -1
  51. data/distro/common/html/searchindex.js +1 -1
  52. data/lib/chef/api_client.rb +1 -1
  53. data/lib/chef/application.rb +24 -67
  54. data/lib/chef/application/client.rb +1 -1
  55. data/lib/chef/application/knife.rb +1 -1
  56. data/lib/chef/chef_fs/chef_fs_data_store.rb +2 -3
  57. data/lib/chef/chef_fs/command_line.rb +2 -3
  58. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -5
  59. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -2
  60. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -2
  61. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +2 -2
  62. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +2 -3
  63. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +4 -5
  64. data/lib/chef/config.rb +26 -2
  65. data/lib/chef/config_fetcher.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
  67. data/lib/chef/cookbook/metadata.rb +1 -1
  68. data/lib/chef/cookbook/synchronizer.rb +50 -8
  69. data/lib/chef/cookbook_uploader.rb +9 -23
  70. data/lib/chef/cookbook_version.rb +3 -2
  71. data/lib/chef/data_bag.rb +1 -1
  72. data/lib/chef/data_bag_item.rb +1 -1
  73. data/lib/chef/dsl/recipe.rb +1 -14
  74. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  75. data/lib/chef/environment.rb +1 -1
  76. data/lib/chef/exceptions.rb +2 -24
  77. data/lib/chef/file_content_management/tempfile.rb +8 -1
  78. data/lib/chef/formatters/base.rb +0 -7
  79. data/lib/chef/http.rb +12 -19
  80. data/lib/chef/http/json_input.rb +12 -1
  81. data/lib/chef/json_compat.rb +45 -64
  82. data/lib/chef/knife.rb +2 -5
  83. data/lib/chef/knife/bootstrap.rb +2 -2
  84. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  85. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  86. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  87. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  88. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  89. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  90. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  91. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  92. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  93. data/lib/chef/knife/cookbook_site_install.rb +10 -34
  94. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  95. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  96. data/lib/chef/knife/cookbook_site_share.rb +3 -3
  97. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  98. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  99. data/lib/chef/knife/cookbook_upload.rb +1 -1
  100. data/lib/chef/knife/core/subcommand_loader.rb +0 -24
  101. data/lib/chef/knife/core/ui.rb +8 -7
  102. data/lib/chef/knife/deps.rb +2 -3
  103. data/lib/chef/knife/serve.rb +2 -1
  104. data/lib/chef/local_mode.rb +105 -0
  105. data/lib/chef/mixin/file_class.rb +1 -4
  106. data/lib/chef/mixin/shell_out.rb +15 -0
  107. data/lib/chef/mixin/windows_architecture_helper.rb +0 -16
  108. data/lib/chef/node.rb +1 -1
  109. data/lib/chef/platform/query_helpers.rb +1 -5
  110. data/lib/chef/policy_builder/expand_node_object.rb +3 -0
  111. data/lib/chef/provider.rb +2 -0
  112. data/lib/chef/provider/cookbook_file.rb +0 -1
  113. data/lib/chef/provider/deploy.rb +0 -1
  114. data/lib/chef/provider/deploy/revision.rb +1 -1
  115. data/lib/chef/provider/env.rb +10 -25
  116. data/lib/chef/provider/env/windows.rb +23 -10
  117. data/lib/chef/provider/execute.rb +0 -3
  118. data/lib/chef/provider/file.rb +0 -3
  119. data/lib/chef/provider/git.rb +0 -6
  120. data/lib/chef/provider/group/dscl.rb +9 -27
  121. data/lib/chef/provider/group/gpasswd.rb +0 -3
  122. data/lib/chef/provider/group/groupmod.rb +0 -4
  123. data/lib/chef/provider/group/suse.rb +0 -3
  124. data/lib/chef/provider/group/usermod.rb +0 -3
  125. data/lib/chef/provider/link.rb +22 -5
  126. data/lib/chef/provider/log.rb +15 -4
  127. data/lib/chef/provider/mdadm.rb +0 -3
  128. data/lib/chef/provider/mount/mount.rb +0 -2
  129. data/lib/chef/provider/mount/solaris.rb +0 -2
  130. data/lib/chef/provider/package.rb +0 -1
  131. data/lib/chef/provider/package/apt.rb +0 -3
  132. data/lib/chef/provider/package/dpkg.rb +0 -1
  133. data/lib/chef/provider/package/easy_install.rb +0 -4
  134. data/lib/chef/provider/package/freebsd/base.rb +0 -3
  135. data/lib/chef/provider/package/freebsd/pkgng.rb +0 -2
  136. data/lib/chef/provider/package/freebsd/port.rb +0 -2
  137. data/lib/chef/provider/package/ips.rb +0 -3
  138. data/lib/chef/provider/package/paludis.rb +0 -5
  139. data/lib/chef/provider/package/portage.rb +0 -2
  140. data/lib/chef/provider/package/rpm.rb +2 -4
  141. data/lib/chef/provider/package/rubygems.rb +0 -4
  142. data/lib/chef/provider/package/smartos.rb +0 -3
  143. data/lib/chef/provider/package/windows/msi.rb +0 -2
  144. data/lib/chef/provider/package/yum.rb +0 -4
  145. data/lib/chef/provider/package/zypper.rb +0 -3
  146. data/lib/chef/provider/registry_key.rb +0 -2
  147. data/lib/chef/provider/remote_directory.rb +0 -1
  148. data/lib/chef/provider/remote_file.rb +0 -1
  149. data/lib/chef/provider/remote_file/cache_control_data.rb +1 -3
  150. data/lib/chef/provider/remote_file/content.rb +0 -1
  151. data/lib/chef/provider/remote_file/fetcher.rb +0 -2
  152. data/lib/chef/provider/remote_file/ftp.rb +0 -1
  153. data/lib/chef/provider/resource_update.rb +0 -3
  154. data/lib/chef/provider/service/freebsd.rb +0 -3
  155. data/lib/chef/provider/service/init.rb +0 -3
  156. data/lib/chef/provider/service/macosx.rb +0 -1
  157. data/lib/chef/provider/service/redhat.rb +0 -2
  158. data/lib/chef/provider/service/simple.rb +0 -3
  159. data/lib/chef/provider/service/solaris.rb +0 -3
  160. data/lib/chef/provider/service/systemd.rb +15 -14
  161. data/lib/chef/provider/service/windows.rb +0 -3
  162. data/lib/chef/provider/subversion.rb +0 -2
  163. data/lib/chef/provider/template.rb +0 -2
  164. data/lib/chef/provider/template/content.rb +0 -1
  165. data/lib/chef/provider/user/dscl.rb +156 -549
  166. data/lib/chef/provider/user/solaris.rb +0 -1
  167. data/lib/chef/provider/user/useradd.rb +0 -3
  168. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  169. data/lib/chef/providers.rb +0 -1
  170. data/lib/chef/resource.rb +1 -4
  171. data/lib/chef/resource/freebsd_package.rb +2 -10
  172. data/lib/chef/resource/lwrp_base.rb +1 -12
  173. data/lib/chef/resource/user.rb +0 -18
  174. data/lib/chef/resource_collection.rb +1 -1
  175. data/lib/chef/resource_reporter.rb +10 -10
  176. data/lib/chef/resources.rb +0 -1
  177. data/lib/chef/role.rb +3 -3
  178. data/lib/chef/run_list.rb +1 -1
  179. data/lib/chef/tasks/chef_repo.rake +131 -264
  180. data/lib/chef/user.rb +1 -1
  181. data/lib/chef/util/path_helper.rb +2 -2
  182. data/lib/chef/version.rb +9 -1
  183. data/lib/chef/win32/api/system.rb +0 -9
  184. data/spec/data/bootstrap/test-hints.erb +1 -1
  185. data/spec/data/bootstrap/test.erb +1 -1
  186. data/spec/functional/dsl/reboot_pending_spec.rb +53 -58
  187. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  188. data/spec/functional/knife/exec_spec.rb +1 -1
  189. data/spec/functional/mixin/shell_out_spec.rb +48 -0
  190. data/spec/functional/resource/base.rb +0 -10
  191. data/spec/functional/resource/group_spec.rb +1 -5
  192. data/spec/functional/resource/link_spec.rb +8 -0
  193. data/spec/functional/resource/{user/useradd_spec.rb → user_spec.rb} +1 -1
  194. data/spec/integration/knife/chef_fs_data_store_spec.rb +3 -3
  195. data/spec/integration/knife/chef_repo_path_spec.rb +1 -6
  196. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  197. data/spec/integration/knife/chefignore_spec.rb +1 -1
  198. data/spec/integration/knife/common_options_spec.rb +50 -3
  199. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  200. data/spec/integration/knife/delete_spec.rb +1 -1
  201. data/spec/integration/knife/deps_spec.rb +1 -1
  202. data/spec/integration/knife/diff_spec.rb +3 -3
  203. data/spec/integration/knife/download_spec.rb +3 -3
  204. data/spec/integration/knife/list_spec.rb +1 -1
  205. data/spec/integration/knife/raw_spec.rb +1 -11
  206. data/spec/integration/knife/redirection_spec.rb +1 -1
  207. data/spec/integration/knife/serve_spec.rb +2 -2
  208. data/spec/integration/knife/show_spec.rb +1 -1
  209. data/spec/integration/knife/upload_spec.rb +9 -9
  210. data/spec/spec_helper.rb +0 -9
  211. data/spec/support/pedant/pedant_config.rb +2 -1
  212. data/spec/support/pedant/run_pedant.rb +2 -1
  213. data/spec/support/platform_helpers.rb +5 -24
  214. data/spec/support/shared/integration/integration_helper.rb +2 -1
  215. data/spec/support/shared/matchers.rb +17 -0
  216. data/spec/tiny_server.rb +1 -2
  217. data/spec/unit/api_client_spec.rb +3 -3
  218. data/spec/unit/application_spec.rb +9 -32
  219. data/spec/unit/config_fetcher_spec.rb +1 -1
  220. data/spec/unit/cookbook/metadata_spec.rb +3 -7
  221. data/spec/unit/cookbook/synchronizer_spec.rb +441 -226
  222. data/spec/unit/cookbook_loader_spec.rb +1 -1
  223. data/spec/unit/cookbook_uploader_spec.rb +160 -0
  224. data/spec/unit/cookbook_version_spec.rb +0 -4
  225. data/spec/unit/data_bag_item_spec.rb +1 -5
  226. data/spec/unit/data_bag_spec.rb +1 -5
  227. data/spec/unit/deprecation_spec.rb +1 -1
  228. data/spec/unit/dsl/recipe_spec.rb +12 -0
  229. data/spec/unit/encrypted_data_bag_item_spec.rb +7 -14
  230. data/spec/unit/environment_spec.rb +3 -7
  231. data/spec/unit/exceptions_spec.rb +0 -6
  232. data/spec/unit/http/json_input_spec.rb +128 -0
  233. data/spec/unit/json_compat_spec.rb +17 -58
  234. data/spec/unit/knife/client_create_spec.rb +3 -3
  235. data/spec/unit/knife/configure_client_spec.rb +6 -5
  236. data/spec/unit/knife/cookbook_delete_spec.rb +1 -1
  237. data/spec/unit/knife/cookbook_download_spec.rb +5 -5
  238. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -0
  239. data/spec/unit/knife/cookbook_metadata_spec.rb +1 -1
  240. data/spec/unit/knife/cookbook_site_download_spec.rb +10 -11
  241. data/spec/unit/knife/cookbook_site_install_spec.rb +116 -161
  242. data/spec/unit/knife/cookbook_site_share_spec.rb +8 -8
  243. data/spec/unit/knife/cookbook_upload_spec.rb +3 -2
  244. data/spec/unit/knife/core/bootstrap_context_spec.rb +3 -3
  245. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -66
  246. data/spec/unit/knife/data_bag_from_file_spec.rb +2 -1
  247. data/spec/unit/knife/tag_create_spec.rb +3 -3
  248. data/spec/unit/knife/tag_delete_spec.rb +3 -3
  249. data/spec/unit/knife/user_create_spec.rb +1 -1
  250. data/spec/unit/knife_spec.rb +14 -14
  251. data/spec/unit/lwrp_spec.rb +1 -21
  252. data/spec/unit/mixin/shell_out_spec.rb +92 -0
  253. data/spec/unit/node_spec.rb +0 -4
  254. data/spec/unit/platform/query_helpers_spec.rb +0 -23
  255. data/spec/unit/provider/env/windows_spec.rb +34 -70
  256. data/spec/unit/provider/env_spec.rb +11 -76
  257. data/spec/unit/provider/group/dscl_spec.rb +1 -38
  258. data/spec/unit/provider/log_spec.rb +18 -0
  259. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  260. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +1 -1
  261. data/spec/unit/provider/service/systemd_service_spec.rb +44 -27
  262. data/spec/unit/provider/user/dscl_spec.rb +264 -660
  263. data/spec/unit/provider/user/useradd_spec.rb +0 -1
  264. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  265. data/spec/unit/provider_spec.rb +12 -0
  266. data/spec/unit/recipe_spec.rb +0 -41
  267. data/spec/unit/resource_collection_spec.rb +1 -5
  268. data/spec/unit/resource_reporter_spec.rb +3 -51
  269. data/spec/unit/resource_spec.rb +3 -14
  270. data/spec/unit/rest_spec.rb +1 -4
  271. data/spec/unit/role_spec.rb +0 -10
  272. data/spec/unit/run_list_spec.rb +1 -5
  273. data/spec/unit/user_spec.rb +1 -5
  274. metadata +20 -100
  275. data/lib/chef/mixin/windows_env_helper.rb +0 -56
  276. data/lib/chef/provider/dsc_script.rb +0 -175
  277. data/lib/chef/resource/dsc_script.rb +0 -126
  278. data/lib/chef/streaming_cookbook_uploader.rb +0 -205
  279. data/lib/chef/util/dsc/configuration_generator.rb +0 -115
  280. data/lib/chef/util/dsc/lcm_output_parser.rb +0 -133
  281. data/lib/chef/util/dsc/local_configuration_manager.rb +0 -141
  282. data/lib/chef/util/dsc/resource_info.rb +0 -26
  283. data/lib/chef/util/powershell/cmdlet.rb +0 -136
  284. data/lib/chef/util/powershell/cmdlet_result.rb +0 -46
  285. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  286. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  287. data/spec/data/mac_users/10.7.plist.xml +0 -559
  288. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  289. data/spec/data/mac_users/10.8.plist.xml +0 -559
  290. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  291. data/spec/data/mac_users/10.9.plist.xml +0 -560
  292. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  293. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +0 -51
  294. data/spec/functional/resource/dsc_script_spec.rb +0 -382
  295. data/spec/functional/resource/env_spec.rb +0 -182
  296. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  297. data/spec/functional/util/powershell/cmdlet_spec.rb +0 -113
  298. data/spec/support/lib/chef/resource/zen_follower.rb +0 -46
  299. data/spec/support/shared/shared_examples.rb +0 -10
  300. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +0 -63
  301. data/spec/unit/formatters/base_spec.rb +0 -48
  302. data/spec/unit/provider/dsc_script_spec.rb +0 -174
  303. data/spec/unit/resource/dsc_script_spec.rb +0 -98
  304. data/spec/unit/util/dsc/configuration_generator_spec.rb +0 -171
  305. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +0 -169
  306. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +0 -139
  307. data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -1,21 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>SALTED-SHA512-PBKDF2</key>
6
- <dict>
7
- <key>entropy</key>
8
- <data>
9
- EmAakNsXy/i6SAjmOC+w07nYpsGhkEd79oCrIa+2BlRnE25VzCCKb3QVbj2v
10
- IPsTNp70t7r6BH2ANZ+0akikrczVSOuzOFGwk0fMqENBp/k6JxRzQ/ifuEP7
11
- RsABfSZK+kl2uqz5QbkVvR7ByiTDCz51ngJAPgL1n+f/WTinY2w=
12
- </data>
13
- <key>iterations</key>
14
- <integer>34482</integer>
15
- <key>salt</key>
16
- <data>
17
- 7pVL5HL9xg3fiUhHgUM5k2JfAGr27IEMCPSafkE5RqE=
18
- </data>
19
- </dict>
20
- </dict>
21
- </plist>
@@ -1,51 +0,0 @@
1
- #
2
- # Author:: Serdar Sutay (<serdar@opscode.com>)
3
- # Copyright:: Copyright (c) 2014 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
- require 'spec_helper'
20
-
21
- describe Chef::Resource::WhyrunSafeRubyBlock do
22
- let(:node) { Chef::Node.new }
23
-
24
- let(:run_context) {
25
- events = Chef::EventDispatch::Dispatcher.new
26
- Chef::RunContext.new(node, {}, events)
27
- }
28
-
29
- before do
30
- $evil_global_evil_laugh = :wahwah
31
- Chef::Config[:why_run] = true
32
- end
33
-
34
- after do
35
- Chef::Config[:why_run] = false
36
- end
37
-
38
- describe "when testing the resource" do
39
- let(:new_resource) do
40
- r = Chef::Resource::WhyrunSafeRubyBlock.new("reload all", run_context)
41
- r.block { $evil_global_evil_laugh = :mwahahaha }
42
- r
43
- end
44
-
45
- it "updates the evil laugh, even in why-run mode" do
46
- new_resource.run_action(new_resource.action)
47
- $evil_global_evil_laugh.should == :mwahahaha
48
- new_resource.should be_updated
49
- end
50
- end
51
- end
@@ -1,382 +0,0 @@
1
- #
2
- # Author:: Adam Edwards (<adamed@getchef.com>)
3
- # Copyright:: Copyright (c) 2014 Chef Software, 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
- require 'chef/mixin/shell_out'
21
- require 'chef/mixin/windows_architecture_helper'
22
-
23
- describe Chef::Resource::DscScript, :windows_powershell_dsc_only do
24
- include Chef::Mixin::WindowsArchitectureHelper
25
- before(:all) do
26
- @temp_dir = ::Dir.mktmpdir("dsc-functional-test")
27
- end
28
-
29
- after(:all) do
30
- ::FileUtils.rm_rf(@temp_dir) if ::Dir.exist?(@temp_dir)
31
- end
32
-
33
- include Chef::Mixin::ShellOut
34
-
35
- def create_config_script_from_code(code, configuration_name, data = false)
36
- script_code = data ? code : "Configuration '#{configuration_name}'\n{\n\t#{code}\n}\n"
37
- data_suffix = data ? '_config_data' : ''
38
- extension = data ? 'psd1' : 'ps1'
39
- script_path = "#{@temp_dir}/dsc_functional_test#{data_suffix}.#{extension}"
40
- ::File.open(script_path, 'wt') do | script |
41
- script.write(script_code)
42
- end
43
- script_path
44
- end
45
-
46
- def user_exists?(target_user)
47
- result = false
48
- begin
49
- shell_out!("net user #{target_user}")
50
- result = true
51
- rescue Mixlib::ShellOut::ShellCommandFailed
52
- end
53
- result
54
- end
55
-
56
- def delete_user(target_user)
57
- begin
58
- shell_out!("net user #{target_user} /delete")
59
- rescue Mixlib::ShellOut::ShellCommandFailed
60
- end
61
- end
62
-
63
- let(:dsc_env_variable) { 'chefenvtest' }
64
- let(:dsc_env_value1) { 'value1' }
65
- let(:env_value2) { 'value2' }
66
- let(:dsc_test_run_context) {
67
- node = Chef::Node.new
68
- node.automatic['platform'] = 'windows'
69
- node.automatic['platform_version'] = '6.1'
70
- node.automatic['kernel'][:machine] =
71
- is_i386_process_on_x86_64_windows? ? :x86_64 : :i386
72
- node.automatic[:languages][:powershell][:version] = '4.0'
73
- empty_events = Chef::EventDispatch::Dispatcher.new
74
- Chef::RunContext.new(node, {}, empty_events)
75
- }
76
- let(:dsc_test_resource_name) { 'DSCTest' }
77
- let(:dsc_test_resource_base) {
78
- Chef::Resource::DscScript.new(dsc_test_resource_name, dsc_test_run_context)
79
- }
80
- let(:test_registry_key) { 'HKEY_LOCAL_MACHINE\Software\Chef\Spec\Functional\Resource\dsc_script_spec' }
81
- let(:test_registry_value) { 'Registration' }
82
- let(:test_registry_data1) { 'LL927' }
83
- let(:test_registry_data2) { 'LL928' }
84
- let(:reg_key_name_param_name) { 'testregkeyname' }
85
- let(:reg_key_value_param_name) { 'testregvaluename' }
86
- let(:registry_embedded_parameters) { "$#{reg_key_name_param_name} = '#{test_registry_key}';$#{reg_key_value_param_name} = '#{test_registry_value}'"}
87
- let(:dsc_reg_code) { <<-EOH
88
- #{registry_embedded_parameters}
89
- Registry "ChefRegKey"
90
- {
91
- Key = $#{reg_key_name_param_name}
92
- ValueName = $#{reg_key_value_param_name}
93
- ValueData = '#{test_registry_data}'
94
- Ensure = 'Present'
95
- }
96
- EOH
97
- }
98
-
99
- let(:dsc_code) { dsc_reg_code }
100
- let(:dsc_reg_script) { <<-EOH
101
- param($testregkeyname, $testregvaluename)
102
- #{dsc_reg_code}
103
- EOH
104
- }
105
-
106
- let(:dsc_user_prefix) { 'dsc' }
107
- let(:dsc_user_suffix) { 'chefx' }
108
- let(:dsc_user) {"#{dsc_user_prefix}_usr_#{dsc_user_suffix}" }
109
- let(:dsc_user_prefix_env_var_name) { 'dsc_user_env_prefix' }
110
- let(:dsc_user_suffix_env_var_name) { 'dsc_user_env_suffix' }
111
- let(:dsc_user_prefix_env_code) { "$env:#{dsc_user_prefix_env_var_name}"}
112
- let(:dsc_user_suffix_env_code) { "$env:#{dsc_user_suffix_env_var_name}"}
113
- let(:dsc_user_prefix_param_name) { 'dsc_user_prefix_param' }
114
- let(:dsc_user_suffix_param_name) { 'dsc_user_suffix_param' }
115
- let(:dsc_user_prefix_param_code) { "$#{dsc_user_prefix_param_name}"}
116
- let(:dsc_user_suffix_param_code) { "$#{dsc_user_suffix_param_name}"}
117
- let(:dsc_user_env_code) { "\"$(#{dsc_user_prefix_env_code})_usr_$(#{dsc_user_suffix_env_code})\""}
118
- let(:dsc_user_param_code) { "\"$(#{dsc_user_prefix_param_code})_usr_$(#{dsc_user_suffix_param_code})\""}
119
-
120
- let(:config_flags) { nil }
121
- let(:config_params) { <<-EOH
122
-
123
- [CmdletBinding()]
124
- param
125
- (
126
- $#{dsc_user_prefix_param_name},
127
- $#{dsc_user_suffix_param_name}
128
- )
129
- EOH
130
- }
131
-
132
- let(:config_param_section) { '' }
133
- let(:dsc_user_code) { "'#{dsc_user}'" }
134
- let(:dsc_user_prefix_code) { dsc_user_prefix }
135
- let(:dsc_user_suffix_code) { dsc_user_suffix }
136
- let(:dsc_script_environment_attribute) { nil }
137
- let(:dsc_user_resources_code) { <<-EOH
138
- #{config_param_section}
139
- node localhost
140
- {
141
- $testuser = #{dsc_user_code}
142
- $testpassword = ConvertTo-SecureString -String "jf9a8m49jrajf4#" -AsPlainText -Force
143
- $testcred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $testuser, $testpassword
144
-
145
- User dsctestusercreate
146
- {
147
- UserName = $testuser
148
- Password = $testcred
149
- Description = "DSC test user"
150
- Ensure = "Present"
151
- Disabled = $false
152
- PasswordNeverExpires = $true
153
- PasswordChangeRequired = $false
154
- }
155
- }
156
- EOH
157
- }
158
-
159
- let(:dsc_user_config_data) {
160
- <<-EOH
161
- @{
162
- AllNodes = @(
163
- @{
164
- NodeName = "localhost";
165
- PSDscAllowPlainTextPassword = $true
166
- }
167
- )
168
- }
169
-
170
- EOH
171
- }
172
-
173
- let(:dsc_environment_env_var_name) { 'dsc_test_cwd' }
174
- let(:dsc_environment_no_fail_not_etc_directory) { "#{ENV['systemroot']}\\system32" }
175
- let(:dsc_environment_fail_etc_directory) { "#{ENV['systemroot']}\\system32\\drivers\\etc" }
176
- let(:exception_message_signature) { 'LL927-LL928' }
177
- let(:dsc_environment_config) {<<-EOH
178
- if (($pwd.path -eq '#{dsc_environment_fail_etc_directory}') -and (test-path('#{dsc_environment_fail_etc_directory}')))
179
- {
180
- throw 'Signature #{exception_message_signature}: Purposefully failing because cwd == #{dsc_environment_fail_etc_directory}'
181
- }
182
- environment "whatsmydir"
183
- {
184
- Name = '#{dsc_environment_env_var_name}'
185
- Value = $pwd.path
186
- Ensure = 'Present'
187
- }
188
- EOH
189
- }
190
-
191
- let(:dsc_config_name) {
192
- dsc_test_resource_base.name
193
- }
194
- let(:dsc_resource_from_code) {
195
- dsc_test_resource_base.code(dsc_code)
196
- dsc_test_resource_base
197
- }
198
- let(:config_name_value) { dsc_test_resource_base.name }
199
-
200
- let(:dsc_resource_from_path) {
201
- dsc_test_resource_base.command(create_config_script_from_code(dsc_code, config_name_value))
202
- dsc_test_resource_base
203
- }
204
-
205
- before(:each) do
206
- test_key_resource = Chef::Resource::RegistryKey.new(test_registry_key, dsc_test_run_context)
207
- test_key_resource.recursive(true)
208
- test_key_resource.run_action(:delete_key)
209
- end
210
-
211
- after(:each) do
212
- test_key_resource = Chef::Resource::RegistryKey.new(test_registry_key, dsc_test_run_context)
213
- test_key_resource.recursive(true)
214
- test_key_resource.run_action(:delete_key)
215
- end
216
-
217
- shared_examples_for 'a dsc_script resource with specified PowerShell configuration code' do
218
- let(:test_registry_data) { test_registry_data1 }
219
- it 'should create a registry key with a specific registry value and data' do
220
- expect(dsc_test_resource.registry_key_exists?(test_registry_key)).to eq(false)
221
- dsc_test_resource.run_action(:run)
222
- expect(dsc_test_resource.registry_key_exists?(test_registry_key)).to eq(true)
223
- expect(dsc_test_resource.registry_value_exists?(test_registry_key, {:name => test_registry_value, :type => :string, :data => test_registry_data})).to eq(true)
224
- end
225
-
226
- it_should_behave_like 'a dsc_script resource with configuration affected by cwd'
227
- end
228
-
229
- shared_examples_for 'a dsc_script resource with configuration affected by cwd' do
230
- after(:each) do
231
- removal_resource = Chef::Resource::DscScript.new(dsc_test_resource_name, dsc_test_run_context)
232
- removal_resource.code <<-EOH
233
- environment 'removethis'
234
- {
235
- Name = '#{dsc_environment_env_var_name}'
236
- Ensure = 'Absent'
237
- }
238
- EOH
239
- removal_resource.run_action(:run)
240
- end
241
-
242
- describe 'when the DSC configuration contains code that raises an exception if cwd has a specific value' do
243
- let(:dsc_code) { dsc_environment_config }
244
- it 'should not raise an exception if the cwd is not etc' do
245
- dsc_test_resource.cwd(dsc_environment_no_fail_not_etc_directory)
246
- expect {dsc_test_resource.run_action(:run)}.not_to raise_error
247
- end
248
-
249
- it 'should raise an exception if the cwd is etc' do
250
- dsc_test_resource.cwd(dsc_environment_fail_etc_directory)
251
- expect {dsc_test_resource.run_action(:run)}.to raise_error(Chef::Exceptions::PowershellCmdletException)
252
- begin
253
- dsc_test_resource.run_action(:run)
254
- rescue Chef::Exceptions::PowershellCmdletException => e
255
- expect(e.message).to match(exception_message_signature)
256
- end
257
- end
258
- end
259
- end
260
-
261
- shared_examples_for 'a parameterized DSC configuration script' do
262
- let(:dsc_user_prefix_code) { dsc_user_prefix_env_code }
263
- let(:dsc_user_suffix_code) { dsc_user_suffix_env_code }
264
- it_behaves_like 'a dsc_script with configuration that uses environment variables'
265
- end
266
-
267
- shared_examples_for 'a dsc_script without configuration data that takes parameters' do
268
- context 'when configuration data is not specified' do
269
-
270
- before(:each) do
271
- test_key_resource = Chef::Resource::RegistryKey.new(test_registry_key, dsc_test_run_context)
272
- test_key_resource.recursive(true)
273
- test_key_resource.run_action(:delete_key)
274
- end
275
-
276
- after(:each) do
277
- test_key_resource = Chef::Resource::RegistryKey.new(test_registry_key, dsc_test_run_context)
278
- test_key_resource.recursive(true)
279
- test_key_resource.run_action(:delete_key)
280
- end
281
-
282
- let(:test_registry_data) { test_registry_data1 }
283
- let(:dsc_parameterized_env_param_value) { "val" + Random::rand.to_s }
284
-
285
- it 'should have a default value of nil for the configuration_data attribute' do
286
- expect(dsc_test_resource.configuration_data).to eql(nil)
287
- end
288
-
289
- it 'should have a default value of nil for the configuration_data_path attribute' do
290
- expect(dsc_test_resource.configuration_data_script).to eql(nil)
291
- end
292
-
293
- let(:dsc_test_resource) { dsc_resource_from_path }
294
- let(:registry_embedded_parameters) { '' }
295
- let(:dsc_code) { dsc_reg_script }
296
-
297
- it 'should set a registry key according to parameters passed to the configuration' do
298
- dsc_test_resource.configuration_name(config_name_value)
299
- dsc_test_resource.flags({:"#{reg_key_name_param_name}" => test_registry_key, :"#{reg_key_value_param_name}" => test_registry_value})
300
- expect(dsc_test_resource.registry_key_exists?(test_registry_key)).to eq(false)
301
- dsc_test_resource.run_action(:run)
302
- expect(dsc_test_resource.registry_key_exists?(test_registry_key)).to eq(true)
303
- expect(dsc_test_resource.registry_value_exists?(test_registry_key, {:name => test_registry_value, :type => :string, :data => test_registry_data})).to eq(true)
304
- end
305
- end
306
- end
307
-
308
- shared_examples_for 'a dsc_script with configuration data' do
309
- let(:configuration_data_attribute) { 'configuration_data' }
310
- it_behaves_like 'a dsc_script with configuration data set via an attribute'
311
-
312
- let(:configuration_data_attribute) { 'configuration_data_script' }
313
- it_behaves_like 'a dsc_script with configuration data set via an attribute'
314
- end
315
-
316
- shared_examples_for 'a dsc_script with configuration data set via an attribute' do
317
- it 'should run a configuration script that creates a user' do
318
- config_data_value = dsc_user_config_data
319
- dsc_test_resource.configuration_name(config_name_value)
320
- if configuration_data_attribute == 'configuration_data_script'
321
- config_data_value = create_config_script_from_code(dsc_user_config_data, '', true)
322
- end
323
- dsc_test_resource.environment({dsc_user_prefix_env_var_name => dsc_user_prefix,
324
- dsc_user_suffix_env_var_name => dsc_user_suffix})
325
- dsc_test_resource.send(configuration_data_attribute, config_data_value)
326
- dsc_test_resource.flags(config_flags)
327
- expect(user_exists?(dsc_user)).to eq(false)
328
- expect {dsc_test_resource.run_action(:run)}.not_to raise_error
329
- expect(user_exists?(dsc_user)).to eq(true)
330
- end
331
- end
332
-
333
- shared_examples_for 'a dsc_script with configuration data that takes parameters' do
334
- let(:dsc_user_code) { dsc_user_param_code }
335
- let(:config_param_section) { config_params }
336
- let(:config_flags) {{:"#{dsc_user_prefix_param_name}" => "#{dsc_user_prefix}", :"#{dsc_user_suffix_param_name}" => "#{dsc_user_suffix}"}}
337
- it 'does not directly contain the user name' do
338
- configuration_script_content = ::File.open(dsc_test_resource.command) do | file |
339
- file.read
340
- end
341
- expect(configuration_script_content.include?(dsc_user)).to be(false)
342
- end
343
- it_behaves_like 'a dsc_script with configuration data'
344
- end
345
-
346
- shared_examples_for 'a dsc_script with configuration data that uses environment variables' do
347
- let(:dsc_user_code) { dsc_user_env_code }
348
-
349
- it 'does not directly contain the user name' do
350
- configuration_script_content = ::File.open(dsc_test_resource.command) do | file |
351
- file.read
352
- end
353
- expect(configuration_script_content.include?(dsc_user)).to be(false)
354
- end
355
- it_behaves_like 'a dsc_script with configuration data'
356
- end
357
-
358
- context 'when supplying configuration through the configuration attribute' do
359
- let(:dsc_test_resource) { dsc_resource_from_code }
360
- it_behaves_like 'a dsc_script resource with specified PowerShell configuration code'
361
- end
362
-
363
- context 'when supplying configuration using the path attribute' do
364
- let(:dsc_test_resource) { dsc_resource_from_path }
365
- it_behaves_like 'a dsc_script resource with specified PowerShell configuration code'
366
- end
367
-
368
- context 'when running a configuration that manages users' do
369
- before(:each) do
370
- delete_user(dsc_user)
371
- end
372
-
373
- let(:dsc_code) { dsc_user_resources_code }
374
- let(:config_name_value) { 'DSCTestConfig' }
375
- let(:dsc_test_resource) { dsc_resource_from_path }
376
-
377
- it_behaves_like 'a dsc_script with configuration data'
378
- it_behaves_like 'a dsc_script with configuration data that uses environment variables'
379
- it_behaves_like 'a dsc_script with configuration data that takes parameters'
380
- it_behaves_like 'a dsc_script without configuration data that takes parameters'
381
- end
382
- end