chef 17.1.35-universal-mingw32 → 17.4.38-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 (198) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -4
  3. data/chef.gemspec +1 -0
  4. data/lib/chef/action_collection.rb +6 -26
  5. data/lib/chef/application/base.rb +15 -0
  6. data/lib/chef/application.rb +4 -2
  7. data/lib/chef/client.rb +7 -1
  8. data/lib/chef/compliance/default_attributes.rb +5 -3
  9. data/lib/chef/compliance/reporter/automate.rb +1 -1
  10. data/lib/chef/compliance/runner.rb +16 -2
  11. data/lib/chef/cookbook_version.rb +26 -4
  12. data/lib/chef/data_collector/run_end_message.rb +1 -1
  13. data/lib/chef/data_collector.rb +0 -1
  14. data/lib/chef/deprecated.rb +14 -4
  15. data/lib/chef/dsl/render_helpers.rb +44 -0
  16. data/lib/chef/dsl/secret.rb +64 -0
  17. data/lib/chef/dsl/toml.rb +116 -0
  18. data/lib/chef/dsl/universal.rb +5 -0
  19. data/lib/chef/dsl.rb +1 -0
  20. data/lib/chef/event_dispatch/base.rb +2 -1
  21. data/lib/chef/exceptions.rb +23 -0
  22. data/lib/chef/formatters/doc.rb +14 -13
  23. data/lib/chef/formatters/error_mapper.rb +2 -2
  24. data/lib/chef/formatters/minimal.rb +6 -5
  25. data/lib/chef/handler/slow_report.rb +66 -0
  26. data/lib/chef/handler.rb +46 -8
  27. data/lib/chef/http.rb +5 -5
  28. data/lib/chef/json_compat.rb +1 -1
  29. data/lib/chef/node.rb +20 -19
  30. data/lib/chef/policy_builder/policyfile.rb +88 -45
  31. data/lib/chef/provider/execute.rb +1 -1
  32. data/lib/chef/provider/file.rb +2 -2
  33. data/lib/chef/provider/group/dscl.rb +1 -1
  34. data/lib/chef/provider/launchd.rb +6 -6
  35. data/lib/chef/provider/lwrp_base.rb +1 -1
  36. data/lib/chef/provider/package/habitat.rb +168 -0
  37. data/lib/chef/provider/package/powershell.rb +5 -0
  38. data/lib/chef/provider/subversion.rb +4 -4
  39. data/lib/chef/provider/support/yum_repo.erb +1 -1
  40. data/lib/chef/provider/support/zypper_repo.erb +4 -2
  41. data/lib/chef/provider/systemd_unit.rb +17 -16
  42. data/lib/chef/provider/user/mac.rb +3 -3
  43. data/lib/chef/provider/yum_repository.rb +27 -43
  44. data/lib/chef/provider/zypper_repository.rb +30 -34
  45. data/lib/chef/provider.rb +26 -1
  46. data/lib/chef/provider_resolver.rb +8 -2
  47. data/lib/chef/providers.rb +1 -0
  48. data/lib/chef/resource/alternatives.rb +5 -5
  49. data/lib/chef/resource/apt_preference.rb +2 -2
  50. data/lib/chef/resource/apt_repository.rb +2 -2
  51. data/lib/chef/resource/apt_update.rb +4 -4
  52. data/lib/chef/resource/build_essential.rb +1 -1
  53. data/lib/chef/resource/chef_client_config.rb +10 -5
  54. data/lib/chef/resource/chef_client_cron.rb +3 -3
  55. data/lib/chef/resource/chef_client_launchd.rb +3 -3
  56. data/lib/chef/resource/chef_client_scheduled_task.rb +15 -15
  57. data/lib/chef/resource/chef_client_systemd_timer.rb +3 -3
  58. data/lib/chef/resource/chef_client_trusted_certificate.rb +2 -2
  59. data/lib/chef/resource/chef_handler.rb +2 -2
  60. data/lib/chef/resource/chef_sleep.rb +1 -1
  61. data/lib/chef/resource/chef_vault_secret.rb +2 -2
  62. data/lib/chef/resource/chocolatey_feature.rb +2 -2
  63. data/lib/chef/resource/chocolatey_source.rb +1 -1
  64. data/lib/chef/resource/cron/cron_d.rb +4 -6
  65. data/lib/chef/resource/cron_access.rb +1 -1
  66. data/lib/chef/resource/dmg_package.rb +1 -1
  67. data/lib/chef/resource/dsc_resource.rb +1 -1
  68. data/lib/chef/resource/execute.rb +5 -5
  69. data/lib/chef/resource/gem_package.rb +2 -1
  70. data/lib/chef/resource/group.rb +4 -4
  71. data/lib/chef/resource/habitat/_habitat_shared.rb +28 -0
  72. data/lib/chef/resource/habitat/habitat_package.rb +129 -0
  73. data/lib/chef/resource/habitat/habitat_sup.rb +329 -0
  74. data/lib/chef/resource/habitat/habitat_sup_systemd.rb +67 -0
  75. data/lib/chef/resource/habitat/habitat_sup_windows.rb +90 -0
  76. data/lib/chef/resource/habitat_config.rb +107 -0
  77. data/lib/chef/resource/habitat_install.rb +247 -0
  78. data/lib/chef/resource/habitat_service.rb +451 -0
  79. data/lib/chef/resource/habitat_user_toml.rb +92 -0
  80. data/lib/chef/resource/homebrew_cask.rb +18 -7
  81. data/lib/chef/resource/homebrew_package.rb +1 -1
  82. data/lib/chef/resource/homebrew_tap.rb +4 -3
  83. data/lib/chef/resource/homebrew_update.rb +2 -2
  84. data/lib/chef/resource/hostname.rb +49 -7
  85. data/lib/chef/resource/inspec_waiver_file_entry.rb +8 -7
  86. data/lib/chef/resource/kernel_module.rb +6 -6
  87. data/lib/chef/resource/launchd.rb +3 -3
  88. data/lib/chef/resource/locale.rb +1 -1
  89. data/lib/chef/resource/lwrp_base.rb +1 -1
  90. data/lib/chef/resource/macos_userdefaults.rb +2 -2
  91. data/lib/chef/resource/ohai_hint.rb +2 -6
  92. data/lib/chef/resource/openbsd_package.rb +17 -0
  93. data/lib/chef/resource/openssl_dhparam.rb +1 -2
  94. data/lib/chef/resource/openssl_ec_private_key.rb +1 -3
  95. data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
  96. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -3
  97. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
  98. data/lib/chef/resource/openssl_x509_certificate.rb +1 -4
  99. data/lib/chef/resource/openssl_x509_crl.rb +1 -3
  100. data/lib/chef/resource/openssl_x509_request.rb +1 -3
  101. data/lib/chef/resource/osx_profile.rb +3 -3
  102. data/lib/chef/resource/plist.rb +1 -1
  103. data/lib/chef/resource/powershell_package_source.rb +2 -4
  104. data/lib/chef/resource/reboot.rb +38 -9
  105. data/lib/chef/resource/remote_directory.rb +2 -2
  106. data/lib/chef/resource/remote_file.rb +1 -1
  107. data/lib/chef/resource/rhsm_errata.rb +0 -2
  108. data/lib/chef/resource/rhsm_errata_level.rb +1 -5
  109. data/lib/chef/resource/rhsm_repo.rb +15 -0
  110. data/lib/chef/resource/rhsm_subscription.rb +5 -5
  111. data/lib/chef/resource/ruby_block.rb +100 -0
  112. data/lib/chef/resource/scm/subversion.rb +1 -1
  113. data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
  114. data/lib/chef/resource/sudo.rb +2 -6
  115. data/lib/chef/resource/support/HabService.dll.config.erb +19 -0
  116. data/lib/chef/resource/support/client.erb +8 -1
  117. data/lib/chef/resource/support/sup.toml.erb +179 -0
  118. data/lib/chef/resource/swap_file.rb +2 -6
  119. data/lib/chef/resource/sysctl.rb +2 -2
  120. data/lib/chef/resource/systemd_unit.rb +3 -3
  121. data/lib/chef/resource/timezone.rb +1 -1
  122. data/lib/chef/resource/user_ulimit.rb +2 -2
  123. data/lib/chef/resource/windows_ad_join.rb +2 -2
  124. data/lib/chef/resource/windows_audit_policy.rb +2 -2
  125. data/lib/chef/resource/windows_auto_run.rb +2 -2
  126. data/lib/chef/resource/windows_certificate.rb +1 -1
  127. data/lib/chef/resource/windows_defender.rb +163 -0
  128. data/lib/chef/resource/windows_defender_exclusion.rb +125 -0
  129. data/lib/chef/resource/windows_dfs_folder.rb +2 -2
  130. data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
  131. data/lib/chef/resource/windows_dns_record.rb +2 -2
  132. data/lib/chef/resource/windows_dns_zone.rb +2 -2
  133. data/lib/chef/resource/windows_feature.rb +3 -3
  134. data/lib/chef/resource/windows_feature_dism.rb +3 -5
  135. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  136. data/lib/chef/resource/windows_firewall_profile.rb +2 -2
  137. data/lib/chef/resource/windows_firewall_rule.rb +20 -6
  138. data/lib/chef/resource/windows_font.rb +1 -1
  139. data/lib/chef/resource/windows_pagefile.rb +103 -64
  140. data/lib/chef/resource/windows_path.rb +2 -2
  141. data/lib/chef/resource/windows_printer.rb +80 -61
  142. data/lib/chef/resource/windows_printer_port.rb +48 -65
  143. data/lib/chef/resource/windows_security_policy.rb +2 -2
  144. data/lib/chef/resource/windows_share.rb +2 -2
  145. data/lib/chef/resource/windows_shortcut.rb +1 -1
  146. data/lib/chef/resource/windows_task.rb +1 -1
  147. data/lib/chef/resource/windows_uac.rb +3 -5
  148. data/lib/chef/resource/windows_update_settings.rb +259 -0
  149. data/lib/chef/resource/windows_user_privilege.rb +2 -2
  150. data/lib/chef/resource/windows_workgroup.rb +2 -2
  151. data/lib/chef/resource/yum_package.rb +11 -15
  152. data/lib/chef/resource/zypper_package.rb +4 -4
  153. data/lib/chef/resource/zypper_repository.rb +28 -8
  154. data/lib/chef/resource.rb +13 -17
  155. data/lib/chef/resource_inspector.rb +6 -2
  156. data/lib/chef/resource_reporter.rb +0 -1
  157. data/lib/chef/resources.rb +12 -1
  158. data/lib/chef/secret_fetcher/aws_secrets_manager.rb +65 -0
  159. data/lib/chef/secret_fetcher/azure_key_vault.rb +78 -0
  160. data/lib/chef/secret_fetcher/base.rb +76 -0
  161. data/lib/chef/secret_fetcher/example.rb +46 -0
  162. data/lib/chef/secret_fetcher.rb +55 -0
  163. data/lib/chef/version.rb +1 -1
  164. data/spec/functional/mixin/from_file_spec.rb +1 -1
  165. data/spec/functional/resource/windows_hostname_spec.rb +91 -0
  166. data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
  167. data/spec/integration/compliance/compliance_spec.rb +1 -0
  168. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -1
  169. data/spec/integration/recipes/resource_action_spec.rb +6 -6
  170. data/spec/support/shared/unit/provider/file.rb +2 -8
  171. data/spec/unit/compliance/runner_spec.rb +46 -2
  172. data/spec/unit/cookbook_version_spec.rb +52 -0
  173. data/spec/unit/data_collector_spec.rb +47 -1
  174. data/spec/unit/dsl/render_helpers_spec.rb +102 -0
  175. data/spec/unit/dsl/secret_spec.rb +71 -0
  176. data/spec/unit/formatters/doc_spec.rb +1 -1
  177. data/spec/unit/handler_spec.rb +8 -2
  178. data/spec/unit/policy_builder/dynamic_spec.rb +0 -5
  179. data/spec/unit/policy_builder/policyfile_spec.rb +144 -56
  180. data/spec/unit/provider/apt_update_spec.rb +3 -1
  181. data/spec/unit/provider/mount/aix_spec.rb +1 -1
  182. data/spec/unit/provider/package/powershell_spec.rb +74 -12
  183. data/spec/unit/provider/zypper_repository_spec.rb +3 -10
  184. data/spec/unit/provider_spec.rb +23 -0
  185. data/spec/unit/resource/homebrew_cask_spec.rb +29 -11
  186. data/spec/unit/resource/rhsm_subscription_spec.rb +50 -3
  187. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  188. data/spec/unit/resource/windows_defender_exclusion_spec.rb +62 -0
  189. data/spec/unit/resource/windows_defender_spec.rb +71 -0
  190. data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
  191. data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
  192. data/spec/unit/resource/windows_update_settings_spec.rb +64 -0
  193. data/spec/unit/resource/zypper_repository_spec.rb +1 -1
  194. data/spec/unit/resource_spec.rb +19 -8
  195. data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +70 -0
  196. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +70 -0
  197. data/spec/unit/secret_fetcher_spec.rb +82 -0
  198. metadata +55 -7
@@ -157,7 +157,7 @@ class Chef
157
157
  end
158
158
 
159
159
  action :delete do
160
- if ::File.exists?(new_resource.path)
160
+ if ::File.exist?(new_resource.path)
161
161
  converge_by("delete file #{new_resource.path}") do
162
162
  do_backup unless file_class.symlink?(new_resource.path)
163
163
  ::File.delete(new_resource.path)
@@ -393,7 +393,7 @@ class Chef
393
393
  # a nil tempfile is okay, means the resource has no content or no new content
394
394
  return if tempfile.nil?
395
395
  # but a tempfile that has no path or doesn't exist should not happen
396
- if tempfile.path.nil? || !::File.exists?(tempfile.path)
396
+ if tempfile.path.nil? || !::File.exist?(tempfile.path)
397
397
  raise "#{ChefUtils::Dist::Infra::CLIENT} is confused, trying to deploy a file that has no path or does not exist..."
398
398
  end
399
399
 
@@ -158,7 +158,7 @@ class Chef
158
158
  if new_resource.group_name && (current_resource.group_name != new_resource.group_name)
159
159
  dscl_create_group
160
160
  end
161
- if new_resource.gid && (current_resource.gid != new_resource.gid)
161
+ if new_resource.gid && (current_resource.gid != new_resource.gid.to_s)
162
162
  set_gid
163
163
  end
164
164
  if new_resource.members || new_resource.excluded_members
@@ -43,22 +43,22 @@ class Chef
43
43
  types[type]
44
44
  end
45
45
 
46
- action :create do
46
+ action :create, description: "Create a launchd property list." do
47
47
  manage_plist(:create)
48
48
  end
49
49
 
50
- action :create_if_missing do
50
+ action :create_if_missing, description: "Create a launchd property list, if it does not already exist." do
51
51
  manage_plist(:create_if_missing)
52
52
  end
53
53
 
54
- action :delete do
54
+ action :delete, description: "Delete a launchd property list. This will unload a daemon or agent, if loaded." do
55
55
  if ::File.exists?(path)
56
56
  manage_service(:disable)
57
57
  end
58
58
  manage_plist(:delete)
59
59
  end
60
60
 
61
- action :enable do
61
+ action :enable, description: "Create a launchd property list, and then ensure that it is enabled. If a launchd property list already exists, but does not match, updates the property list to match, and then restarts the daemon or agent." do
62
62
  manage_service(:nothing)
63
63
  manage_plist(:create) do
64
64
  notifies :restart, "macosx_service[#{label}]", :immediately
@@ -66,13 +66,13 @@ class Chef
66
66
  manage_service(:enable)
67
67
  end
68
68
 
69
- action :disable do
69
+ action :disable, description: "Disable a launchd property list." do
70
70
  return unless ::File.exist?(path)
71
71
 
72
72
  manage_service(:disable)
73
73
  end
74
74
 
75
- action :restart do
75
+ action :restart, description: "Restart a launchd managed daemon or agent." do
76
76
  manage_service(:restart)
77
77
  end
78
78
 
@@ -45,7 +45,7 @@ class Chef
45
45
  def load_current_resource; end
46
46
 
47
47
  # class methods
48
- class <<self
48
+ class << self
49
49
  include Chef::Mixin::ConvertToClassName
50
50
  include Chef::Mixin::FromFile
51
51
 
@@ -0,0 +1,168 @@
1
+ #
2
+ # Copyright:: Chef Software Inc.
3
+ #
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ require_relative "../../http/simple"
19
+ require_relative "../../json_compat"
20
+ require_relative "../../exceptions"
21
+ require_relative "../package"
22
+ # Bring in needed shared methods
23
+
24
+ class Chef
25
+ class Provider
26
+ class Package
27
+ class Habitat < Chef::Provider::Package
28
+ use_multipackage_api
29
+ use "../../resource/habitat/habitat_shared"
30
+ provides :habitat_package
31
+
32
+ def load_current_resource
33
+ @current_resource = Chef::Resource::HabitatPackage.new(new_resource.name)
34
+ current_resource.package_name(strip_version(new_resource.package_name))
35
+
36
+ @candidate_version = candidate_versions
37
+ current_resource.version(current_versions)
38
+
39
+ current_resource
40
+ end
41
+
42
+ def install_package(names, versions)
43
+ names.zip(versions).map do |n, v|
44
+ opts = ["pkg", "install", "--channel", new_resource.channel, "--url", new_resource.bldr_url]
45
+ opts += ["--auth", new_resource.auth_token] if new_resource.auth_token
46
+ opts += ["#{strip_version(n)}/#{v}", new_resource.options]
47
+ opts += ["--binlink"] if new_resource.binlink
48
+ opts += ["--force"] if new_resource.binlink.eql? :force
49
+ hab(opts)
50
+ end
51
+ end
52
+
53
+ alias_method :upgrade_package, :install_package
54
+
55
+ def remove_package(names, versions)
56
+ # raise 'It is too dangerous to :remove packages with the habitat_package resource right now. This functionality should be deferred to the hab cli.'
57
+ names.zip(versions).map do |n, v|
58
+ opts = %w{pkg uninstall}
59
+ opts += ["--keep-latest", new_resource.keep_latest ] if new_resource.keep_latest
60
+ opts += ["#{strip_version(n).chomp("/")}#{v}", new_resource.options]
61
+ opts += ["--exclude"] if new_resource.exclude
62
+ opts += ["--no-deps"] if new_resource.no_deps
63
+ hab(opts)
64
+ # action :remove
65
+ end
66
+ end
67
+
68
+ alias_method :purge_package, :remove_package
69
+
70
+ private
71
+
72
+ def validate_name!(name)
73
+ raise ArgumentError, "package name must be specified as 'origin/name', use the 'version' property to specify a version" unless name.squeeze("/").count("/") < 2
74
+ end
75
+
76
+ def strip_version(name)
77
+ validate_name!(name)
78
+ n = name.squeeze("/").chomp("/").sub(%r{^\/}, "")
79
+ n = n[0..(n.rindex("/") - 1)] while n.count("/") >= 2
80
+ n
81
+ end
82
+
83
+ def platform_target
84
+ if windows?
85
+ "target=x86_64-windows"
86
+ elsif node["kernel"]["release"].to_i < 3
87
+ "target=x86_64-linux-kernel2"
88
+ else
89
+ ""
90
+ end
91
+ end
92
+
93
+ def depot_package(name, version = nil)
94
+ @depot_package ||= {}
95
+ @depot_package[name] ||=
96
+ begin
97
+ origin, pkg_name = name.split("/")
98
+ name_version = [pkg_name, version].compact.join("/").squeeze("/").chomp("/").sub(%r{^\/}, "")
99
+ url = if new_resource.bldr_url.include?("/v1/")
100
+ "#{new_resource.bldr_url.chomp("/")}/depot/channels/#{origin}/#{new_resource.channel}/pkgs/#{name_version}"
101
+ else
102
+ "#{new_resource.bldr_url.chomp("/")}/v1/depot/channels/#{origin}/#{new_resource.channel}/pkgs/#{name_version}"
103
+ end
104
+ url << "/latest" unless name_version.count("/") >= 2
105
+ url << "?#{platform_target}" unless platform_target.empty?
106
+
107
+ headers = {}
108
+ headers["Authorization"] = "Bearer #{new_resource.auth_token}" if new_resource.auth_token
109
+
110
+ Chef::JSONCompat.parse(http.get(url, headers))
111
+ rescue Net::HTTPServerException
112
+ nil
113
+ end
114
+ end
115
+
116
+ def package_version(name, version = nil)
117
+ p = depot_package(name, version)
118
+ "#{p["ident"]["version"]}/#{p["ident"]["release"]}" unless p.nil?
119
+ end
120
+
121
+ def http
122
+ # FIXME: use SimpleJSON when the depot mime-type is fixed
123
+ @http ||= Chef::HTTP::Simple.new(new_resource.bldr_url.to_s)
124
+ end
125
+
126
+ def candidate_versions
127
+ package_name_array.zip(new_version_array).map do |n, v|
128
+ package_version(n, v)
129
+ end
130
+ end
131
+
132
+ def current_versions
133
+ package_name_array.map do |n|
134
+ installed_version(n)
135
+ end
136
+ end
137
+
138
+ def installed_version(ident)
139
+ hab("pkg", "path", ident).stdout.chomp.split(windows? ? "\\" : "/")[-2..-1].join("/")
140
+ rescue Mixlib::ShellOut::ShellCommandFailed
141
+ nil
142
+ end
143
+
144
+ # This is used by the superclass Chef::Provider::Package
145
+ def version_requirement_satisfied?(current_version, new_version)
146
+ return false if new_version.nil? || current_version.nil?
147
+
148
+ nv_parts = new_version.squeeze("/").split("/")
149
+
150
+ if nv_parts.count < 2
151
+ current_version.squeeze("/").split("/")[0] == new_version.squeeze("/")
152
+ else
153
+ current_version.squeeze("/") == new_resource.version.squeeze("/")
154
+ end
155
+ end
156
+
157
+ # This is used by the superclass Chef::Provider::Package
158
+ def version_compare(v1, v2)
159
+ require "mixlib/versioning" unless defined?(Mixlib::Versioning)
160
+ # Convert the package version (X.Y.Z/DATE) into a version that Mixlib::Versioning understands (X.Y.Z+DATE)
161
+ hab_v1 = Mixlib::Versioning.parse(v1.tr("/", "+"))
162
+ hab_v2 = Mixlib::Versioning.parse(v2.tr("/", "+"))
163
+ hab_v1 <=> hab_v2
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
@@ -124,6 +124,11 @@ class Chef
124
124
  command.push("-RequiredVersion #{version}") if version
125
125
  command.push("-Source #{new_resource.source}") if new_resource.source && cmdlet_name =~ Regexp.union(/Install-Package/, /Find-Package/)
126
126
  command.push("-SkipPublisherCheck") if new_resource.skip_publisher_check && cmdlet_name !~ /Find-Package/
127
+ if new_resource.options && cmdlet_name !~ Regexp.union(/Get-Package/, /Find-Package/)
128
+ new_resource.options.each do |arg|
129
+ command.push(arg) unless command.include?(arg)
130
+ end
131
+ end
127
132
  command.push(").Version")
128
133
  command.join(" ")
129
134
  end
@@ -55,7 +55,7 @@ class Chef
55
55
  end
56
56
  end
57
57
 
58
- action :checkout do
58
+ action :checkout, description: "Clone or check out the source. When a checkout is available, this provider does nothing." do
59
59
  if target_dir_non_existent_or_empty?
60
60
  converge_by("perform checkout of #{new_resource.repository} into #{new_resource.destination}") do
61
61
  shell_out!(checkout_command, run_options)
@@ -65,7 +65,7 @@ class Chef
65
65
  end
66
66
  end
67
67
 
68
- action :export do
68
+ action :export, description: "Export the source, excluding or removing any version control artifacts." do
69
69
  if target_dir_non_existent_or_empty?
70
70
  action_force_export
71
71
  else
@@ -73,13 +73,13 @@ class Chef
73
73
  end
74
74
  end
75
75
 
76
- action :force_export do
76
+ action :force_export, description: "Export the source, excluding or removing any version control artifacts and force an export of the source that is overwriting the existing copy (if it exists)." do
77
77
  converge_by("export #{new_resource.repository} into #{new_resource.destination}") do
78
78
  shell_out!(export_command, run_options)
79
79
  end
80
80
  end
81
81
 
82
- action :sync do
82
+ action :sync, description: "Update the source to the specified version, or get a new clone or checkout. This action causes a hard reset of the index and working tree, discarding any uncommitted changes." do
83
83
  assert_target_directory_valid!
84
84
  if ::File.exist?(::File.join(new_resource.destination, ".svn"))
85
85
  current_rev = find_current_revision
@@ -1,4 +1,4 @@
1
- # This file was generated by Chef
1
+ # This file was generated by Chef Infra
2
2
  # Do NOT modify this file by hand.
3
3
 
4
4
  [<%= @config.repositoryid %>]
@@ -1,15 +1,17 @@
1
- # This file was generated by Chef
1
+ # This file was generated by Chef Infra
2
2
  # Do NOT modify this file by hand.
3
3
 
4
4
  [<%= @config.repo_name %>]
5
5
  <% %w{ type enabled autorefresh gpgcheck gpgkey baseurl mirrorlist path priority keeppackages mode refresh_cache }.each do |prop| -%>
6
- <% next if @config.send(prop.to_sym).nil? -%>
6
+ <% next if @config.send(prop.to_sym).nil? || (@config.send(prop.to_sym).is_a?(Array) && @config.send(prop.to_sym).empty?) -%>
7
7
  <%= prop %>=<%=
8
8
  case @config.send(prop.to_sym)
9
9
  when TrueClass
10
10
  '1'
11
11
  when FalseClass
12
12
  '0'
13
+ when Array
14
+ @config.send(prop.to_sym).join("\n ")
13
15
  else
14
16
  @config.send(prop.to_sym)
15
17
  end %>
@@ -22,6 +22,7 @@ require_relative "../resource/file"
22
22
  require_relative "../resource/file/verification/systemd_unit"
23
23
  require "iniparse"
24
24
  require "shellwords" unless defined?(Shellwords)
25
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
25
26
 
26
27
  class Chef
27
28
  class Provider
@@ -75,7 +76,7 @@ class Chef
75
76
  end
76
77
  end
77
78
 
78
- action :create do
79
+ action :create, description: "Create a systemd unit file, if it does not already exist." do
79
80
  if current_resource.content != new_resource.to_ini
80
81
  converge_by("creating unit: #{new_resource.unit_name}") do
81
82
  manage_unit_file(:create)
@@ -84,7 +85,7 @@ class Chef
84
85
  end
85
86
  end
86
87
 
87
- action :delete do
88
+ action :delete, description: "Delete a systemd unit file, if it exists." do
88
89
  if ::File.exist?(unit_path)
89
90
  converge_by("deleting unit: #{new_resource.unit_name}") do
90
91
  manage_unit_file(:delete)
@@ -93,19 +94,19 @@ class Chef
93
94
  end
94
95
  end
95
96
 
96
- action :preset do
97
+ action :preset, description: "Restore the preset '`enable`/`disable`' configuration for a systemd unit. *New in #{ChefUtils::Dist::Infra::PRODUCT} 14.0.*" do
97
98
  converge_by("restoring enable/disable preset configuration for unit: #{new_resource.unit_name}") do
98
99
  systemctl_execute!(:preset, new_resource.unit_name)
99
100
  end
100
101
  end
101
102
 
102
- action :revert do
103
+ action :revert, description: "Revert to a vendor's version of a systemd unit file. *New in #{ChefUtils::Dist::Infra::PRODUCT} 14.0.*" do
103
104
  converge_by("reverting to vendor version of unit: #{new_resource.unit_name}") do
104
105
  systemctl_execute!(:revert, new_resource.unit_name)
105
106
  end
106
107
  end
107
108
 
108
- action :enable do
109
+ action :enable, description: "Ensure the unit will be started after the next system boot." do
109
110
  if current_resource.static
110
111
  logger.debug("#{new_resource.unit_name} is a static unit, enabling is a NOP.")
111
112
  end
@@ -121,7 +122,7 @@ class Chef
121
122
  end
122
123
  end
123
124
 
124
- action :disable do
125
+ action :disable, description: "Ensure the unit will not be started after the next system boot." do
125
126
  if current_resource.static
126
127
  logger.debug("#{new_resource.unit_name} is a static unit, disabling is a NOP.")
127
128
  end
@@ -138,14 +139,14 @@ class Chef
138
139
  end
139
140
  end
140
141
 
141
- action :reenable do
142
+ action :reenable, description: "Reenable a unit file. *New in #{ChefUtils::Dist::Infra::PRODUCT} 14.0.*" do
142
143
  converge_by("reenabling unit: #{new_resource.unit_name}") do
143
144
  systemctl_execute!(:reenable, new_resource.unit_name)
144
145
  logger.info("#{new_resource} reenabled")
145
146
  end
146
147
  end
147
148
 
148
- action :mask do
149
+ action :mask, description: "Ensure the unit will not start, even to satisfy dependencies." do
149
150
  unless current_resource.masked
150
151
  converge_by("masking unit: #{new_resource.unit_name}") do
151
152
  systemctl_execute!(:mask, new_resource.unit_name)
@@ -154,7 +155,7 @@ class Chef
154
155
  end
155
156
  end
156
157
 
157
- action :unmask do
158
+ action :unmask, description: "Stop the unit from being masked and cause it to start as specified." do
158
159
  if current_resource.masked
159
160
  converge_by("unmasking unit: #{new_resource.unit_name}") do
160
161
  systemctl_execute!(:unmask, new_resource.unit_name)
@@ -163,7 +164,7 @@ class Chef
163
164
  end
164
165
  end
165
166
 
166
- action :start do
167
+ action :start, description: "Start a systemd unit." do
167
168
  unless current_resource.active
168
169
  converge_by("starting unit: #{new_resource.unit_name}") do
169
170
  systemctl_execute!(:start, new_resource.unit_name, default_env: false)
@@ -172,7 +173,7 @@ class Chef
172
173
  end
173
174
  end
174
175
 
175
- action :stop do
176
+ action :stop, description: "Stop a running systemd unit." do
176
177
  if current_resource.active
177
178
  converge_by("stopping unit: #{new_resource.unit_name}") do
178
179
  systemctl_execute!(:stop, new_resource.unit_name, default_env: false)
@@ -181,14 +182,14 @@ class Chef
181
182
  end
182
183
  end
183
184
 
184
- action :restart do
185
+ action :restart, description: "Restart a systemd unit." do
185
186
  converge_by("restarting unit: #{new_resource.unit_name}") do
186
187
  systemctl_execute!(:restart, new_resource.unit_name, default_env: false)
187
188
  logger.info("#{new_resource} restarted")
188
189
  end
189
190
  end
190
191
 
191
- action :reload do
192
+ action :reload, description: "Reload the configuration file for a systemd unit." do
192
193
  if current_resource.active
193
194
  converge_by("reloading unit: #{new_resource.unit_name}") do
194
195
  systemctl_execute!(:reload, new_resource.unit_name, default_env: false)
@@ -199,21 +200,21 @@ class Chef
199
200
  end
200
201
  end
201
202
 
202
- action :try_restart do
203
+ action :try_restart, description: "Try to restart a systemd unit if the unit is running." do
203
204
  converge_by("try-restarting unit: #{new_resource.unit_name}") do
204
205
  systemctl_execute!("try-restart", new_resource.unit_name, default_env: false)
205
206
  logger.info("#{new_resource} try-restarted")
206
207
  end
207
208
  end
208
209
 
209
- action :reload_or_restart do
210
+ action :reload_or_restart, description: "For systemd units that are services, this action reloads the configuration of the service without restarting, if possible; otherwise, it will restart the service so the new configuration is applied." do
210
211
  converge_by("reload-or-restarting unit: #{new_resource.unit_name}") do
211
212
  systemctl_execute!("reload-or-restart", new_resource.unit_name, default_env: false)
212
213
  logger.info("#{new_resource} reload-or-restarted")
213
214
  end
214
215
  end
215
216
 
216
- action :reload_or_try_restart do
217
+ action :reload_or_try_restart, description: "For systemd units that are services, this action reloads the configuration of the service without restarting, if possible; otherwise, it will try to restart the service so the new configuration is applied." do
217
218
  converge_by("reload-or-try-restarting unit: #{new_resource.unit_name}") do
218
219
  systemctl_execute!("reload-or-try-restart", new_resource.unit_name, default_env: false)
219
220
  logger.info("#{new_resource} reload-or-try-restarted")