chef 17.7.29-universal-mingw32 → 17.9.42-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (322) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/README.md +1 -1
  4. data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.Wrapper.dll +0 -0
  5. data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.dll +0 -0
  6. data/distro/ruby_bin_folder/AMD64/Ijwhost.dll +0 -0
  7. data/distro/ruby_bin_folder/AMD64/concrt140.dll +0 -0
  8. data/distro/ruby_bin_folder/AMD64/host/fxr/5.0.0/hostfxr.dll +0 -0
  9. data/distro/ruby_bin_folder/AMD64/msvcp140.dll +0 -0
  10. data/distro/ruby_bin_folder/AMD64/msvcp140_1.dll +0 -0
  11. data/distro/ruby_bin_folder/AMD64/msvcp140_2.dll +0 -0
  12. data/distro/ruby_bin_folder/AMD64/msvcp140_atomic_wait.dll +0 -0
  13. data/distro/ruby_bin_folder/AMD64/msvcp140_codecvt_ids.dll +0 -0
  14. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
  15. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
  16. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
  17. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Ijwhost.dll +0 -0
  18. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.CSharp.dll +0 -0
  19. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +180 -180
  20. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.VisualBasic.Core.dll +0 -0
  21. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.VisualBasic.dll +0 -0
  22. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.Win32.Primitives.dll +0 -0
  23. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.Win32.Registry.dll +0 -0
  24. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.AppContext.dll +0 -0
  25. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Buffers.dll +0 -0
  26. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.Concurrent.dll +0 -0
  27. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.Immutable.dll +0 -0
  28. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.NonGeneric.dll +0 -0
  29. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.Specialized.dll +0 -0
  30. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.dll +0 -0
  31. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.Annotations.dll +0 -0
  32. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.DataAnnotations.dll +0 -0
  33. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.EventBasedAsync.dll +0 -0
  34. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.Primitives.dll +0 -0
  35. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.TypeConverter.dll +0 -0
  36. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.dll +0 -0
  37. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Configuration.dll +0 -0
  38. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Console.dll +0 -0
  39. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Core.dll +0 -0
  40. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Data.Common.dll +0 -0
  41. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Data.DataSetExtensions.dll +0 -0
  42. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Data.dll +0 -0
  43. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Contracts.dll +0 -0
  44. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Debug.dll +0 -0
  45. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.DiagnosticSource.dll +0 -0
  46. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.FileVersionInfo.dll +0 -0
  47. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Process.dll +0 -0
  48. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.StackTrace.dll +0 -0
  49. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.TextWriterTraceListener.dll +0 -0
  50. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Tools.dll +0 -0
  51. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.TraceSource.dll +0 -0
  52. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Tracing.dll +0 -0
  53. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Primitives.dll +0 -0
  54. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.dll +0 -0
  55. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Dynamic.Runtime.dll +0 -0
  56. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Formats.Asn1.dll +0 -0
  57. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Globalization.Calendars.dll +0 -0
  58. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Globalization.Extensions.dll +0 -0
  59. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Globalization.dll +0 -0
  60. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.Brotli.dll +0 -0
  61. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.FileSystem.dll +0 -0
  62. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.ZipFile.dll +0 -0
  63. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.dll +0 -0
  64. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.AccessControl.dll +0 -0
  65. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.DriveInfo.dll +0 -0
  66. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.Primitives.dll +0 -0
  67. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.Watcher.dll +0 -0
  68. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.dll +0 -0
  69. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.IsolatedStorage.dll +0 -0
  70. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.MemoryMappedFiles.dll +0 -0
  71. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Pipes.AccessControl.dll +0 -0
  72. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Pipes.dll +0 -0
  73. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.UnmanagedMemoryStream.dll +0 -0
  74. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.dll +0 -0
  75. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.Expressions.dll +0 -0
  76. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.Parallel.dll +0 -0
  77. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.Queryable.dll +0 -0
  78. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.dll +0 -0
  79. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Memory.dll +0 -0
  80. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Http.Json.dll +0 -0
  81. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Http.dll +0 -0
  82. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.HttpListener.dll +0 -0
  83. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Mail.dll +0 -0
  84. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.NameResolution.dll +0 -0
  85. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.NetworkInformation.dll +0 -0
  86. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Ping.dll +0 -0
  87. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Primitives.dll +0 -0
  88. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Requests.dll +0 -0
  89. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Security.dll +0 -0
  90. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.ServicePoint.dll +0 -0
  91. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Sockets.dll +0 -0
  92. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebClient.dll +0 -0
  93. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebHeaderCollection.dll +0 -0
  94. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebProxy.dll +0 -0
  95. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebSockets.Client.dll +0 -0
  96. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebSockets.dll +0 -0
  97. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.dll +0 -0
  98. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Numerics.Vectors.dll +0 -0
  99. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Numerics.dll +0 -0
  100. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ObjectModel.dll +0 -0
  101. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.CoreLib.dll +0 -0
  102. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.DataContractSerialization.dll +0 -0
  103. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.Uri.dll +0 -0
  104. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.Xml.Linq.dll +0 -0
  105. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.Xml.dll +0 -0
  106. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.DispatchProxy.dll +0 -0
  107. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Emit.ILGeneration.dll +0 -0
  108. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Emit.Lightweight.dll +0 -0
  109. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Emit.dll +0 -0
  110. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Extensions.dll +0 -0
  111. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Metadata.dll +0 -0
  112. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Primitives.dll +0 -0
  113. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.TypeExtensions.dll +0 -0
  114. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.dll +0 -0
  115. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Resources.Reader.dll +0 -0
  116. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Resources.ResourceManager.dll +0 -0
  117. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Resources.Writer.dll +0 -0
  118. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.CompilerServices.Unsafe.dll +0 -0
  119. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.CompilerServices.VisualC.dll +0 -0
  120. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Extensions.dll +0 -0
  121. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Handles.dll +0 -0
  122. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.InteropServices.RuntimeInformation.dll +0 -0
  123. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.InteropServices.dll +0 -0
  124. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Intrinsics.dll +0 -0
  125. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Loader.dll +0 -0
  126. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Numerics.dll +0 -0
  127. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Formatters.dll +0 -0
  128. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Json.dll +0 -0
  129. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Primitives.dll +0 -0
  130. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Xml.dll +0 -0
  131. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.dll +0 -0
  132. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.dll +0 -0
  133. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.AccessControl.dll +0 -0
  134. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Claims.dll +0 -0
  135. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Algorithms.dll +0 -0
  136. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Cng.dll +0 -0
  137. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Csp.dll +0 -0
  138. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Encoding.dll +0 -0
  139. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.OpenSsl.dll +0 -0
  140. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Primitives.dll +0 -0
  141. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.X509Certificates.dll +0 -0
  142. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Principal.Windows.dll +0 -0
  143. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Principal.dll +0 -0
  144. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.SecureString.dll +0 -0
  145. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.dll +0 -0
  146. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ServiceModel.Web.dll +0 -0
  147. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ServiceProcess.dll +0 -0
  148. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encoding.CodePages.dll +0 -0
  149. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encoding.Extensions.dll +0 -0
  150. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encoding.dll +0 -0
  151. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encodings.Web.dll +0 -0
  152. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Json.dll +0 -0
  153. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.RegularExpressions.dll +0 -0
  154. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Channels.dll +0 -0
  155. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Overlapped.dll +0 -0
  156. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.Dataflow.dll +0 -0
  157. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.Extensions.dll +0 -0
  158. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.Parallel.dll +0 -0
  159. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.dll +0 -0
  160. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Thread.dll +0 -0
  161. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.ThreadPool.dll +0 -0
  162. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Timer.dll +0 -0
  163. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.dll +0 -0
  164. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Transactions.Local.dll +0 -0
  165. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Transactions.dll +0 -0
  166. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ValueTuple.dll +0 -0
  167. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Web.HttpUtility.dll +0 -0
  168. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Web.dll +0 -0
  169. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Windows.dll +0 -0
  170. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.Linq.dll +0 -0
  171. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.ReaderWriter.dll +0 -0
  172. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.Serialization.dll +0 -0
  173. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XDocument.dll +0 -0
  174. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XPath.XDocument.dll +0 -0
  175. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XPath.dll +0 -0
  176. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XmlDocument.dll +0 -0
  177. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XmlSerializer.dll +0 -0
  178. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.dll +0 -0
  179. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.dll +0 -0
  180. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/WindowsBase.dll +0 -0
  181. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/clrcompression.dll +0 -0
  182. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/clretwrc.dll +0 -0
  183. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/clrjit.dll +0 -0
  184. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/coreclr.dll +0 -0
  185. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/createdump.exe +0 -0
  186. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/dbgshim.dll +0 -0
  187. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/hostfxr.dll +0 -0
  188. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/hostpolicy.dll +0 -0
  189. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordaccore.dll +0 -0
  190. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordaccore_amd64_amd64_5.0.521.16609.dll +0 -0
  191. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordbi.dll +0 -0
  192. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscorlib.dll +0 -0
  193. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscorrc.dll +0 -0
  194. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/netstandard.dll +0 -0
  195. data/distro/ruby_bin_folder/AMD64/vccorlib140.dll +0 -0
  196. data/distro/ruby_bin_folder/AMD64/vcruntime140.dll +0 -0
  197. data/distro/ruby_bin_folder/AMD64/vcruntime140_1.dll +0 -0
  198. data/distro/ruby_bin_folder/x86/Chef.PowerShell.dll +0 -0
  199. data/distro/ruby_bin_folder/x86/Chef.Powershell.Wrapper.dll +0 -0
  200. data/distro/ruby_bin_folder/x86/concrt140.dll +0 -0
  201. data/distro/ruby_bin_folder/x86/msvcp140.dll +0 -0
  202. data/distro/ruby_bin_folder/x86/msvcp140_1.dll +0 -0
  203. data/distro/ruby_bin_folder/x86/msvcp140_2.dll +0 -0
  204. data/distro/ruby_bin_folder/x86/msvcp140_atomic_wait.dll +0 -0
  205. data/distro/ruby_bin_folder/x86/msvcp140_codecvt_ids.dll +0 -0
  206. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
  207. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
  208. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
  209. data/distro/ruby_bin_folder/x86/vccorlib140.dll +0 -0
  210. data/distro/ruby_bin_folder/x86/vcruntime140.dll +0 -0
  211. data/lib/chef/application/base.rb +1 -1
  212. data/lib/chef/application/exit_code.rb +7 -21
  213. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  214. data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -1
  215. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  216. data/lib/chef/compliance/default_attributes.rb +12 -2
  217. data/lib/chef/compliance/input_collection.rb +1 -1
  218. data/lib/chef/compliance/runner.rb +51 -5
  219. data/lib/chef/compliance/waiver_collection.rb +1 -1
  220. data/lib/chef/cookbook/syntax_check.rb +1 -1
  221. data/lib/chef/cookbook_uploader.rb +1 -1
  222. data/lib/chef/cookbook_version.rb +1 -1
  223. data/lib/chef/mixin/powershell_exec.rb +6 -5
  224. data/lib/chef/mixin/why_run.rb +8 -2
  225. data/lib/chef/powershell.rb +8 -6
  226. data/lib/chef/provider/cron.rb +2 -2
  227. data/lib/chef/provider/directory.rb +2 -2
  228. data/lib/chef/provider/ifconfig.rb +5 -5
  229. data/lib/chef/provider/mount/linux.rb +16 -2
  230. data/lib/chef/provider/mount/mount.rb +1 -1
  231. data/lib/chef/provider/package/dnf.rb +1 -1
  232. data/lib/chef/provider/package/powershell.rb +13 -10
  233. data/lib/chef/provider/package/yum/python_helper.rb +81 -25
  234. data/lib/chef/provider/package/yum.rb +39 -12
  235. data/lib/chef/provider/package/zypper.rb +2 -0
  236. data/lib/chef/provider/package.rb +63 -28
  237. data/lib/chef/provider/user/mac.rb +3 -3
  238. data/lib/chef/provider.rb +5 -2
  239. data/lib/chef/providers.rb +0 -1
  240. data/lib/chef/pwsh.rb +3 -2
  241. data/lib/chef/resource/apt_package.rb +2 -2
  242. data/lib/chef/resource/chef_client_config.rb +21 -1
  243. data/lib/chef/resource/chef_client_launchd.rb +1 -1
  244. data/lib/chef/resource/chocolatey_package.rb +3 -3
  245. data/lib/chef/resource/cron/cron.rb +75 -1
  246. data/lib/chef/resource/cron/cron_d.rb +2 -1
  247. data/lib/chef/resource/dnf_package.rb +4 -6
  248. data/lib/chef/resource/dpkg_package.rb +5 -0
  249. data/lib/chef/resource/execute.rb +1 -4
  250. data/lib/chef/resource/habitat/habitat_sup.rb +1 -1
  251. data/lib/chef/resource/habitat/habitat_sup_windows.rb +1 -1
  252. data/lib/chef/resource/homebrew_tap.rb +1 -5
  253. data/lib/chef/resource/inspec_waiver_file_entry.rb +1 -1
  254. data/lib/chef/resource/launchd.rb +2 -5
  255. data/lib/chef/resource/lwrp_base.rb +1 -1
  256. data/lib/chef/resource/macos_userdefaults.rb +5 -7
  257. data/lib/chef/resource/powershell_package_source.rb +8 -8
  258. data/lib/chef/resource/remote_file.rb +1 -1
  259. data/lib/chef/resource/rhsm_register.rb +31 -0
  260. data/lib/chef/resource/support/client.erb +7 -0
  261. data/lib/chef/resource/windows_feature_powershell.rb +8 -9
  262. data/lib/chef/resource/windows_task.rb +25 -10
  263. data/lib/chef/resource.rb +3 -3
  264. data/lib/chef/resource_reporter.rb +1 -1
  265. data/lib/chef/run_lock.rb +1 -1
  266. data/lib/chef/secret_fetcher/azure_key_vault.rb +4 -2
  267. data/lib/chef/secret_fetcher/hashi_vault.rb +37 -3
  268. data/lib/chef/util/dsc/configuration_generator.rb +1 -1
  269. data/lib/chef/version.rb +1 -1
  270. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  271. data/spec/functional/resource/dnf_package_spec.rb +138 -124
  272. data/spec/functional/resource/dpkg_package_spec.rb +16 -0
  273. data/spec/functional/resource/dsc_script_spec.rb +2 -2
  274. data/spec/functional/resource/macos_userdefaults_spec.rb +20 -0
  275. data/spec/functional/resource/template_spec.rb +1 -1
  276. data/spec/functional/resource/yum_package_spec.rb +789 -129
  277. data/spec/functional/resource/zypper_package_spec.rb +7 -0
  278. data/spec/integration/client/client_spec.rb +32 -1
  279. data/spec/spec_helper.rb +3 -3
  280. data/spec/support/platform_helpers.rb +1 -1
  281. data/spec/support/ruby_installer.rb +1 -1
  282. data/spec/support/shared/functional/file_resource.rb +2 -2
  283. data/spec/support/shared/functional/http.rb +9 -9
  284. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +1 -1
  285. data/spec/unit/application/base_spec.rb +40 -0
  286. data/spec/unit/compliance/runner_spec.rb +62 -1
  287. data/spec/unit/dsl/registry_helper_spec.rb +6 -6
  288. data/spec/unit/file_access_control_spec.rb +1 -1
  289. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +1 -1
  290. data/spec/unit/lwrp_spec.rb +2 -2
  291. data/spec/unit/mixin/why_run_spec.rb +53 -0
  292. data/spec/unit/provider/dsc_script_spec.rb +8 -8
  293. data/spec/unit/provider/group/groupadd_spec.rb +1 -0
  294. data/spec/unit/provider/group/usermod_spec.rb +4 -4
  295. data/spec/unit/provider/ifconfig/aix_spec.rb +14 -14
  296. data/spec/unit/provider/ifconfig/debian_spec.rb +1 -1
  297. data/spec/unit/provider/ifconfig/redhat_spec.rb +1 -1
  298. data/spec/unit/provider/ifconfig_spec.rb +5 -3
  299. data/spec/unit/provider/mount/linux_spec.rb +16 -3
  300. data/spec/unit/provider/package/bff_spec.rb +1 -0
  301. data/spec/unit/provider/package/powershell_spec.rb +114 -114
  302. data/spec/unit/provider/package/rubygems_spec.rb +3 -0
  303. data/spec/unit/provider/package/solaris_spec.rb +1 -0
  304. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +3 -3
  305. data/spec/unit/provider/service/arch_service_spec.rb +2 -2
  306. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  307. data/spec/unit/provider/service/gentoo_service_spec.rb +3 -2
  308. data/spec/unit/provider/service/macosx_spec.rb +1 -0
  309. data/spec/unit/provider/service/redhat_spec.rb +4 -1
  310. data/spec/unit/provider/service/simple_service_spec.rb +6 -4
  311. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  312. data/spec/unit/provider/user/solaris_spec.rb +1 -1
  313. data/spec/unit/provider/user_spec.rb +2 -0
  314. data/spec/unit/resource/conditional_spec.rb +4 -4
  315. data/spec/unit/resource/dpkg_package_spec.rb +12 -0
  316. data/spec/unit/resource/rhsm_register_spec.rb +42 -0
  317. data/spec/unit/resource_spec.rb +2 -2
  318. data/spec/unit/secret_fetcher/hashi_vault_spec.rb +46 -0
  319. metadata +10 -10
  320. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordaccore_amd64_amd64_5.0.20.51904.dll +0 -0
  321. data/lib/chef/provider/group/suse.rb +0 -82
  322. data/spec/unit/provider/group/suse_spec.rb +0 -90
@@ -123,7 +123,7 @@ class Chef
123
123
  if is_ruby_file?
124
124
  data_handler.from_ruby(file_path).to_json
125
125
  else
126
- File.open(file_path, "rb", &:read)
126
+ File.binread(file_path)
127
127
  end
128
128
  rescue Errno::ENOENT
129
129
  raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
@@ -126,7 +126,7 @@ class Chef
126
126
  end
127
127
 
128
128
  def read
129
- File.open(file_path, "rb", &:read)
129
+ File.binread(file_path)
130
130
  rescue Errno::ENOENT
131
131
  raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
132
132
  end
@@ -28,7 +28,7 @@ class Chef
28
28
  # Controls what is done with the resulting report after the Chef InSpec run.
29
29
  # Accepts a single string value or an array of multiple values.
30
30
  # Accepted values: 'chef-server-automate', 'chef-automate', 'json-file', 'audit-enforcer', 'cli'
31
- "reporter" => "cli",
31
+ "reporter" => nil,
32
32
 
33
33
  # Controls if Chef InSpec profiles should be fetched from Chef Automate or Chef Infra Server
34
34
  # in addition to the default fetch locations provided by Chef Inspec.
@@ -94,7 +94,17 @@ class Chef
94
94
 
95
95
  # Should the built-in compliance phase run. True and false force the behavior. Nil does magic based on if you have
96
96
  # profiles defined but do not have the audit cookbook enabled.
97
- "compliance_phase" => false
97
+ "compliance_phase" => false,
98
+
99
+ "interval" => {
100
+ # control how often inspec scans are run, if not on every node converge
101
+ # notes: false value will result in running inspec scan every converge
102
+ "enabled" => false,
103
+
104
+ # controls how often inspec scans are run (in minutes)
105
+ # notes: only used if interval is enabled above
106
+ "time" => 1440,
107
+ }
98
108
  )
99
109
  end
100
110
  end
@@ -57,7 +57,7 @@ class Chef
57
57
  # @return [Array<Input>] inspec inputs which are enabled in a form suitable to pass to inspec
58
58
  #
59
59
  def inspec_data
60
- select(&:enabled?).each_with_object({}) { |input, hash| hash.merge(input.inspec_data) }
60
+ select(&:enabled?).each_with_object({}) { |input, hash| hash.merge!(input.inspec_data) }
61
61
  end
62
62
 
63
63
  # DSL method to enable input files. This matches on the filename of the input file.
@@ -71,7 +71,7 @@ class Chef
71
71
 
72
72
  logger.debug("#{self.class}##{__method__}: enabling Compliance Phase")
73
73
 
74
- report
74
+ report_with_interval
75
75
  end
76
76
 
77
77
  def run_failed(_exception, _run_status)
@@ -82,7 +82,7 @@ class Chef
82
82
 
83
83
  logger.debug("#{self.class}##{__method__}: enabling Compliance Phase")
84
84
 
85
- report
85
+ report_with_interval
86
86
  end
87
87
 
88
88
  ### Below code adapted from audit cookbook's files/default/handler/audit_report.rb
@@ -92,7 +92,6 @@ class Chef
92
92
  fail_if_not_present
93
93
  inspec_gem_source
94
94
  inspec_version
95
- interval
96
95
  owner
97
96
  raise_if_unreachable
98
97
  }.freeze
@@ -106,6 +105,15 @@ class Chef
106
105
  end
107
106
  end
108
107
 
108
+ def report_with_interval
109
+ if interval_seconds_left <= 0
110
+ create_timestamp_file if interval_enabled
111
+ report
112
+ else
113
+ logger.info "Skipping Chef Infra Compliance Phase due to interval settings (next run in #{interval_seconds_left / 60.0} mins)"
114
+ end
115
+ end
116
+
109
117
  def report(report = nil)
110
118
  logger.info "Starting Chef Infra Compliance Phase"
111
119
  report ||= generate_report
@@ -118,7 +126,7 @@ class Chef
118
126
  return
119
127
  end
120
128
 
121
- Array(node["audit"]["reporter"]).each do |reporter_type|
129
+ requested_reporters.each do |reporter_type|
122
130
  logger.info "Reporting to #{reporter_type}"
123
131
  @reporters[reporter_type].send_report(report)
124
132
  end
@@ -325,7 +333,7 @@ class Chef
325
333
  @reporters = {}
326
334
  # Note that the docs don't say you can use an array, but our implementation
327
335
  # supports it.
328
- Array(node["audit"]["reporter"]).each do |type|
336
+ requested_reporters.each do |type|
329
337
  unless SUPPORTED_REPORTERS.include? type
330
338
  raise "CMPL003: '#{type}' found in node['audit']['reporter'] is not a supported reporter for Compliance Phase. Supported reporters are: #{SUPPORTED_REPORTERS.join(", ")}. For more information, see the documentation at https://docs.chef.io/chef_compliance_phase#reporters"
331
339
  end
@@ -358,6 +366,44 @@ class Chef
358
366
  def safe_input_collection
359
367
  run_context&.input_collection
360
368
  end
369
+
370
+ def requested_reporters
371
+ (Array(node["audit"]["reporter"]) + ["cli"]).uniq
372
+ end
373
+
374
+ def create_timestamp_file
375
+ FileUtils.touch report_timing_file
376
+ end
377
+
378
+ def report_timing_file
379
+ ::File.join(Chef::FileCache.create_cache_path("compliance"), "report_timing.json")
380
+ end
381
+
382
+ def interval_time
383
+ @interval_time ||= node.read("audit", "interval", "time")
384
+ end
385
+
386
+ def interval_enabled
387
+ @interval_enabled ||= node.read("audit", "interval", "enabled")
388
+ end
389
+
390
+ def interval_seconds
391
+ @interval_seconds ||=
392
+ if interval_enabled
393
+ logger.debug "Running Chef Infra Compliance Phase every #{interval_time} minutes"
394
+ interval_time * 60
395
+ else
396
+ logger.debug "Running Chef Infra Compliance Phase on every run"
397
+ 0
398
+ end
399
+ end
400
+
401
+ def interval_seconds_left
402
+ return 0 unless ::File.exist?(report_timing_file)
403
+
404
+ seconds_since_last_run = Time.now - ::File.mtime(report_timing_file)
405
+ interval_seconds - seconds_since_last_run
406
+ end
361
407
  end
362
408
  end
363
409
  end
@@ -57,7 +57,7 @@ class Chef
57
57
  # @return [Array<Waiver>] inspec waivers which are enabled in a form suitable to pass to inspec
58
58
  #
59
59
  def inspec_data
60
- select(&:enabled?).each_with_object({}) { |waiver, hash| hash.merge(waiver.inspec_data) }
60
+ select(&:enabled?).each_with_object({}) { |waiver, hash| hash.merge!(waiver.inspec_data) }
61
61
  end
62
62
 
63
63
  # DSL method to enable waiver files. This matches on the filename of the waiver file.
@@ -113,7 +113,7 @@ class Chef
113
113
  end
114
114
 
115
115
  def remove_uninteresting_ruby_files(file_list)
116
- file_list.reject { |f| f =~ %r{#{Regexp.quote(cookbook_path)}/(files|templates)/} }
116
+ file_list.grep_v(%r{#{Regexp.quote(cookbook_path)}/(files|templates)/})
117
117
  end
118
118
 
119
119
  def ruby_files
@@ -119,7 +119,7 @@ class Chef
119
119
  # but we need the base64 encoding for the content-md5
120
120
  # header
121
121
  checksum64 = Base64.encode64([checksum].pack("H*")).strip
122
- file_contents = File.open(file, "rb", &:read)
122
+ file_contents = File.binread(file)
123
123
 
124
124
  # Custom headers. 'content-type' disables JSON serialization of the request body.
125
125
  headers = { "content-type" => "application/x-binary", "content-md5" => checksum64, "accept" => "application/json" }
@@ -598,7 +598,7 @@ class Chef
598
598
  filename = record[:name]
599
599
  base_dup_name = File.join(File.dirname(filename), File.basename(filename, File.extname(filename)))
600
600
  yml_files.each do |other|
601
- if other[:name] =~ /#{(File.extname(filename) == ".yml") ? "#{base_dup_name}.yaml" : "#{base_dup_name}.yml"}$/
601
+ if /#{(File.extname(filename) == ".yml") ? "#{base_dup_name}.yaml" : "#{base_dup_name}.yml"}$/.match?(other[:name])
602
602
  raise Chef::Exceptions::AmbiguousYAMLFile.new("Cookbook #{name}@#{version} contains ambiguous files: #{filename} and #{other[:name]}. Please update the cookbook to remove the incorrect file.")
603
603
  end
604
604
  end
@@ -104,13 +104,14 @@ class Chef
104
104
  #
105
105
  # @param script [String] script to run
106
106
  # @param interpreter [Symbol] the interpreter type, `:powershell` or `:pwsh`
107
+ # @param timeout [Integer, nil] timeout in seconds.
107
108
  # @return [Chef::PowerShell] output
108
- def powershell_exec(script, interpreter = :powershell)
109
+ def powershell_exec(script, interpreter = :powershell, timeout: -1)
109
110
  case interpreter
110
111
  when :powershell
111
- Chef::PowerShell.new(script)
112
+ Chef::PowerShell.new(script, timeout: timeout)
112
113
  when :pwsh
113
- Chef::Pwsh.new(script)
114
+ Chef::Pwsh.new(script, timeout: timeout)
114
115
  else
115
116
  raise ArgumentError, "Expected interpreter of :powershell or :pwsh"
116
117
  end
@@ -118,8 +119,8 @@ class Chef
118
119
 
119
120
  # The same as the #powershell_exec method except this will raise
120
121
  # Chef::PowerShell::CommandFailed if the command fails
121
- def powershell_exec!(script, interpreter = :powershell)
122
- cmd = powershell_exec(script, interpreter)
122
+ def powershell_exec!(script, interpreter = :powershell, **options)
123
+ cmd = powershell_exec(script, interpreter, **options)
123
124
  cmd.error!
124
125
  cmd
125
126
  end
@@ -242,8 +242,12 @@ class Chef
242
242
  end
243
243
  end
244
244
 
245
- def initialize(resource, run_context)
246
- @resource, @run_context = resource, run_context
245
+ attr_accessor :action
246
+
247
+ def initialize(resource, run_context, action)
248
+ @resource = resource
249
+ @run_context = run_context
250
+ @action = action
247
251
  @assertions = Hash.new { |h, k| h[k] = [] }
248
252
  @blocked_actions = []
249
253
  end
@@ -305,6 +309,8 @@ class Chef
305
309
  # "You don't have sufficient privileges to delete #{@new_resource.path}")
306
310
  # end
307
311
  def assert(*actions)
312
+ return unless actions.include?(action.to_sym) || actions.include?(:all_actions)
313
+
308
314
  assertion = Assertion.new
309
315
  yield assertion
310
316
  actions.each { |action| @assertions[action] << assertion }
@@ -33,15 +33,16 @@ class Chef
33
33
  # Requires: .NET Framework 4.0 or higher on the target machine.
34
34
  #
35
35
  # @param script [String] script to run
36
+ # @param timeout [Integer, nil] timeout in seconds.
36
37
  # @return [Object] output
37
- def initialize(script)
38
+ def initialize(script, timeout: -1)
38
39
  # This Powershell DLL source lives here: https://github.com/chef/chef-powershell-shim
39
40
  # Every merge into that repo triggers a Habitat build and promotion. Running
40
41
  # the rake :update_chef_exec_dll task in this (chef/chef) repo will pull down
41
42
  # the built packages and copy the binaries to distro/ruby_bin_folder. Bundle install
42
43
  # ensures that the correct architecture binaries are installed into the path.
43
44
  @dll ||= "Chef.PowerShell.Wrapper.dll"
44
- exec(script)
45
+ exec(script, timeout: timeout)
45
46
  end
46
47
 
47
48
  #
@@ -64,12 +65,13 @@ class Chef
64
65
  raise Chef::PowerShell::CommandFailed, "Unexpected exit in PowerShell command: #{@errors}" if error?
65
66
  end
66
67
 
67
- protected
68
+ private
68
69
 
69
- def exec(script)
70
+ def exec(script, timeout: -1)
70
71
  FFI.ffi_lib @dll
71
- FFI.attach_function :execute_powershell, :ExecuteScript, [:string], :pointer
72
- execution = FFI.execute_powershell(script).read_utf16string
72
+ FFI.attach_function :execute_powershell, :ExecuteScript, %i{string int}, :pointer
73
+ timeout = -1 if timeout == 0 || timeout.nil?
74
+ execution = FFI.execute_powershell(script, timeout).read_utf16string
73
75
  hashed_outcome = Chef::JSONCompat.parse(execution)
74
76
  @result = Chef::JSONCompat.parse(hashed_outcome["result"])
75
77
  @errors = hashed_outcome["errors"]
@@ -92,7 +92,7 @@ class Chef
92
92
  end
93
93
  end
94
94
 
95
- action :create do
95
+ action :create, description: "Create an entry in a cron table file (crontab). If an entry already exists (but does not match), update that entry to match." do
96
96
  crontab = ""
97
97
  newcron = ""
98
98
  cron_found = false
@@ -149,7 +149,7 @@ class Chef
149
149
  end
150
150
  end
151
151
 
152
- action :delete do
152
+ action :delete, description: "Delete an entry from a cron table file (crontab)." do
153
153
  if @cron_exists
154
154
  crontab = ""
155
155
  cron_found = false
@@ -121,7 +121,7 @@ class Chef
121
121
  end
122
122
  end
123
123
 
124
- action :create do
124
+ action :create, description: "Create a directory. If a directory already exists (but does not match), update that directory to match." do
125
125
  unless ::File.exist?(new_resource.path)
126
126
  converge_by("create new directory #{new_resource.path}") do
127
127
  if new_resource.recursive == true
@@ -137,7 +137,7 @@ class Chef
137
137
  load_resource_attributes_from_file(new_resource) unless Chef::Config[:why_run]
138
138
  end
139
139
 
140
- action :delete do
140
+ action :delete, description: "Delete a directory." do
141
141
  if ::File.exist?(new_resource.path)
142
142
  converge_by("delete existing directory #{new_resource.path}") do
143
143
  if new_resource.recursive == true
@@ -120,7 +120,7 @@ class Chef
120
120
  @status = shell_out("ifconfig")
121
121
  @status.stdout.each_line do |line|
122
122
  addr_regex = /^((\w|-)+):?(\d*):?\ .+$/
123
- if line =~ addr_regex
123
+ if line&.match?(addr_regex)
124
124
  if line.match(addr_regex).nil?
125
125
  @int_name = "nil"
126
126
  elsif line.match(addr_regex)[3] == ""
@@ -168,7 +168,7 @@ class Chef
168
168
  end
169
169
  end
170
170
 
171
- action :add do
171
+ action :add, description: "Run ifconfig to configure a network interface and (on some platforms) write a configuration file for that network interface." do
172
172
  # check to see if load_current_resource found interface in ifconfig
173
173
  unless current_resource.inet_addr
174
174
  unless new_resource.device == loopback_device
@@ -183,7 +183,7 @@ class Chef
183
183
  generate_config
184
184
  end
185
185
 
186
- action :enable do
186
+ action :enable, description: "Run ifconfig to enable a network interface." do
187
187
  # check to see if load_current_resource found ifconfig
188
188
  # enables, but does not manage config files
189
189
  return if current_resource.inet_addr
@@ -196,7 +196,7 @@ class Chef
196
196
  end
197
197
  end
198
198
 
199
- action :delete do
199
+ action :delete, description: "Run ifconfig to disable a network interface and (on some platforms) delete that network interface’s configuration file." do
200
200
  # check to see if load_current_resource found the interface
201
201
  if current_resource.device
202
202
  command = delete_command
@@ -210,7 +210,7 @@ class Chef
210
210
  delete_config
211
211
  end
212
212
 
213
- action :disable do
213
+ action :disable, description: "Run ifconfig to disable a network interface." do
214
214
  # check to see if load_current_resource found the interface
215
215
  # disables, but leaves config files in place.
216
216
  if current_resource.device
@@ -29,10 +29,16 @@ class Chef
29
29
  # "findmnt" outputs the mount points with volume.
30
30
  # Convert the mount_point of the resource to a real path in case it
31
31
  # contains symlinks in its parents dirs.
32
+ def loop_mount_points
33
+ # get loop_mount_points only if not initialized earlier
34
+ @loop_mount_points ||= shell_out!("losetup -a").stdout
35
+
36
+ rescue Errno::ENOENT
37
+ @loop_mount_points = ""
38
+ end
32
39
 
33
40
  def mounted?
34
41
  mounted = false
35
-
36
42
  real_mount_point = if ::File.exists? @new_resource.mount_point
37
43
  ::File.realpath(@new_resource.mount_point)
38
44
  else
@@ -45,6 +51,14 @@ class Chef
45
51
  when /\A#{Regexp.escape(real_mount_point)}\s+#{device_mount_regex}\s/
46
52
  mounted = true
47
53
  logger.trace("Special device #{device_logstring} mounted as #{real_mount_point}")
54
+ # Permalink for loop type devices mount points https://rubular.com/r/a0bS4p2RvXsGxx
55
+ when %r{\A#{Regexp.escape(real_mount_point)}\s+\/dev\/loop+[0-9]+\s}
56
+ loop_mount_points.each_line do |mount_point|
57
+ if mount_point.include? device_real
58
+ mounted = true
59
+ break
60
+ end
61
+ end
48
62
  # Permalink for multiple devices mounted to the same mount point(i.e. '/proc') https://rubular.com/r/a356yzspU7N9TY
49
63
  when %r{\A#{Regexp.escape(real_mount_point)}\s+([/\w])+\s}
50
64
  mounted = false
@@ -64,4 +78,4 @@ class Chef
64
78
  end
65
79
  end
66
80
  end
67
- end
81
+ end
@@ -279,4 +279,4 @@ class Chef
279
279
  end
280
280
  end
281
281
  end
282
- end
282
+ end
@@ -98,7 +98,7 @@ class Chef
98
98
  end
99
99
  end
100
100
 
101
- def magic_version
101
+ def magic_version_array
102
102
  package_name_array.each_with_index.map do |pkg, i|
103
103
  magical_version(i).version_with_arch
104
104
  end
@@ -17,13 +17,13 @@
17
17
 
18
18
  require_relative "../package"
19
19
  require_relative "../../resource/powershell_package"
20
- require_relative "../../mixin/powershell_out"
20
+ require_relative "../../mixin/powershell_exec"
21
21
 
22
22
  class Chef
23
23
  class Provider
24
24
  class Package
25
25
  class Powershell < Chef::Provider::Package
26
- include Chef::Mixin::PowershellOut
26
+ include Chef::Mixin::PowershellExec
27
27
 
28
28
  provides :powershell_package
29
29
 
@@ -54,9 +54,9 @@ class Chef
54
54
  # Installs the package specified with the version passed else latest version will be installed
55
55
  def install_package(names, versions)
56
56
  names.each_with_index do |name, index|
57
- cmd = powershell_out(build_powershell_package_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
57
+ cmd = powershell_exec(build_powershell_package_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
58
58
  next if cmd.nil?
59
- raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if /SkipPublisherCheck/.match?(cmd.stderr)
59
+ raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if /SkipPublisherCheck/.match?(cmd.error)
60
60
  end
61
61
  end
62
62
 
@@ -64,11 +64,12 @@ class Chef
64
64
  def remove_package(names, versions)
65
65
  names.each_with_index do |name, index|
66
66
  if versions && !versions[index].nil?
67
- powershell_out(build_powershell_package_command("Uninstall-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
67
+ powershell_exec(build_powershell_package_command("Uninstall-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
68
68
  else
69
69
  version = "0"
70
70
  until version.empty?
71
- version = powershell_out(build_powershell_package_command("Uninstall-Package '#{name}'"), timeout: new_resource.timeout).stdout.strip
71
+ version = powershell_exec(build_powershell_package_command("Uninstall-Package '#{name}'"), timeout: new_resource.timeout).result
72
+ version = version.strip if version.respond_to?(:strip)
72
73
  unless version.empty?
73
74
  logger.info("Removed package '#{name}' with version #{version}")
74
75
  end
@@ -82,13 +83,14 @@ class Chef
82
83
  versions = []
83
84
  new_resource.package_name.each_with_index do |name, index|
84
85
  version = if new_resource.version && !new_resource.version[index].nil?
85
- powershell_out(build_powershell_package_command("Find-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).stdout.strip
86
+ powershell_exec(build_powershell_package_command("Find-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).result
86
87
  else
87
- powershell_out(build_powershell_package_command("Find-Package '#{name}'"), timeout: new_resource.timeout).stdout.strip
88
+ powershell_exec(build_powershell_package_command("Find-Package '#{name}'"), timeout: new_resource.timeout).result
88
89
  end
89
90
  if version.empty?
90
91
  version = nil
91
92
  end
93
+ version = version.strip if version.respond_to?(:strip)
92
94
  versions.push(version)
93
95
  end
94
96
  versions
@@ -99,13 +101,14 @@ class Chef
99
101
  version_list = []
100
102
  new_resource.package_name.each_with_index do |name, index|
101
103
  version = if new_resource.version && !new_resource.version[index].nil?
102
- powershell_out(build_powershell_package_command("Get-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).stdout.strip
104
+ powershell_exec(build_powershell_package_command("Get-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).result
103
105
  else
104
- powershell_out(build_powershell_package_command("Get-Package '#{name}'"), timeout: new_resource.timeout).stdout.strip
106
+ powershell_exec(build_powershell_package_command("Get-Package '#{name}'"), timeout: new_resource.timeout).result
105
107
  end
106
108
  if version.empty?
107
109
  version = nil
108
110
  end
111
+ version = version.strip if version.respond_to?(:strip)
109
112
  version_list.push(version)
110
113
  end
111
114
  version_list
@@ -115,10 +115,90 @@ class Chef
115
115
  end
116
116
  end
117
117
 
118
+ def is_arch?(arch)
119
+ # cspell:disable-next
120
+ arches = %w{aarch64 alpha alphaev4 alphaev45 alphaev5 alphaev56 alphaev6 alphaev67 alphaev68 alphaev7 alphapca56 armv5tejl armv5tel armv5tl armv6l armv7l armv8l armv6hl armv7hl armv7hnl armv8hl i386 athlon geode i386 i486 i586 i686 ia64 mips mipsel mips64 mips64el noarch ppc ppc64 ppc64iseries ppc64p7 ppc64pseries ppc64le riscv32 riscv64 riscv128 s390 s390x sh3 sh4 sh4a sparc sparc64 sparc64v sparcv8 sparcv9 sparcv9v x86_64 amd64 ia32e}
121
+ arches.include?(arch)
122
+ end
123
+
124
+ # We have a provides line with an epoch in it and yum cannot parse that, so we
125
+ # need to deconstruct the args. This doesn't support splats which is why we
126
+ # only do it for this particularly narrow use case.
127
+ #
128
+ # name-epoch:version
129
+ # name-epoch:version.arch
130
+ # name-epoch:version-release
131
+ # name-epoch:version-release.arch
132
+ #
133
+ # @api private
134
+ def deconstruct_args(provides)
135
+ raise "provides must have an epoch in the version to deconstruct" unless provides =~ /^(\S+)-(\d+):(\S+)/
136
+
137
+ name = $1
138
+ epoch = $2
139
+ other = $3
140
+ ret = { "provides" => name, "epoch" => epoch }
141
+ maybe_arch = other.rpartition(".").last
142
+ arch = if is_arch?(maybe_arch)
143
+ other.delete_suffix!(".#{maybe_arch}")
144
+ maybe_arch
145
+ end
146
+ ret.merge!({ "arch" => arch }) if arch
147
+ (version, _, release) = other.rpartition("-")
148
+ if version.empty?
149
+ ret.merge!({ "version" => release }) # yeah, rpartition is just weird
150
+ else
151
+ ret.merge!({ "version" => version, "release" => release })
152
+ end
153
+ end
154
+
155
+ # In the default case for the yum provider we now do terrible things with ruby
156
+ # to concatenate all the properties together to form a single string to feed to
157
+ # the python which favors using returnPackages/searchProvides over the
158
+ # searchNevra API. That means that these two different ways of constructing the
159
+ # resource are now perfectly identical:
160
+ #
161
+ # yum_package "zabbix-agent-4.0.15-1.fc31.x86_64"
162
+ #
163
+ # yum_package "zabbix-agent" do
164
+ # version "4.0.15-1.fc31"
165
+ # arch "x86_64"
166
+ # end
167
+ #
168
+ # This function handles turning the second form into the first form.
169
+ #
170
+ # In the case where the epoch is given in the version and we do not have any glob
171
+ # patterns that is handled by going the other way and calling deconstruct_args due
172
+ # to the yum libraries not supporting that calling pattern other than by searchNevra.
173
+ #
174
+ # NOTE: This is an ugly hack and should NOT be considered an endorsement of this approach
175
+ # towards any kind of features or bugfixes in the DNF provider. I'm doing this
176
+ # because YUM is sunsetting at this point and its very difficult to fight with the
177
+ # libraries on the python side of things.
178
+ #
179
+ # @api private
180
+ def combine_args(provides, version, arch)
181
+ provides = provides.dup
182
+ maybe_arch = provides.rpartition(".").last
183
+ if is_arch?(maybe_arch)
184
+ arch = maybe_arch
185
+ provides.delete_suffix!(".#{arch}")
186
+ end
187
+ provides = "#{provides}-#{version}" if version
188
+ provides = "#{provides}.#{arch}" if arch
189
+ # yum (on rhel7) can't handle an epoch in provides, but
190
+ # deconstructing the args can't handle dealing with globs
191
+ if provides =~ /-\d+:/ && provides !~ /[\*\?]/
192
+ deconstruct_args(provides)
193
+ else
194
+ { "provides" => provides }
195
+ end
196
+ end
197
+
118
198
  # @return Array<Version>
119
199
  # NB: "options" here is the yum_package options hash and is deliberately not **opts
120
200
  def package_query(action, provides, version: nil, arch: nil, options: {})
121
- parameters = { "provides" => provides, "version" => version, "arch" => arch }
201
+ parameters = combine_args(provides, version, arch)
122
202
  repo_opts = options_params(options || {})
123
203
  parameters.merge!(repo_opts)
124
204
  # XXX: for now we close the rpmdb before and after every query with an enablerepo/disablerepo to clean the helpers internal state
@@ -137,25 +217,6 @@ class Chef
137
217
 
138
218
  private
139
219
 
140
- # i couldn't figure out how to decompose an evr on the python side, it seems reasonably
141
- # painless to do it in ruby (generally massaging nevras in the ruby side is HIGHLY
142
- # discouraged -- this is an "every rule has an exception" exception -- any additional
143
- # functionality should probably trigger moving this regexp logic into python)
144
- def add_version(hash, version)
145
- epoch = nil
146
- if version =~ /(\S+):(\S+)/
147
- epoch = $1
148
- version = $2
149
- end
150
- if version =~ /(\S+)-(\S+)/
151
- version = $1
152
- release = $2
153
- end
154
- hash["epoch"] = epoch unless epoch.nil?
155
- hash["release"] = release unless release.nil?
156
- hash["version"] = version
157
- end
158
-
159
220
  def query(action, parameters)
160
221
  with_helper do
161
222
  json = build_query(action, parameters)
@@ -174,11 +235,6 @@ class Chef
174
235
  hash[param_name] = param_value unless param_value.nil?
175
236
  end
176
237
 
177
- # Special handling for certain action / param combos
178
- if %i{whatinstalled whatavailable}.include?(action)
179
- add_version(hash, parameters["version"]) unless parameters["version"].nil?
180
- end
181
-
182
238
  FFI_Yajl::Encoder.encode(hash)
183
239
  end
184
240