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
@@ -22,197 +22,198 @@ describe "knife config list-profiles", :workstation do
22
22
  include KnifeSupport
23
23
 
24
24
  include_context "default config options"
25
- include_context "with a chef repo"
26
-
27
- let(:cmd_args) { [] }
28
- let(:knife_list_profiles) do
29
- knife("config", "list-profiles", *cmd_args, instance_filter: lambda { |instance|
30
- # Fake the failsafe check because this command doesn't actually process knife.rb.
31
- $__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
32
- allow(File).to receive(:file?).and_call_original
33
- })
34
- end
35
- subject { knife_list_profiles.stdout }
36
-
37
- around do |ex|
38
- # Store and reset the value of some env vars.
39
- old_home = ENV["HOME"]
40
- old_wd = Dir.pwd
41
- # Clear these out because they are cached permanently.
42
- ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
43
- Chef::Knife::ConfigListProfiles.reset_config_loader!
44
- begin
45
- ex.run
46
- ensure
47
- ENV["HOME"] = old_home
48
- Dir.chdir(old_wd)
49
- ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
25
+
26
+ when_the_repository("has a custom env") do
27
+ let(:cmd_args) { [] }
28
+ let(:knife_list_profiles) do
29
+ knife("config", "list-profiles", *cmd_args, instance_filter: lambda { |instance|
30
+ # Fake the failsafe check because this command doesn't actually process knife.rb.
31
+ $__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
32
+ allow(File).to receive(:file?).and_call_original
33
+ })
34
+ end
35
+ subject { knife_list_profiles.stdout }
36
+
37
+ around do |ex|
38
+ # Store and reset the value of some env vars.
39
+ old_home = ENV["HOME"]
40
+ old_wd = Dir.pwd
41
+ # Clear these out because they are cached permanently.
42
+ ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
43
+ Chef::Knife::ConfigListProfiles.reset_config_loader!
44
+ begin
45
+ ex.run
46
+ ensure
47
+ ENV["HOME"] = old_home
48
+ Dir.chdir(old_wd)
49
+ ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
50
+ end
50
51
  end
51
- end
52
52
 
53
- before do
54
- # Always run from the temp folder. This can't be in the `around` block above
55
- # because it has to run after the before set in the "with a chef repo" shared context.
56
- directory("repo")
57
- Dir.chdir(path_to("repo"))
58
- ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
59
- ENV["HOME"] = path_to(".")
60
- end
53
+ before do
54
+ # Always run from the temp folder. This can't be in the `around` block above
55
+ # because it has to run after the before set in the "with a chef repo" shared context.
56
+ directory("repo")
57
+ Dir.chdir(path_to("repo"))
58
+ ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
59
+ ENV["HOME"] = path_to(".")
60
+ end
61
61
 
62
- # NOTE: The funky formatting with # at the end of the line of some of the
63
- # output examples are because of how the format strings are built, there is
64
- # substantial trailing whitespace in most cases which many editors "helpfully" remove.
62
+ # NOTE: The funky formatting with # at the end of the line of some of the
63
+ # output examples are because of how the format strings are built, there is
64
+ # substantial trailing whitespace in most cases which many editors "helpfully" remove.
65
65
 
66
- context "with no credentials file" do
67
- subject { knife_list_profiles.stderr }
68
- it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
69
- end
66
+ context "with no credentials file" do
67
+ subject { knife_list_profiles.stderr }
68
+ it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
69
+ end
70
70
 
71
- context "with an empty credentials file" do
72
- before { file(".chef/credentials", "") }
73
- subject { knife_list_profiles.stderr }
74
- it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
75
- end
71
+ context "with an empty credentials file" do
72
+ before { file(".chef/credentials", "") }
73
+ subject { knife_list_profiles.stderr }
74
+ it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
75
+ end
76
76
 
77
- context "with a simple default profile" do
78
- before { file(".chef/credentials", <<~EOH) }
79
- [default]
80
- client_name = "testuser"
81
- client_key = "testkey.pem"
82
- chef_server_url = "https://example.com/organizations/testorg"
83
- EOH
84
- it { is_expected.to eq <<~EOH.delete("#") }
85
- Profile Client Key Server #
86
- ----------------------------------------------------------------------------------#
87
- *default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
88
- EOH
89
- end
77
+ context "with a simple default profile" do
78
+ before { file(".chef/credentials", <<~EOH) }
79
+ [default]
80
+ client_name = "testuser"
81
+ client_key = "testkey.pem"
82
+ chef_server_url = "https://example.com/organizations/testorg"
83
+ EOH
84
+ it { is_expected.to eq <<~EOH.delete("#") }
85
+ Profile Client Key Server #
86
+ ----------------------------------------------------------------------------------#
87
+ *default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
88
+ EOH
89
+ end
90
90
 
91
- context "with multiple profiles" do
92
- before { file(".chef/credentials", <<~EOH) }
93
- [default]
94
- client_name = "testuser"
95
- client_key = "testkey.pem"
96
- chef_server_url = "https://example.com/organizations/testorg"
97
-
98
- [prod]
99
- client_name = "testuser"
100
- client_key = "testkey.pem"
101
- chef_server_url = "https://example.com/organizations/prod"
102
-
103
- [qa]
104
- client_name = "qauser"
105
- client_key = "~/src/qauser.pem"
106
- chef_server_url = "https://example.com/organizations/testorg"
107
- EOH
108
- it { is_expected.to eq <<~EOH.delete("#") }
109
- Profile Client Key Server #
110
- ----------------------------------------------------------------------------------#
111
- *default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
112
- prod testuser ~/.chef/testkey.pem https://example.com/organizations/prod #
113
- qa qauser ~/src/qauser.pem https://example.com/organizations/testorg#
114
- EOH
115
- end
91
+ context "with multiple profiles" do
92
+ before { file(".chef/credentials", <<~EOH) }
93
+ [default]
94
+ client_name = "testuser"
95
+ client_key = "testkey.pem"
96
+ chef_server_url = "https://example.com/organizations/testorg"
97
+
98
+ [prod]
99
+ client_name = "testuser"
100
+ client_key = "testkey.pem"
101
+ chef_server_url = "https://example.com/organizations/prod"
102
+
103
+ [qa]
104
+ client_name = "qauser"
105
+ client_key = "~/src/qauser.pem"
106
+ chef_server_url = "https://example.com/organizations/testorg"
107
+ EOH
108
+ it { is_expected.to eq <<~EOH.delete("#") }
109
+ Profile Client Key Server #
110
+ ----------------------------------------------------------------------------------#
111
+ *default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
112
+ prod testuser ~/.chef/testkey.pem https://example.com/organizations/prod #
113
+ qa qauser ~/src/qauser.pem https://example.com/organizations/testorg#
114
+ EOH
115
+ end
116
116
 
117
- context "with a non-default active profile" do
118
- let(:cmd_args) { %w{--profile prod} }
119
- before { file(".chef/credentials", <<~EOH) }
120
- [default]
121
- client_name = "testuser"
122
- client_key = "testkey.pem"
123
- chef_server_url = "https://example.com/organizations/testorg"
124
-
125
- [prod]
126
- client_name = "testuser"
127
- client_key = "testkey.pem"
128
- chef_server_url = "https://example.com/organizations/prod"
129
-
130
- [qa]
131
- client_name = "qauser"
132
- client_key = "~/src/qauser.pem"
133
- chef_server_url = "https://example.com/organizations/testorg"
134
- EOH
135
- it { is_expected.to eq <<~EOH.delete("#") }
136
- Profile Client Key Server #
137
- ----------------------------------------------------------------------------------#
138
- default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
139
- *prod testuser ~/.chef/testkey.pem https://example.com/organizations/prod #
140
- qa qauser ~/src/qauser.pem https://example.com/organizations/testorg#
141
- EOH
142
- end
117
+ context "with a non-default active profile" do
118
+ let(:cmd_args) { %w{--profile prod} }
119
+ before { file(".chef/credentials", <<~EOH) }
120
+ [default]
121
+ client_name = "testuser"
122
+ client_key = "testkey.pem"
123
+ chef_server_url = "https://example.com/organizations/testorg"
124
+
125
+ [prod]
126
+ client_name = "testuser"
127
+ client_key = "testkey.pem"
128
+ chef_server_url = "https://example.com/organizations/prod"
129
+
130
+ [qa]
131
+ client_name = "qauser"
132
+ client_key = "~/src/qauser.pem"
133
+ chef_server_url = "https://example.com/organizations/testorg"
134
+ EOH
135
+ it { is_expected.to eq <<~EOH.delete("#") }
136
+ Profile Client Key Server #
137
+ ----------------------------------------------------------------------------------#
138
+ default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
139
+ *prod testuser ~/.chef/testkey.pem https://example.com/organizations/prod #
140
+ qa qauser ~/src/qauser.pem https://example.com/organizations/testorg#
141
+ EOH
142
+ end
143
143
 
144
- context "with a bad profile as an active profile" do
145
- let(:cmd_args) { %w{--profile production} }
146
- before { file(".chef/credentials", <<~EOH) }
147
- [default]
148
- client_name = "testuser"
149
- client_key = "testkey.pem"
150
- chef_server_url = "https://example.com/organizations/testorg"
151
-
152
- [prod]
153
- client_name = "testuser"
154
- client_key = "testkey.pem"
155
- chef_server_url = "https://example.com/organizations/prod"
156
-
157
- [qa]
158
- client_name = "qauser"
159
- client_key = "~/src/qauser.pem"
160
- chef_server_url = "https://example.com/organizations/testorg"
161
- EOH
162
- it { is_expected.to eq <<~EOH.delete("#") }
163
- Profile Client Key Server #
164
- ---------------------------------------------------------------------------------#
165
- default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
166
- prod testuser ~/.chef/testkey.pem https://example.com/organizations/prod #
167
- qa qauser ~/src/qauser.pem https://example.com/organizations/testorg#
168
- EOH
169
- end
144
+ context "with a bad profile as an active profile" do
145
+ let(:cmd_args) { %w{--profile production} }
146
+ before { file(".chef/credentials", <<~EOH) }
147
+ [default]
148
+ client_name = "testuser"
149
+ client_key = "testkey.pem"
150
+ chef_server_url = "https://example.com/organizations/testorg"
151
+
152
+ [prod]
153
+ client_name = "testuser"
154
+ client_key = "testkey.pem"
155
+ chef_server_url = "https://example.com/organizations/prod"
156
+
157
+ [qa]
158
+ client_name = "qauser"
159
+ client_key = "~/src/qauser.pem"
160
+ chef_server_url = "https://example.com/organizations/testorg"
161
+ EOH
162
+ it { is_expected.to eq <<~EOH.delete("#") }
163
+ Profile Client Key Server #
164
+ ---------------------------------------------------------------------------------#
165
+ default testuser ~/.chef/testkey.pem https://example.com/organizations/testorg#
166
+ prod testuser ~/.chef/testkey.pem https://example.com/organizations/prod #
167
+ qa qauser ~/src/qauser.pem https://example.com/organizations/testorg#
168
+ EOH
169
+ end
170
170
 
171
- context "with a minimal profile" do
172
- before { file(".chef/credentials", <<~EOH) }
173
- [default]
174
- chef_server_url = "https://example.com/organizations/testorg"
175
- EOH
176
- it { is_expected.to match %r{^*default .*? https://example.com/organizations/testorg$} }
177
- end
171
+ context "with a minimal profile" do
172
+ before { file(".chef/credentials", <<~EOH) }
173
+ [default]
174
+ chef_server_url = "https://example.com/organizations/testorg"
175
+ EOH
176
+ it { is_expected.to match %r{^*default .*? https://example.com/organizations/testorg$} }
177
+ end
178
178
 
179
- context "with -i" do
180
- let(:cmd_args) { %w{-i} }
181
- before { file(".chef/credentials", <<~EOH) }
182
- [default]
183
- chef_server_url = "https://example.com/organizations/testorg"
184
- EOH
185
- it { is_expected.to eq <<~EOH.delete("#") }
186
- Profile Client Key Server #
187
- ----------------------------------------------------------------#
188
- *default https://example.com/organizations/testorg#
189
- EOH
190
- end
179
+ context "with -i" do
180
+ let(:cmd_args) { %w{-i} }
181
+ before { file(".chef/credentials", <<~EOH) }
182
+ [default]
183
+ chef_server_url = "https://example.com/organizations/testorg"
184
+ EOH
185
+ it { is_expected.to eq <<~EOH.delete("#") }
186
+ Profile Client Key Server #
187
+ ----------------------------------------------------------------#
188
+ *default https://example.com/organizations/testorg#
189
+ EOH
190
+ end
191
191
 
192
- context "with --format=json" do
193
- let(:cmd_args) { %w{--format=json node_name} }
194
- before { file(".chef/credentials", <<~EOH) }
195
- [default]
196
- client_name = "testuser"
197
- client_key = "testkey.pem"
198
- chef_server_url = "https://example.com/organizations/testorg"
199
-
200
- [prod]
201
- client_name = "testuser"
202
- client_key = "testkey.pem"
203
- chef_server_url = "https://example.com/organizations/prod"
204
-
205
- [qa]
206
- client_name = "qauser"
207
- client_key = "~/src/qauser.pem"
208
- chef_server_url = "https://example.com/organizations/testorg"
209
- EOH
210
- it {
211
- expect(JSON.parse(subject)).to eq [
212
- { "profile" => "default", "active" => true, "client_name" => "testuser", "client_key" => path_to(".chef/testkey.pem"), "server_url" => "https://example.com/organizations/testorg" },
213
- { "profile" => "prod", "active" => false, "client_name" => "testuser", "client_key" => path_to(".chef/testkey.pem"), "server_url" => "https://example.com/organizations/prod" },
214
- { "profile" => "qa", "active" => false, "client_name" => "qauser", "client_key" => path_to("src/qauser.pem"), "server_url" => "https://example.com/organizations/testorg" },
215
- ]
216
- }
192
+ context "with --format=json" do
193
+ let(:cmd_args) { %w{--format=json node_name} }
194
+ before { file(".chef/credentials", <<~EOH) }
195
+ [default]
196
+ client_name = "testuser"
197
+ client_key = "testkey.pem"
198
+ chef_server_url = "https://example.com/organizations/testorg"
199
+
200
+ [prod]
201
+ client_name = "testuser"
202
+ client_key = "testkey.pem"
203
+ chef_server_url = "https://example.com/organizations/prod"
204
+
205
+ [qa]
206
+ client_name = "qauser"
207
+ client_key = "~/src/qauser.pem"
208
+ chef_server_url = "https://example.com/organizations/testorg"
209
+ EOH
210
+ it {
211
+ expect(JSON.parse(subject)).to eq [
212
+ { "profile" => "default", "active" => true, "client_name" => "testuser", "client_key" => path_to(".chef/testkey.pem"), "server_url" => "https://example.com/organizations/testorg" },
213
+ { "profile" => "prod", "active" => false, "client_name" => "testuser", "client_key" => path_to(".chef/testkey.pem"), "server_url" => "https://example.com/organizations/prod" },
214
+ { "profile" => "qa", "active" => false, "client_name" => "qauser", "client_key" => path_to("src/qauser.pem"), "server_url" => "https://example.com/organizations/testorg" },
215
+ ]
216
+ }
217
+ end
217
218
  end
218
219
  end
@@ -22,133 +22,134 @@ describe "knife config use-profile", :workstation do
22
22
  include KnifeSupport
23
23
 
24
24
  include_context "default config options"
25
- include_context "with a chef repo"
26
25
 
27
26
  let(:cmd_args) { [] }
28
27
 
29
- let(:knife_use_profile) do
30
- knife("config", "use-profile", *cmd_args, instance_filter: lambda { |instance|
31
- # Fake the failsafe check because this command doesn't actually process knife.rb.
32
- $__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
33
- allow(File).to receive(:file?).and_call_original
34
- })
35
- end
36
-
37
- subject { knife_use_profile.stdout }
38
-
39
- around do |ex|
40
- # Store and reset the value of some env vars.
41
- old_chef_home = ENV["CHEF_HOME"]
42
- old_knife_home = ENV["KNIFE_HOME"]
43
- old_home = ENV["HOME"]
44
- old_wd = Dir.pwd
45
- ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
46
- # Clear these out because they are cached permanently.
47
- ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
48
- Chef::Knife::ConfigUseProfile.reset_config_loader!
49
- begin
50
- ex.run
51
- ensure
52
- ENV["CHEF_HOME"] = old_chef_home
53
- ENV["KNIFE_HOME"] = old_knife_home
54
- ENV["HOME"] = old_home
55
- Dir.chdir(old_wd)
56
- ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
57
- ChefConfig::PathHelper.per_tool_home_environment = nil
28
+ when_the_repository("has a custom env") do
29
+ let(:knife_use_profile) do
30
+ knife("config", "use-profile", *cmd_args, instance_filter: lambda { |instance|
31
+ # Fake the failsafe check because this command doesn't actually process knife.rb.
32
+ $__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
33
+ allow(File).to receive(:file?).and_call_original
34
+ })
58
35
  end
59
- end
60
-
61
- before do
62
- # Always run from the temp folder. This can't be in the `around` block above
63
- # because it has to run after the before set in the "with a chef repo" shared context.
64
- directory("repo")
65
- Dir.chdir(path_to("repo"))
66
- ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
67
- ENV["HOME"] = path_to(".")
68
- end
69
36
 
70
- context "with no argument" do
71
- subject { knife_use_profile.stderr }
72
- it { is_expected.to eq "FATAL: You must specify a profile\n" }
73
- end
74
-
75
- context "with an argument" do
76
- let(:cmd_args) { %w{production} }
77
- before { file(".chef/credentials", <<~EOH) }
78
- [production]
79
- client_name = "testuser"
80
- client_key = "testkey.pem"
81
- chef_server_url = "https://example.com/organizations/testorg"
82
- EOH
83
- it do
84
- is_expected.to eq "Set default profile to production\n"
85
- expect(File.read(path_to(".chef/context"))).to eq "production\n"
37
+ subject { knife_use_profile.stdout }
38
+
39
+ around do |ex|
40
+ # Store and reset the value of some env vars.
41
+ old_chef_home = ENV["CHEF_HOME"]
42
+ old_knife_home = ENV["KNIFE_HOME"]
43
+ old_home = ENV["HOME"]
44
+ old_wd = Dir.pwd
45
+ ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
46
+ # Clear these out because they are cached permanently.
47
+ ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
48
+ Chef::Knife::ConfigUseProfile.reset_config_loader!
49
+ begin
50
+ ex.run
51
+ ensure
52
+ ENV["CHEF_HOME"] = old_chef_home
53
+ ENV["KNIFE_HOME"] = old_knife_home
54
+ ENV["HOME"] = old_home
55
+ Dir.chdir(old_wd)
56
+ ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
57
+ ChefConfig::PathHelper.per_tool_home_environment = nil
58
+ end
86
59
  end
87
- end
88
60
 
89
- context "with no credentials file" do
90
- let(:cmd_args) { %w{production} }
91
- subject { knife_use_profile.stderr }
92
- it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
93
- end
94
-
95
- context "with an empty credentials file" do
96
- let(:cmd_args) { %w{production} }
97
- before { file(".chef/credentials", "") }
98
- subject { knife_use_profile.stderr }
99
- it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
100
- end
61
+ before do
62
+ # Always run from the temp folder. This can't be in the `around` block above
63
+ # because it has to run after the before set in the "with a chef repo" shared context.
64
+ directory("repo")
65
+ Dir.chdir(path_to("repo"))
66
+ ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
67
+ ENV["HOME"] = path_to(".")
68
+ end
101
69
 
102
- context "with an wrong argument" do
103
- let(:cmd_args) { %w{staging} }
104
- before { file(".chef/credentials", <<~EOH) }
105
- [production]
106
- client_name = "testuser"
107
- client_key = "testkey.pem"
108
- chef_server_url = "https://example.com/organizations/testorg"
109
- EOH
110
- subject { knife_use_profile }
111
- it { expect { subject }.to raise_error ChefConfig::ConfigurationError, "Profile staging doesn't exist. Please add it to #{path_to(".chef/credentials")} and if it is profile with DNS name check that you are not missing single quotes around it as per docs https://docs.chef.io/workstation/knife_setup/#knife-profiles." }
112
- end
70
+ context "with no argument" do
71
+ subject { knife_use_profile.stderr }
72
+ it { is_expected.to eq "FATAL: You must specify a profile\n" }
73
+ end
113
74
 
114
- context "with $CHEF_HOME" do
115
- let(:cmd_args) { %w{staging} }
116
- before do
117
- ENV["CHEF_HOME"] = path_to("chefhome"); file("chefhome/tmp", "")
118
- file("chefhome/.chef/credentials", <<~EOH
119
- [staging]
120
- client_name = "testuser"
121
- client_key = "testkey.pem"
122
- chef_server_url = "https://example.com/organizations/testorg"
75
+ context "with an argument" do
76
+ let(:cmd_args) { %w{production} }
77
+ before { file(".chef/credentials", <<~EOH) }
78
+ [production]
79
+ client_name = "testuser"
80
+ client_key = "testkey.pem"
81
+ chef_server_url = "https://example.com/organizations/testorg"
123
82
  EOH
124
- )
83
+ it do
84
+ is_expected.to eq "Set default profile to production\n"
85
+ expect(File.read(path_to(".chef/context"))).to eq "production\n"
86
+ end
125
87
  end
126
88
 
127
- it do
128
- is_expected.to eq "Set default profile to staging\n"
129
- expect(File.read(path_to("chefhome/.chef/context"))).to eq "staging\n"
130
- expect(File.exist?(path_to(".chef/context"))).to be_falsey
89
+ context "with no credentials file" do
90
+ let(:cmd_args) { %w{production} }
91
+ subject { knife_use_profile.stderr }
92
+ it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
131
93
  end
132
- end
133
94
 
134
- context "with $KNIFE_HOME" do
135
- let(:cmd_args) { %w{development} }
95
+ context "with an empty credentials file" do
96
+ let(:cmd_args) { %w{production} }
97
+ before { file(".chef/credentials", "") }
98
+ subject { knife_use_profile.stderr }
99
+ it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
100
+ end
136
101
 
137
- before do
138
- ENV["KNIFE_HOME"] = path_to("knifehome"); file("knifehome/tmp", "")
139
- file("knifehome/.chef/credentials", <<~EOH
140
- [development]
141
- client_name = "testuser"
142
- client_key = "testkey.pem"
143
- chef_server_url = "https://example.com/organizations/testorg"
102
+ context "with an wrong argument" do
103
+ let(:cmd_args) { %w{staging} }
104
+ before { file(".chef/credentials", <<~EOH) }
105
+ [production]
106
+ client_name = "testuser"
107
+ client_key = "testkey.pem"
108
+ chef_server_url = "https://example.com/organizations/testorg"
144
109
  EOH
145
- )
110
+ subject { knife_use_profile }
111
+ it { expect { subject }.to raise_error ChefConfig::ConfigurationError, "Profile staging doesn't exist. Please add it to #{path_to(".chef/credentials")} and if it is profile with DNS name check that you are not missing single quotes around it as per docs https://docs.chef.io/workstation/knife_setup/#knife-profiles." }
112
+ end
113
+
114
+ context "with $CHEF_HOME" do
115
+ let(:cmd_args) { %w{staging} }
116
+ before do
117
+ ENV["CHEF_HOME"] = path_to("chefhome"); file("chefhome/tmp", "")
118
+ file("chefhome/.chef/credentials", <<~EOH
119
+ [staging]
120
+ client_name = "testuser"
121
+ client_key = "testkey.pem"
122
+ chef_server_url = "https://example.com/organizations/testorg"
123
+ EOH
124
+ )
125
+ end
126
+
127
+ it do
128
+ is_expected.to eq "Set default profile to staging\n"
129
+ expect(File.read(path_to("chefhome/.chef/context"))).to eq "staging\n"
130
+ expect(File.exist?(path_to(".chef/context"))).to be_falsey
131
+ end
146
132
  end
147
133
 
148
- it do
149
- is_expected.to eq "Set default profile to development\n"
150
- expect(File.read(path_to("knifehome/.chef/context"))).to eq "development\n"
151
- expect(File.exist?(path_to(".chef/context"))).to be_falsey
134
+ context "with $KNIFE_HOME" do
135
+ let(:cmd_args) { %w{development} }
136
+
137
+ before do
138
+ ENV["KNIFE_HOME"] = path_to("knifehome"); file("knifehome/tmp", "")
139
+ file("knifehome/.chef/credentials", <<~EOH
140
+ [development]
141
+ client_name = "testuser"
142
+ client_key = "testkey.pem"
143
+ chef_server_url = "https://example.com/organizations/testorg"
144
+ EOH
145
+ )
146
+ end
147
+
148
+ it do
149
+ is_expected.to eq "Set default profile to development\n"
150
+ expect(File.read(path_to("knifehome/.chef/context"))).to eq "development\n"
151
+ expect(File.exist?(path_to(".chef/context"))).to be_falsey
152
+ end
152
153
  end
153
154
  end
154
155
  end