chef 12.4.0.rc.0-universal-mingw32 → 12.4.0.rc.2-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 (298) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +12 -1
  3. data/lib/chef/api_client.rb +130 -26
  4. data/lib/chef/application.rb +0 -1
  5. data/lib/chef/application/client.rb +8 -19
  6. data/lib/chef/audit/audit_reporter.rb +12 -7
  7. data/lib/chef/audit/logger.rb +36 -0
  8. data/lib/chef/audit/runner.rb +4 -2
  9. data/lib/chef/chef_class.rb +62 -11
  10. data/lib/chef/client.rb +587 -207
  11. data/lib/chef/config.rb +0 -1
  12. data/lib/chef/dsl/recipe.rb +45 -56
  13. data/lib/chef/dsl/resources.rb +3 -2
  14. data/lib/chef/event_dispatch/base.rb +7 -2
  15. data/lib/chef/exceptions.rb +4 -1
  16. data/lib/chef/file_content_management/deploy/mv_windows.rb +16 -6
  17. data/lib/chef/formatters/doc.rb +15 -7
  18. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +10 -7
  19. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +2 -0
  20. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +4 -1
  21. data/lib/chef/http/authenticator.rb +7 -2
  22. data/lib/chef/knife.rb +16 -4
  23. data/lib/chef/knife/client_create.rb +55 -31
  24. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  25. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  26. data/lib/chef/knife/osc_user_create.rb +97 -0
  27. data/lib/chef/knife/osc_user_delete.rb +51 -0
  28. data/lib/chef/knife/osc_user_edit.rb +58 -0
  29. data/lib/chef/knife/osc_user_list.rb +47 -0
  30. data/lib/chef/knife/osc_user_reregister.rb +64 -0
  31. data/lib/chef/knife/osc_user_show.rb +54 -0
  32. data/lib/chef/knife/user_create.rb +95 -36
  33. data/lib/chef/knife/user_delete.rb +52 -2
  34. data/lib/chef/knife/user_edit.rb +37 -7
  35. data/lib/chef/knife/user_list.rb +3 -0
  36. data/lib/chef/knife/user_reregister.rb +39 -8
  37. data/lib/chef/knife/user_show.rb +30 -1
  38. data/lib/chef/mixin/api_version_request_handling.rb +66 -0
  39. data/lib/chef/mixin/convert_to_class_name.rb +10 -4
  40. data/lib/chef/mixin/deprecation.rb +24 -0
  41. data/lib/chef/mixin/powershell_out.rb +98 -0
  42. data/lib/chef/mixin/provides.rb +5 -18
  43. data/lib/chef/mixin/uris.rb +11 -0
  44. data/lib/chef/mixin/windows_architecture_helper.rb +5 -2
  45. data/lib/chef/mixin/windows_env_helper.rb +11 -2
  46. data/lib/chef/node_map.rb +130 -75
  47. data/lib/chef/osc_user.rb +194 -0
  48. data/lib/chef/platform/provider_mapping.rb +2 -269
  49. data/lib/chef/platform/provider_priority_map.rb +6 -69
  50. data/lib/chef/platform/query_helpers.rb +5 -0
  51. data/lib/chef/platform/resource_priority_map.rb +12 -15
  52. data/lib/chef/policy_builder/policyfile.rb +1 -0
  53. data/lib/chef/provider.rb +19 -0
  54. data/lib/chef/provider/directory.rb +3 -0
  55. data/lib/chef/provider/dsc_resource.rb +8 -1
  56. data/lib/chef/provider/file.rb +1 -0
  57. data/lib/chef/provider/group/aix.rb +1 -0
  58. data/lib/chef/provider/group/dscl.rb +1 -1
  59. data/lib/chef/provider/group/gpasswd.rb +1 -0
  60. data/lib/chef/provider/group/groupmod.rb +1 -1
  61. data/lib/chef/provider/group/pw.rb +1 -0
  62. data/lib/chef/provider/group/suse.rb +2 -0
  63. data/lib/chef/provider/group/usermod.rb +2 -1
  64. data/lib/chef/provider/group/windows.rb +1 -1
  65. data/lib/chef/provider/ifconfig.rb +2 -0
  66. data/lib/chef/provider/ifconfig/aix.rb +1 -0
  67. data/lib/chef/provider/ifconfig/debian.rb +2 -0
  68. data/lib/chef/provider/ifconfig/redhat.rb +1 -0
  69. data/lib/chef/provider/lwrp_base.rb +4 -0
  70. data/lib/chef/provider/mount.rb +0 -1
  71. data/lib/chef/provider/mount/aix.rb +1 -0
  72. data/lib/chef/provider/mount/mount.rb +2 -0
  73. data/lib/chef/provider/mount/solaris.rb +2 -0
  74. data/lib/chef/provider/package.rb +55 -0
  75. data/lib/chef/provider/package/aix.rb +7 -7
  76. data/lib/chef/provider/package/apt.rb +3 -3
  77. data/lib/chef/provider/package/dpkg.rb +4 -4
  78. data/lib/chef/provider/package/easy_install.rb +5 -5
  79. data/lib/chef/provider/package/freebsd/base.rb +2 -2
  80. data/lib/chef/provider/package/freebsd/pkg.rb +6 -6
  81. data/lib/chef/provider/package/freebsd/pkgng.rb +5 -5
  82. data/lib/chef/provider/package/freebsd/port.rb +4 -4
  83. data/lib/chef/provider/package/homebrew.rb +2 -2
  84. data/lib/chef/provider/package/ips.rb +4 -4
  85. data/lib/chef/provider/package/macports.rb +5 -6
  86. data/lib/chef/provider/package/openbsd.rb +4 -5
  87. data/lib/chef/provider/package/pacman.rb +4 -4
  88. data/lib/chef/provider/package/portage.rb +2 -0
  89. data/lib/chef/provider/package/rpm.rb +7 -8
  90. data/lib/chef/provider/package/rubygems.rb +5 -12
  91. data/lib/chef/provider/package/smartos.rb +4 -4
  92. data/lib/chef/provider/package/solaris.rb +7 -7
  93. data/lib/chef/provider/package/windows/msi.rb +1 -1
  94. data/lib/chef/provider/package/yum.rb +4 -6
  95. data/lib/chef/provider/package/zypper.rb +16 -14
  96. data/lib/chef/provider/powershell_script.rb +129 -47
  97. data/lib/chef/provider/remote_file/content.rb +4 -1
  98. data/lib/chef/provider/remote_file/local_file.rb +10 -4
  99. data/lib/chef/provider/service.rb +44 -0
  100. data/lib/chef/provider/service/freebsd.rb +1 -1
  101. data/lib/chef/provider/service/init.rb +1 -0
  102. data/lib/chef/provider/service/macosx.rb +1 -1
  103. data/lib/chef/provider/service/windows.rb +0 -1
  104. data/lib/chef/provider/user.rb +1 -1
  105. data/lib/chef/provider/user/aix.rb +3 -2
  106. data/lib/chef/provider/user/pw.rb +1 -0
  107. data/lib/chef/provider/user/solaris.rb +2 -0
  108. data/lib/chef/provider/user/useradd.rb +1 -0
  109. data/lib/chef/provider_resolver.rb +87 -134
  110. data/lib/chef/resource.rb +274 -68
  111. data/lib/chef/resource/apt_package.rb +0 -2
  112. data/lib/chef/resource/bash.rb +0 -2
  113. data/lib/chef/resource/batch.rb +1 -1
  114. data/lib/chef/resource/bff_package.rb +0 -7
  115. data/lib/chef/resource/breakpoint.rb +3 -6
  116. data/lib/chef/resource/chef_gem.rb +0 -3
  117. data/lib/chef/resource/cookbook_file.rb +1 -3
  118. data/lib/chef/resource/cron.rb +2 -4
  119. data/lib/chef/resource/csh.rb +0 -2
  120. data/lib/chef/resource/deploy.rb +9 -6
  121. data/lib/chef/resource/deploy_revision.rb +0 -14
  122. data/lib/chef/resource/directory.rb +2 -4
  123. data/lib/chef/resource/dpkg_package.rb +0 -5
  124. data/lib/chef/resource/dsc_resource.rb +2 -3
  125. data/lib/chef/resource/dsc_script.rb +2 -3
  126. data/lib/chef/resource/easy_install_package.rb +0 -7
  127. data/lib/chef/resource/env.rb +3 -3
  128. data/lib/chef/resource/erl_call.rb +2 -5
  129. data/lib/chef/resource/execute.rb +2 -4
  130. data/lib/chef/resource/file.rb +2 -4
  131. data/lib/chef/resource/freebsd_package.rb +0 -5
  132. data/lib/chef/resource/gem_package.rb +0 -3
  133. data/lib/chef/resource/git.rb +0 -3
  134. data/lib/chef/resource/group.rb +2 -4
  135. data/lib/chef/resource/homebrew_package.rb +0 -2
  136. data/lib/chef/resource/http_request.rb +3 -4
  137. data/lib/chef/resource/ifconfig.rb +3 -4
  138. data/lib/chef/resource/ips_package.rb +2 -2
  139. data/lib/chef/resource/link.rb +3 -5
  140. data/lib/chef/resource/log.rb +2 -4
  141. data/lib/chef/resource/lwrp_base.rb +10 -61
  142. data/lib/chef/resource/macosx_service.rb +1 -2
  143. data/lib/chef/resource/macports_package.rb +0 -7
  144. data/lib/chef/resource/mdadm.rb +2 -5
  145. data/lib/chef/resource/mount.rb +2 -4
  146. data/lib/chef/resource/ohai.rb +2 -4
  147. data/lib/chef/resource/openbsd_package.rb +0 -6
  148. data/lib/chef/resource/package.rb +9 -6
  149. data/lib/chef/resource/pacman_package.rb +0 -7
  150. data/lib/chef/resource/paludis_package.rb +2 -3
  151. data/lib/chef/resource/perl.rb +0 -3
  152. data/lib/chef/resource/portage_package.rb +0 -3
  153. data/lib/chef/resource/powershell_script.rb +1 -2
  154. data/lib/chef/resource/python.rb +0 -3
  155. data/lib/chef/resource/reboot.rb +1 -3
  156. data/lib/chef/resource/registry_key.rb +3 -5
  157. data/lib/chef/resource/remote_directory.rb +3 -5
  158. data/lib/chef/resource/remote_file.rb +4 -5
  159. data/lib/chef/resource/route.rb +3 -5
  160. data/lib/chef/resource/rpm_package.rb +0 -2
  161. data/lib/chef/resource/ruby.rb +0 -4
  162. data/lib/chef/resource/ruby_block.rb +2 -4
  163. data/lib/chef/resource/scm.rb +3 -5
  164. data/lib/chef/resource/script.rb +0 -3
  165. data/lib/chef/resource/service.rb +3 -5
  166. data/lib/chef/resource/smartos_package.rb +0 -9
  167. data/lib/chef/resource/solaris_package.rb +0 -10
  168. data/lib/chef/resource/subversion.rb +1 -3
  169. data/lib/chef/resource/template.rb +0 -4
  170. data/lib/chef/resource/timestamped_deploy.rb +0 -4
  171. data/lib/chef/resource/user.rb +2 -5
  172. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -7
  173. data/lib/chef/resource/windows_package.rb +3 -3
  174. data/lib/chef/resource/windows_script.rb +2 -2
  175. data/lib/chef/resource/windows_service.rb +3 -3
  176. data/lib/chef/resource/yum_package.rb +0 -3
  177. data/lib/chef/resource/zypper_package.rb +27 -0
  178. data/lib/chef/resource_builder.rb +7 -0
  179. data/lib/chef/resource_reporter.rb +1 -1
  180. data/lib/chef/resource_resolver.rb +108 -62
  181. data/lib/chef/resources.rb +1 -0
  182. data/lib/chef/rest.rb +1 -0
  183. data/lib/chef/server_api.rb +2 -0
  184. data/lib/chef/user.rb +193 -42
  185. data/lib/chef/util/backup.rb +9 -1
  186. data/lib/chef/util/path_helper.rb +0 -1
  187. data/lib/chef/version.rb +1 -1
  188. data/spec/functional/audit/runner_spec.rb +22 -42
  189. data/spec/functional/mixin/powershell_out_spec.rb +43 -0
  190. data/spec/functional/resource/execute_spec.rb +9 -2
  191. data/spec/functional/resource/file_spec.rb +25 -0
  192. data/spec/functional/resource/group_spec.rb +5 -0
  193. data/spec/functional/resource/link_spec.rb +5 -11
  194. data/spec/functional/resource/powershell_spec.rb +40 -5
  195. data/spec/functional/resource/user/useradd_spec.rb +10 -18
  196. data/spec/integration/recipes/lwrp_spec.rb +57 -0
  197. data/spec/integration/recipes/provider_choice.rb +2 -7
  198. data/spec/integration/recipes/recipe_dsl_spec.rb +517 -19
  199. data/spec/spec_helper.rb +1 -1
  200. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -0
  201. data/spec/support/lib/chef/resource/cat.rb +0 -2
  202. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -6
  203. data/spec/support/lib/chef/resource/openldap_includer.rb +27 -0
  204. data/spec/support/lib/chef/resource/with_state.rb +0 -9
  205. data/spec/support/lib/chef/resource/zen_follower.rb +0 -6
  206. data/spec/support/lib/chef/resource/zen_master.rb +1 -6
  207. data/spec/support/shared/context/client.rb +277 -0
  208. data/spec/support/shared/examples/client.rb +53 -0
  209. data/spec/support/shared/functional/file_resource.rb +0 -4
  210. data/spec/support/shared/functional/securable_resource.rb +0 -24
  211. data/spec/support/shared/functional/securable_resource_with_reporting.rb +4 -4
  212. data/spec/support/shared/functional/windows_script.rb +1 -1
  213. data/spec/support/shared/unit/api_versioning.rb +77 -0
  214. data/spec/support/shared/unit/knife_shared.rb +40 -0
  215. data/spec/support/shared/unit/user_and_client_shared.rb +115 -0
  216. data/spec/unit/api_client_spec.rb +189 -14
  217. data/spec/unit/application/client_spec.rb +0 -5
  218. data/spec/unit/audit/audit_reporter_spec.rb +58 -14
  219. data/spec/unit/audit/logger_spec.rb +42 -0
  220. data/spec/unit/audit/runner_spec.rb +2 -2
  221. data/spec/unit/chef_fs/file_pattern_spec.rb +3 -15
  222. data/spec/unit/client_spec.rb +58 -374
  223. data/spec/unit/cookbook_spec.rb +0 -9
  224. data/spec/unit/cookbook_version_spec.rb +0 -20
  225. data/spec/unit/deprecation_spec.rb +55 -0
  226. data/spec/unit/dsl/resources_spec.rb +85 -0
  227. data/spec/unit/exceptions_spec.rb +2 -2
  228. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +60 -0
  229. data/spec/unit/formatters/doc_spec.rb +46 -0
  230. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +12 -10
  231. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +8 -0
  232. data/spec/unit/http/authenticator_spec.rb +11 -2
  233. data/spec/unit/knife/client_create_spec.rb +122 -51
  234. data/spec/unit/knife/core/subcommand_loader_spec.rb +19 -3
  235. data/spec/unit/knife/core/ui_spec.rb +14 -0
  236. data/spec/unit/knife/osc_user_create_spec.rb +93 -0
  237. data/spec/unit/knife/osc_user_delete_spec.rb +44 -0
  238. data/spec/unit/knife/osc_user_edit_spec.rb +52 -0
  239. data/spec/unit/knife/osc_user_list_spec.rb +37 -0
  240. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -0
  241. data/spec/unit/knife/osc_user_show_spec.rb +46 -0
  242. data/spec/unit/knife/user_create_spec.rb +177 -51
  243. data/spec/unit/knife/user_delete_spec.rb +34 -8
  244. data/spec/unit/knife/user_edit_spec.rb +31 -12
  245. data/spec/unit/knife/user_list_spec.rb +7 -3
  246. data/spec/unit/knife/user_reregister_spec.rb +38 -17
  247. data/spec/unit/knife/user_show_spec.rb +35 -11
  248. data/spec/unit/knife_spec.rb +10 -4
  249. data/spec/unit/lwrp_spec.rb +228 -54
  250. data/spec/unit/mixin/api_version_request_handling_spec.rb +127 -0
  251. data/spec/unit/mixin/command_spec.rb +1 -2
  252. data/spec/unit/mixin/powershell_out_spec.rb +70 -0
  253. data/spec/unit/mixin/uris_spec.rb +23 -11
  254. data/spec/unit/node_map_spec.rb +4 -1
  255. data/spec/unit/osc_user_spec.rb +276 -0
  256. data/spec/unit/platform_spec.rb +0 -60
  257. data/spec/unit/provider/deploy_spec.rb +1 -1
  258. data/spec/unit/provider/directory_spec.rb +199 -135
  259. data/spec/unit/provider/ifconfig/debian_spec.rb +0 -10
  260. data/spec/unit/provider/package/aix_spec.rb +16 -16
  261. data/spec/unit/provider/package/dpkg_spec.rb +2 -2
  262. data/spec/unit/provider/package/freebsd/pkg_spec.rb +13 -13
  263. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  264. data/spec/unit/provider/package/freebsd/port_spec.rb +7 -7
  265. data/spec/unit/provider/package/ips_spec.rb +22 -22
  266. data/spec/unit/provider/package/macports_spec.rb +10 -10
  267. data/spec/unit/provider/package/openbsd_spec.rb +4 -26
  268. data/spec/unit/provider/package/pacman_spec.rb +5 -5
  269. data/spec/unit/provider/package/rpm_spec.rb +14 -14
  270. data/spec/unit/provider/package/rubygems_spec.rb +10 -44
  271. data/spec/unit/provider/package/smartos_spec.rb +4 -4
  272. data/spec/unit/provider/package/solaris_spec.rb +11 -11
  273. data/spec/unit/provider/package/zypper_spec.rb +125 -90
  274. data/spec/unit/provider/package_spec.rb +34 -0
  275. data/spec/unit/provider/powershell_spec.rb +53 -11
  276. data/spec/unit/provider/remote_directory_spec.rb +2 -2
  277. data/spec/unit/provider/remote_file/local_file_spec.rb +25 -6
  278. data/spec/unit/provider/service/freebsd_service_spec.rb +0 -12
  279. data/spec/unit/provider/user_spec.rb +3 -3
  280. data/spec/unit/provider_resolver_spec.rb +463 -327
  281. data/spec/unit/recipe_spec.rb +42 -15
  282. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  283. data/spec/unit/resource/erl_call_spec.rb +1 -1
  284. data/spec/unit/resource/file_spec.rb +1 -1
  285. data/spec/unit/resource/ifconfig_spec.rb +10 -6
  286. data/spec/unit/resource/remote_file_spec.rb +5 -0
  287. data/spec/unit/resource/route_spec.rb +1 -1
  288. data/spec/unit/resource/ruby_block_spec.rb +2 -2
  289. data/spec/unit/resource/template_spec.rb +1 -1
  290. data/spec/unit/resource/timestamped_deploy_spec.rb +1 -2
  291. data/spec/unit/resource/windows_service_spec.rb +1 -1
  292. data/spec/unit/resource_spec.rb +99 -13
  293. data/spec/unit/rest_spec.rb +5 -5
  294. data/spec/unit/run_context_spec.rb +41 -0
  295. data/spec/unit/runner_spec.rb +2 -2
  296. data/spec/unit/user_spec.rb +406 -93
  297. data/tasks/maintainers.rb +69 -0
  298. metadata +37 -4
@@ -29,6 +29,40 @@ class Chef
29
29
 
30
30
  banner "knife user delete USER (options)"
31
31
 
32
+ def osc_11_warning
33
+ <<-EOF
34
+ The Chef Server you are using does not support the username field.
35
+ This means it is an Open Source 11 Server.
36
+ knife user delete for Open Source 11 Server is being deprecated.
37
+ Open Source 11 Server user commands now live under the knife osc_user namespace.
38
+ For backwards compatibility, we will forward this request to knife osc_user delete.
39
+ If you are using an Open Source 11 Server, please use that command to avoid this warning.
40
+ EOF
41
+ end
42
+
43
+ def run_osc_11_user_delete
44
+ # run osc_user_delete with our input
45
+ ARGV.delete("user")
46
+ ARGV.unshift("osc_user")
47
+ Chef::Knife.run(ARGV, Chef::Application::Knife.options)
48
+ end
49
+
50
+ # DEPRECATION NOTE
51
+ # Delete this override method after OSC 11 support is dropped
52
+ def delete_object(user_name)
53
+ confirm("Do you really want to delete #{user_name}")
54
+
55
+ if Kernel.block_given?
56
+ object = block.call
57
+ else
58
+ object = Chef::User.load(user_name)
59
+ object.destroy
60
+ end
61
+
62
+ output(format_for_display(object)) if config[:print_after]
63
+ self.msg("Deleted #{user_name}")
64
+ end
65
+
32
66
  def run
33
67
  @user_name = @name_args[0]
34
68
 
@@ -38,9 +72,25 @@ class Chef
38
72
  exit 1
39
73
  end
40
74
 
41
- delete_object(Chef::User, @user_name)
42
- end
75
+ # DEPRECATION NOTE
76
+ #
77
+ # Below is modification of Chef::Knife.delete_object to detect OSC 11 server.
78
+ # When OSC 11 is deprecated, simply delete all this and go back to:
79
+ #
80
+ # delete_object(Chef::User, @user_name)
81
+ #
82
+ # Also delete our override of delete_object above
83
+ object = Chef::User.load(@user_name)
43
84
 
85
+ # OSC 11 case
86
+ if object.username.nil?
87
+ ui.warn(osc_11_warning)
88
+ run_osc_11_user_delete
89
+ else # proceed with EC / CS delete
90
+ delete_object(@user_name)
91
+ end
92
+
93
+ end
44
94
  end
45
95
  end
46
96
  end
@@ -29,6 +29,24 @@ class Chef
29
29
 
30
30
  banner "knife user edit USER (options)"
31
31
 
32
+ def osc_11_warning
33
+ <<-EOF
34
+ The Chef Server you are using does not support the username field.
35
+ This means it is an Open Source 11 Server.
36
+ knife user edit for Open Source 11 Server is being deprecated.
37
+ Open Source 11 Server user commands now live under the knife oc_user namespace.
38
+ For backwards compatibility, we will forward this request to knife osc_user edit.
39
+ If you are using an Open Source 11 Server, please use that command to avoid this warning.
40
+ EOF
41
+ end
42
+
43
+ def run_osc_11_user_edit
44
+ # run osc_user_create with our input
45
+ ARGV.delete("user")
46
+ ARGV.unshift("osc_user")
47
+ Chef::Knife.run(ARGV, Chef::Application::Knife.options)
48
+ end
49
+
32
50
  def run
33
51
  @user_name = @name_args[0]
34
52
 
@@ -39,14 +57,26 @@ class Chef
39
57
  end
40
58
 
41
59
  original_user = Chef::User.load(@user_name).to_hash
42
- edited_user = edit_data(original_user)
43
- if original_user != edited_user
44
- user = Chef::User.from_hash(edited_user)
45
- user.update
46
- ui.msg("Saved #{user}.")
47
- else
48
- ui.msg("User unchaged, not saving.")
60
+
61
+ # DEPRECATION NOTE
62
+ # Remove this if statement and corrosponding code post OSC 11 support.
63
+ #
64
+ # if username is nil, we are in the OSC 11 case,
65
+ # forward to deprecated command
66
+ if original_user["username"].nil?
67
+ ui.warn(osc_11_warning)
68
+ run_osc_11_user_edit
69
+ else # EC / CS 12 user create
70
+ edited_user = edit_data(original_user)
71
+ if original_user != edited_user
72
+ user = Chef::User.from_hash(edited_user)
73
+ user.update
74
+ ui.msg("Saved #{user}.")
75
+ else
76
+ ui.msg("User unchaged, not saving.")
77
+ end
49
78
  end
79
+
50
80
  end
51
81
  end
52
82
  end
@@ -18,6 +18,8 @@
18
18
 
19
19
  require 'chef/knife'
20
20
 
21
+ # NOTE: only knife user command that is backwards compatible with OSC 11,
22
+ # so no deprecation warnings are necessary.
21
23
  class Chef
22
24
  class Knife
23
25
  class UserList < Knife
@@ -37,6 +39,7 @@ class Chef
37
39
  def run
38
40
  output(format_list_for_display(Chef::User.list))
39
41
  end
42
+
40
43
  end
41
44
  end
42
45
  end
@@ -29,6 +29,24 @@ class Chef
29
29
 
30
30
  banner "knife user reregister USER (options)"
31
31
 
32
+ def osc_11_warning
33
+ <<-EOF
34
+ The Chef Server you are using does not support the username field.
35
+ This means it is an Open Source 11 Server.
36
+ knife user reregister for Open Source 11 Server is being deprecated.
37
+ Open Source 11 Server user commands now live under the knife osc_user namespace.
38
+ For backwards compatibility, we will forward this request to knife osc_user reregister.
39
+ If you are using an Open Source 11 Server, please use that command to avoid this warning.
40
+ EOF
41
+ end
42
+
43
+ def run_osc_11_user_reregister
44
+ # run osc_user_edit with our input
45
+ ARGV.delete("user")
46
+ ARGV.unshift("osc_user")
47
+ Chef::Knife.run(ARGV, Chef::Application::Knife.options)
48
+ end
49
+
32
50
  option :file,
33
51
  :short => "-f FILE",
34
52
  :long => "--file FILE",
@@ -43,16 +61,29 @@ class Chef
43
61
  exit 1
44
62
  end
45
63
 
46
- user = Chef::User.load(@user_name).reregister
47
- Chef::Log.debug("Updated user data: #{user.inspect}")
48
- key = user.private_key
49
- if config[:file]
50
- File.open(config[:file], "w") do |f|
51
- f.print(key)
64
+ user = Chef::User.load(@user_name)
65
+
66
+ # DEPRECATION NOTE
67
+ # Remove this if statement and corrosponding code post OSC 11 support.
68
+ #
69
+ # if username is nil, we are in the OSC 11 case,
70
+ # forward to deprecated command
71
+ if user.username.nil?
72
+ ui.warn(osc_11_warning)
73
+ run_osc_11_user_reregister
74
+ else # EC / CS 12 case
75
+ user.reregister
76
+ Chef::Log.debug("Updated user data: #{user.inspect}")
77
+ key = user.private_key
78
+ if config[:file]
79
+ File.open(config[:file], "w") do |f|
80
+ f.print(key)
81
+ end
82
+ else
83
+ ui.msg key
52
84
  end
53
- else
54
- ui.msg key
55
85
  end
86
+
56
87
  end
57
88
  end
58
89
  end
@@ -31,6 +31,24 @@ class Chef
31
31
 
32
32
  banner "knife user show USER (options)"
33
33
 
34
+ def osc_11_warning
35
+ <<-EOF
36
+ The Chef Server you are using does not support the username field.
37
+ This means it is an Open Source 11 Server.
38
+ knife user show for Open Source 11 Server is being deprecated.
39
+ Open Source 11 Server user commands now live under the knife osc_user namespace.
40
+ For backwards compatibility, we will forward this request to knife osc_user show.
41
+ If you are using an Open Source 11 Server, please use that command to avoid this warning.
42
+ EOF
43
+ end
44
+
45
+ def run_osc_11_user_show
46
+ # run osc_user_edit with our input
47
+ ARGV.delete("user")
48
+ ARGV.unshift("osc_user")
49
+ Chef::Knife.run(ARGV, Chef::Application::Knife.options)
50
+ end
51
+
34
52
  def run
35
53
  @user_name = @name_args[0]
36
54
 
@@ -41,7 +59,18 @@ class Chef
41
59
  end
42
60
 
43
61
  user = Chef::User.load(@user_name)
44
- output(format_for_display(user))
62
+
63
+ # DEPRECATION NOTE
64
+ # Remove this if statement and corrosponding code post OSC 11 support.
65
+ #
66
+ # if username is nil, we are in the OSC 11 case,
67
+ # forward to deprecated command
68
+ if user.username.nil?
69
+ ui.warn(osc_11_warning)
70
+ run_osc_11_user_show
71
+ else
72
+ output(format_for_display(user))
73
+ end
45
74
  end
46
75
 
47
76
  end
@@ -0,0 +1,66 @@
1
+ #
2
+ # Author:: Tyler Cloke (tyler@chef.io)
3
+ # Copyright:: Copyright 2015 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
+ class Chef
20
+ module Mixin
21
+ module ApiVersionRequestHandling
22
+ # Input:
23
+ # exeception:
24
+ # Net::HTTPServerException that may or may not contain the x-ops-server-api-version header
25
+ # supported_client_versions:
26
+ # An array of Integers that represent the API versions the client supports.
27
+ #
28
+ # Output:
29
+ # nil:
30
+ # If the execption was not a 406 or the server does not support versioning
31
+ # Array of length zero:
32
+ # If there was no intersection between supported client versions and supported server versions
33
+ # Arrary of Integers:
34
+ # If there was an intersection of supported versions, the array returns will contain that intersection
35
+ def server_client_api_version_intersection(exception, supported_client_versions)
36
+ # return empty array unless 406 Unacceptable with proper header
37
+ return nil if exception.response.code != "406" || exception.response["x-ops-server-api-version"].nil?
38
+
39
+ # intersection of versions the server and client support, will be of length zero if no intersection
40
+ server_supported_client_versions = Array.new
41
+
42
+ header = Chef::JSONCompat.from_json(exception.response["x-ops-server-api-version"])
43
+ min_server_version = Integer(header["min_version"])
44
+ max_server_version = Integer(header["max_version"])
45
+
46
+ supported_client_versions.each do |version|
47
+ if version >= min_server_version && version <= max_server_version
48
+ server_supported_client_versions.push(version)
49
+ end
50
+ end
51
+ server_supported_client_versions
52
+ end
53
+
54
+ def reregister_only_v0_supported_error_msg(max_version, min_version)
55
+ <<-EOH
56
+ The reregister command only supports server API version 0.
57
+ The server that received the request supports a min version of #{min_version} and a max version of #{max_version}.
58
+ User keys are now managed via the key rotation commmands.
59
+ Please refer to the documentation on how to manage your keys via the key rotation commands:
60
+ https://docs.chef.io/server_security.html#key-rotation
61
+ EOH
62
+ end
63
+
64
+ end
65
+ end
66
+ end
@@ -23,9 +23,7 @@ class Chef
23
23
  extend self
24
24
 
25
25
  def convert_to_class_name(str)
26
- str = str.dup
27
- str.gsub!(/[^A-Za-z0-9_]/,'_')
28
- str.gsub!(/^(_+)?/,'')
26
+ str = normalize_snake_case_name(str)
29
27
  rname = nil
30
28
  regexp = %r{^(.+?)(_(.+))?$}
31
29
 
@@ -51,6 +49,13 @@ class Chef
51
49
  str
52
50
  end
53
51
 
52
+ def normalize_snake_case_name(str)
53
+ str = str.dup
54
+ str.gsub!(/[^A-Za-z0-9_]/,'_')
55
+ str.gsub!(/^(_+)?/,'')
56
+ str
57
+ end
58
+
54
59
  def snake_case_basename(str)
55
60
  with_namespace = convert_to_snake_case(str)
56
61
  with_namespace.split("::").last.sub(/^_/, '')
@@ -58,7 +63,8 @@ class Chef
58
63
 
59
64
  def filename_to_qualified_string(base, filename)
60
65
  file_base = File.basename(filename, ".rb")
61
- base.to_s + (file_base == 'default' ? '' : "_#{file_base}")
66
+ str = base.to_s + (file_base == 'default' ? '' : "_#{file_base}")
67
+ normalize_snake_case_name(str)
62
68
  end
63
69
 
64
70
  # Copied from rails activesupport. In ruby >= 2.0 const_get will just do this, so this can
@@ -95,6 +95,30 @@ class Chef
95
95
  DeprecatedInstanceVariable.new(obj, name, level)
96
96
  end
97
97
 
98
+ def deprecated_attr(name, alternative)
99
+ deprecated_attr_reader(name, alternative)
100
+ deprecated_attr_writer(name, alternative)
101
+ end
102
+
103
+ def deprecated_attr_reader(name, alternative, level=:warn)
104
+ define_method(name) do
105
+ Chef::Log.deprecation("#{self.class}.#{name} is deprecated. Support will be removed in a future release.")
106
+ Chef::Log.deprecation(alternative)
107
+ Chef::Log.deprecation("Called from:")
108
+ caller[0..3].each {|c| Chef::Log.deprecation(c)}
109
+ instance_variable_get("@#{name}")
110
+ end
111
+ end
112
+
113
+ def deprecated_attr_writer(name, alternative, level=:warn)
114
+ define_method("#{name}=") do |value|
115
+ Chef::Log.deprecation("Writing to #{self.class}.#{name} with #{name}= is deprecated. Support will be removed in a future release.")
116
+ Chef::Log.deprecation(alternative)
117
+ Chef::Log.deprecation("Called from:")
118
+ caller[0..3].each {|c| Chef::Log.deprecation(c)}
119
+ instance_variable_set("@#{name}", value)
120
+ end
121
+ end
98
122
  end
99
123
  end
100
124
  end
@@ -0,0 +1,98 @@
1
+ #--
2
+ # Copyright:: Copyright (c) 2015 Chef Software, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'chef/mixin/shell_out'
18
+ require 'chef/mixin/windows_architecture_helper'
19
+
20
+ class Chef
21
+ module Mixin
22
+ module PowershellOut
23
+ include Chef::Mixin::ShellOut
24
+ include Chef::Mixin::WindowsArchitectureHelper
25
+
26
+ # Run a command under powershell with the same API as shell_out. The
27
+ # options hash is extended to take an "architecture" flag which
28
+ # can be set to :i386 or :x86_64 to force the windows architecture.
29
+ #
30
+ # @param script [String] script to run
31
+ # @param options [Hash] options hash
32
+ # @return [Mixlib::Shellout] mixlib-shellout object
33
+ def powershell_out(*command_args)
34
+ script = command_args.first
35
+ options = command_args.last.is_a?(Hash) ? command_args.last : nil
36
+
37
+ run_command_with_os_architecture(script, options)
38
+ end
39
+
40
+ # Run a command under powershell with the same API as shell_out!
41
+ # (raises exceptions on errors)
42
+ #
43
+ # @param script [String] script to run
44
+ # @param options [Hash] options hash
45
+ # @return [Mixlib::Shellout] mixlib-shellout object
46
+ def powershell_out!(*command_args)
47
+ cmd = powershell_out(*command_args)
48
+ cmd.error!
49
+ cmd
50
+ end
51
+
52
+ private
53
+
54
+ # Helper function to run shell_out and wrap it with the correct
55
+ # flags to possibly disable WOW64 redirection (which we often need
56
+ # because chef-client runs as a 32-bit app on 64-bit windows).
57
+ #
58
+ # @param script [String] script to run
59
+ # @param options [Hash] options hash
60
+ # @return [Mixlib::Shellout] mixlib-shellout object
61
+ def run_command_with_os_architecture(script, options)
62
+ options ||= {}
63
+ options = options.dup
64
+ arch = options.delete(:architecture)
65
+
66
+ with_os_architecture(nil, architecture: arch) do
67
+ shell_out(
68
+ build_powershell_command(script),
69
+ options
70
+ )
71
+ end
72
+ end
73
+
74
+ # Helper to build a powershell command around the script to run.
75
+ #
76
+ # @param script [String] script to run
77
+ # @retrurn [String] powershell command to execute
78
+ def build_powershell_command(script)
79
+ flags = [
80
+ # Hides the copyright banner at startup.
81
+ "-NoLogo",
82
+ # Does not present an interactive prompt to the user.
83
+ "-NonInteractive",
84
+ # Does not load the Windows PowerShell profile.
85
+ "-NoProfile",
86
+ # always set the ExecutionPolicy flag
87
+ # see http://technet.microsoft.com/en-us/library/ee176961.aspx
88
+ "-ExecutionPolicy Unrestricted",
89
+ # Powershell will hang if STDIN is redirected
90
+ # http://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
91
+ "-InputFormat None"
92
+ ]
93
+
94
+ "powershell.exe #{flags.join(' ')} -Command \"#{script}\""
95
+ end
96
+ end
97
+ end
98
+ end