chef 17.6.15-universal-mingw32 → 17.8.25-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +5 -0
- data/chef.gemspec +1 -0
- data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.Wrapper.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/Ijwhost.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/concrt140.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/host/fxr/5.0.0/hostfxr.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/msvcp140.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/msvcp140_1.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/msvcp140_2.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/msvcp140_atomic_wait.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/msvcp140_codecvt_ids.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Ijwhost.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.CSharp.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +180 -180
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.VisualBasic.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.VisualBasic.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.Win32.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.Win32.Registry.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.AppContext.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Buffers.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.Concurrent.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.Immutable.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.NonGeneric.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.Specialized.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Collections.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.Annotations.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.DataAnnotations.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.EventBasedAsync.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.TypeConverter.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ComponentModel.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Configuration.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Console.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Data.Common.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Data.DataSetExtensions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Data.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Contracts.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Debug.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.DiagnosticSource.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.FileVersionInfo.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Process.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.StackTrace.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.TextWriterTraceListener.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Tools.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.TraceSource.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.Tracing.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Dynamic.Runtime.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Formats.Asn1.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Globalization.Calendars.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Globalization.Extensions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Globalization.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.Brotli.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.FileSystem.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.ZipFile.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Compression.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.AccessControl.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.DriveInfo.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.Watcher.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.FileSystem.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.IsolatedStorage.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.MemoryMappedFiles.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Pipes.AccessControl.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.Pipes.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.UnmanagedMemoryStream.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.IO.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.Expressions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.Parallel.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.Queryable.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Linq.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Memory.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Http.Json.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Http.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.HttpListener.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Mail.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.NameResolution.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.NetworkInformation.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Ping.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Requests.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Security.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.ServicePoint.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.Sockets.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebClient.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebHeaderCollection.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebProxy.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebSockets.Client.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.WebSockets.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Net.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Numerics.Vectors.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Numerics.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ObjectModel.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.CoreLib.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.DataContractSerialization.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.Uri.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.Xml.Linq.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Private.Xml.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.DispatchProxy.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Emit.ILGeneration.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Emit.Lightweight.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Emit.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Extensions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Metadata.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.TypeExtensions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Reflection.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Resources.Reader.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Resources.ResourceManager.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Resources.Writer.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.CompilerServices.Unsafe.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.CompilerServices.VisualC.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Extensions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Handles.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.InteropServices.RuntimeInformation.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.InteropServices.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Intrinsics.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Loader.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Numerics.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Formatters.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Json.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.Xml.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.Serialization.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Runtime.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.AccessControl.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Claims.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Algorithms.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Cng.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Csp.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Encoding.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.OpenSsl.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Primitives.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.X509Certificates.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Principal.Windows.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Principal.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.SecureString.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ServiceModel.Web.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ServiceProcess.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encoding.CodePages.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encoding.Extensions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encoding.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Encodings.Web.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.Json.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Text.RegularExpressions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Channels.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Overlapped.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.Dataflow.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.Extensions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.Parallel.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Tasks.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Thread.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.ThreadPool.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.Timer.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Threading.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Transactions.Local.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Transactions.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.ValueTuple.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Web.HttpUtility.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Web.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Windows.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.Linq.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.ReaderWriter.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.Serialization.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XDocument.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XPath.XDocument.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XPath.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XmlDocument.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.XmlSerializer.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Xml.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/WindowsBase.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/clrcompression.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/clretwrc.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/clrjit.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/coreclr.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/createdump.exe +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/dbgshim.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/hostfxr.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/hostpolicy.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordaccore.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordaccore_amd64_amd64_5.0.521.16609.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordbi.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscorlib.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscorrc.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/netstandard.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/vccorlib140.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/vcruntime140.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/vcruntime140_1.dll +0 -0
- data/distro/ruby_bin_folder/x86/Chef.PowerShell.dll +0 -0
- data/distro/ruby_bin_folder/x86/Chef.Powershell.Wrapper.dll +0 -0
- data/distro/ruby_bin_folder/x86/concrt140.dll +0 -0
- data/distro/ruby_bin_folder/x86/msvcp140.dll +0 -0
- data/distro/ruby_bin_folder/x86/msvcp140_1.dll +0 -0
- data/distro/ruby_bin_folder/x86/msvcp140_2.dll +0 -0
- data/distro/ruby_bin_folder/x86/msvcp140_atomic_wait.dll +0 -0
- data/distro/ruby_bin_folder/x86/msvcp140_codecvt_ids.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
- data/distro/ruby_bin_folder/x86/vccorlib140.dll +0 -0
- data/distro/ruby_bin_folder/x86/vcruntime140.dll +0 -0
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/chef_fs/file_pattern.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +1 -1
- data/lib/chef/compliance/default_attributes.rb +12 -2
- data/lib/chef/compliance/runner.rb +51 -5
- data/lib/chef/data_collector/run_end_message.rb +1 -1
- data/lib/chef/dsl/reboot_pending.rb +1 -1
- data/lib/chef/exceptions.rb +10 -0
- data/lib/chef/mixin/powershell_exec.rb +6 -5
- data/lib/chef/mixin/why_run.rb +8 -2
- data/lib/chef/powershell.rb +8 -6
- data/lib/chef/provider/cron.rb +4 -1
- data/lib/chef/provider/git.rb +1 -1
- data/lib/chef/provider/ifconfig/debian.rb +1 -1
- data/lib/chef/provider/mount/linux.rb +16 -2
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package/dnf.rb +1 -1
- data/lib/chef/provider/package/habitat.rb +1 -1
- data/lib/chef/provider/package/powershell.rb +13 -10
- data/lib/chef/provider/package/zypper.rb +2 -0
- data/lib/chef/provider/package.rb +58 -23
- data/lib/chef/provider/subversion.rb +5 -5
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/pwsh.rb +3 -2
- data/lib/chef/resource/chef_client_config.rb +22 -1
- data/lib/chef/resource/chef_client_launchd.rb +1 -1
- data/lib/chef/resource/chef_client_trusted_certificate.rb +1 -0
- data/lib/chef/resource/chocolatey_config.rb +1 -1
- data/lib/chef/resource/chocolatey_feature.rb +1 -1
- data/lib/chef/resource/chocolatey_source.rb +24 -2
- data/lib/chef/resource/directory.rb +1 -1
- data/lib/chef/resource/dnf_package.rb +4 -6
- data/lib/chef/resource/dpkg_package.rb +5 -0
- data/lib/chef/resource/execute.rb +1 -4
- data/lib/chef/resource/habitat_install.rb +5 -5
- data/lib/chef/resource/inspec_waiver.rb +1 -1
- data/lib/chef/resource/inspec_waiver_file_entry.rb +1 -1
- data/lib/chef/resource/kernel_module.rb +27 -2
- data/lib/chef/resource/launchd.rb +0 -3
- data/lib/chef/resource/macos_userdefaults.rb +41 -131
- data/lib/chef/resource/rhsm_register.rb +31 -0
- data/lib/chef/resource/support/client.erb +7 -0
- data/lib/chef/resource/windows_auto_run.rb +1 -1
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
- data/lib/chef/resource/windows_feature_powershell.rb +7 -7
- data/lib/chef/resource/windows_update_settings.rb +3 -3
- data/lib/chef/resource.rb +2 -2
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/secret_fetcher/azure_key_vault.rb +62 -8
- data/lib/chef/secret_fetcher.rb +0 -1
- data/lib/chef/version.rb +1 -1
- data/spec/functional/dsl/reboot_pending_spec.rb +3 -3
- data/spec/functional/dsl/registry_helper_spec.rb +1 -1
- data/spec/functional/resource/dnf_package_spec.rb +34 -20
- data/spec/functional/resource/dpkg_package_spec.rb +16 -0
- data/spec/functional/resource/dsc_script_spec.rb +2 -2
- data/spec/functional/resource/macos_userdefaults_spec.rb +139 -0
- data/spec/functional/resource/registry_spec.rb +81 -81
- data/spec/functional/resource/zypper_package_spec.rb +7 -0
- data/spec/functional/win32/registry_spec.rb +8 -8
- data/spec/integration/client/client_spec.rb +31 -0
- data/spec/unit/application/base_spec.rb +40 -0
- data/spec/unit/compliance/runner_spec.rb +62 -1
- data/spec/unit/data_collector_spec.rb +24 -1
- data/spec/unit/dsl/reboot_pending_spec.rb +1 -1
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/mixin/default_paths_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +3 -3
- data/spec/unit/mixin/why_run_spec.rb +53 -0
- data/spec/unit/provider/cron_spec.rb +45 -0
- data/spec/unit/provider/group/groupadd_spec.rb +1 -0
- data/spec/unit/provider/group/usermod_spec.rb +2 -2
- data/spec/unit/provider/ifconfig_spec.rb +2 -0
- data/spec/unit/provider/mount/linux_spec.rb +16 -3
- data/spec/unit/provider/package/bff_spec.rb +1 -0
- data/spec/unit/provider/package/powershell_spec.rb +114 -114
- data/spec/unit/provider/package/rubygems_spec.rb +8 -5
- data/spec/unit/provider/package/solaris_spec.rb +1 -0
- data/spec/unit/provider/package/windows_spec.rb +1 -1
- data/spec/unit/provider/registry_key_spec.rb +4 -4
- data/spec/unit/provider/service/arch_service_spec.rb +2 -2
- data/spec/unit/provider/service/debian_service_spec.rb +1 -0
- data/spec/unit/provider/service/gentoo_service_spec.rb +1 -0
- data/spec/unit/provider/service/macosx_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +4 -1
- data/spec/unit/provider/service/simple_service_spec.rb +6 -4
- data/spec/unit/provider/service/windows_spec.rb +5 -5
- data/spec/unit/provider/subversion_spec.rb +4 -4
- data/spec/unit/provider/user_spec.rb +2 -0
- data/spec/unit/provider/windows_env_spec.rb +1 -1
- data/spec/unit/provider/zypper_repository_spec.rb +1 -1
- data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +14 -0
- data/spec/unit/resource/chocolatey_config_spec.rb +1 -1
- data/spec/unit/resource/chocolatey_feature_spec.rb +1 -1
- data/spec/unit/resource/chocolatey_source_spec.rb +1 -1
- data/spec/unit/resource/dpkg_package_spec.rb +12 -0
- data/spec/unit/resource/kernel_module_spec.rb +2 -1
- data/spec/unit/resource/macos_user_defaults_spec.rb +36 -96
- data/spec/unit/resource/registry_key_spec.rb +10 -10
- data/spec/unit/resource/rhsm_register_spec.rb +42 -0
- data/spec/unit/resource/windows_auto_run_spec.rb +1 -1
- data/spec/unit/resource/windows_feature_powershell_spec.rb +1 -1
- data/spec/unit/resource/windows_firewall_rule_spec.rb +2 -2
- data/spec/unit/resource/windows_task_spec.rb +3 -3
- data/spec/unit/resource_reporter_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +5 -0
- data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +99 -20
- data/spec/unit/util/backup_spec.rb +1 -1
- data/spec/unit/win32/registry_spec.rb +3 -3
- metadata +25 -8
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/mscordaccore_amd64_amd64_5.0.20.51904.dll +0 -0
@@ -71,7 +71,7 @@ class Chef
|
|
71
71
|
|
72
72
|
logger.debug("#{self.class}##{__method__}: enabling Compliance Phase")
|
73
73
|
|
74
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
@@ -128,7 +128,7 @@ class Chef
|
|
128
128
|
|
129
129
|
if new_resource.cookbook_name
|
130
130
|
hash["cookbook_name"] = new_resource.cookbook_name
|
131
|
-
hash["cookbook_version"] = new_resource.cookbook_version
|
131
|
+
hash["cookbook_version"] = new_resource.cookbook_version&.version
|
132
132
|
hash["recipe_name"] = new_resource.recipe_name
|
133
133
|
end
|
134
134
|
|
@@ -37,7 +37,7 @@ class Chef
|
|
37
37
|
# due to a file being in use (usually a temporary file and a system file)
|
38
38
|
# \??\c:\temp\test.sys!\??\c:\winnt\system32\test.sys
|
39
39
|
# http://technet.microsoft.com/en-us/library/cc960241.aspx
|
40
|
-
registry_value_exists?(
|
40
|
+
registry_value_exists?("HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager", { name: "PendingFileRenameOperations" }) ||
|
41
41
|
|
42
42
|
# RebootRequired key contains Update IDs with a value of 1 if they require a reboot.
|
43
43
|
# The existence of RebootRequired alone is sufficient on my Windows 8.1 workstation in Windows Update
|
data/lib/chef/exceptions.rb
CHANGED
@@ -308,6 +308,16 @@ class Chef
|
|
308
308
|
super("No secret service provided. Supported services are: :#{fetcher_service_names.join(" :")}")
|
309
309
|
end
|
310
310
|
end
|
311
|
+
|
312
|
+
class Azure
|
313
|
+
class IdentityNotFound < RuntimeError
|
314
|
+
def initialize
|
315
|
+
super("The managed identity could not be found. This could mean one of the following things:\n\n" \
|
316
|
+
" 1. The VM has no system or user assigned identities.\n" \
|
317
|
+
" 2. The managed identity object_id or client_id that was specified is not assigned to the VM.\n")
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
311
321
|
end
|
312
322
|
|
313
323
|
# Exception class for collecting multiple failures. Used when running
|
@@ -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
|
data/lib/chef/mixin/why_run.rb
CHANGED
@@ -242,8 +242,12 @@ class Chef
|
|
242
242
|
end
|
243
243
|
end
|
244
244
|
|
245
|
-
|
246
|
-
|
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 }
|
data/lib/chef/powershell.rb
CHANGED
@@ -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
|
-
|
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,
|
72
|
-
|
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"]
|
data/lib/chef/provider/cron.rb
CHANGED
@@ -100,7 +100,10 @@ class Chef
|
|
100
100
|
newcron = get_crontab_entry
|
101
101
|
|
102
102
|
if @cron_exists
|
103
|
-
|
103
|
+
# Only compare the crontab if the current resource has a set command.
|
104
|
+
# This may not be set in cases where the Chef comment exists but the
|
105
|
+
# crontab command was commented out.
|
106
|
+
if current_resource.property_is_set?(:command) && !cron_different?
|
104
107
|
logger.debug("#{new_resource}: Skipping existing cron entry")
|
105
108
|
return
|
106
109
|
end
|
data/lib/chef/provider/git.rb
CHANGED
@@ -87,7 +87,7 @@ iface <%= new_resource.device %> <%= new_resource.family %> static
|
|
87
87
|
directory INTERFACES_DOT_D_DIR
|
88
88
|
|
89
89
|
# roll our own file_edit resource, this will not get reported until we have a file_edit resource
|
90
|
-
interfaces_dot_d_for_regexp = INTERFACES_DOT_D_DIR.gsub(/\./,
|
90
|
+
interfaces_dot_d_for_regexp = INTERFACES_DOT_D_DIR.gsub(/\./, "\\.") # escape dots for the regexp
|
91
91
|
regexp = %r{^\s*source\s+#{interfaces_dot_d_for_regexp}/\*\s*$}
|
92
92
|
|
93
93
|
return if ::File.exist?(INTERFACES_FILE) && regexp.match(IO.read(INTERFACES_FILE))
|
@@ -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
|
@@ -108,7 +108,7 @@ class Chef
|
|
108
108
|
headers["Authorization"] = "Bearer #{new_resource.auth_token}" if new_resource.auth_token
|
109
109
|
|
110
110
|
Chef::JSONCompat.parse(http.get(url, headers))
|
111
|
-
rescue Net::
|
111
|
+
rescue Net::HTTPClientException
|
112
112
|
nil
|
113
113
|
end
|
114
114
|
end
|
@@ -17,13 +17,13 @@
|
|
17
17
|
|
18
18
|
require_relative "../package"
|
19
19
|
require_relative "../../resource/powershell_package"
|
20
|
-
require_relative "../../mixin/
|
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::
|
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 =
|
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.
|
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
|
-
|
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 =
|
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
|
-
|
86
|
+
powershell_exec(build_powershell_package_command("Find-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).result
|
86
87
|
else
|
87
|
-
|
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
|
-
|
104
|
+
powershell_exec(build_powershell_package_command("Get-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).result
|
103
105
|
else
|
104
|
-
|
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
|
@@ -438,47 +438,81 @@ class Chef
|
|
438
438
|
@target_version_array ||=
|
439
439
|
begin
|
440
440
|
target_version_array = []
|
441
|
-
each_package do |package_name, new_version, current_version, candidate_version|
|
441
|
+
each_package do |package_name, new_version, current_version, candidate_version, magic_version|
|
442
442
|
case action
|
443
443
|
when :upgrade
|
444
|
-
if current_version
|
445
|
-
#
|
446
|
-
#
|
444
|
+
if version_equals?(current_version, new_version)
|
445
|
+
# This is a short-circuit (mostly for the rubygems provider) to avoid needing to
|
446
|
+
# expensively query the candidate_version which must come later. This only checks
|
447
|
+
# exact matching, the check for fuzzy matching is later.
|
448
|
+
logger.trace("#{new_resource} #{package_name} #{new_version} is already installed")
|
449
|
+
target_version_array.push(nil)
|
450
|
+
elsif current_version.nil?
|
451
|
+
# This is a simple check to see if we have any currently installed version at all, this is
|
452
|
+
# safe to do before the allow_downgrade check so we check this before.
|
447
453
|
logger.trace("#{new_resource} has no existing installed version. Installing install #{candidate_version}")
|
448
454
|
target_version_array.push(candidate_version)
|
449
|
-
elsif !
|
450
|
-
#
|
451
|
-
|
455
|
+
elsif !allow_downgrade && version_compare(current_version, candidate_version) == 1
|
456
|
+
# This check for downgrading when allow_downgrade is false uses the current_version rather
|
457
|
+
# than the magic_version since we never want to downgrade even if the constraints are not met
|
458
|
+
# if the version is higher. This check does use the candidate_version and unlazies this so
|
459
|
+
# there will a perf hit on idempotent use when allow_downgrade is false which is unavoidable.
|
460
|
+
logger.trace("#{new_resource} #{package_name} has installed version #{current_version}, which is newer than available version #{candidate_version}. Skipping...)")
|
452
461
|
target_version_array.push(nil)
|
462
|
+
elsif magic_version.nil?
|
463
|
+
# This is the check for fuzzy matching of the installed_version, where if the installed version
|
464
|
+
# does not match the desired version constraints (but is not an exact match) then we need to
|
465
|
+
# install the candidate_version (this must come after the allow_downgrade check)
|
466
|
+
logger.trace("#{new_resource} has an installed version that does not match the version constraint. Installing install #{candidate_version}")
|
467
|
+
target_version_array.push(candidate_version)
|
453
468
|
elsif candidate_version.nil?
|
469
|
+
# This check necessarily unlazies the candidate_version and may be expensive (connecting to
|
470
|
+
# rubygems.org or whatever). It comes as late as possible.
|
454
471
|
logger.trace("#{new_resource} #{package_name} has no candidate_version to upgrade to")
|
455
472
|
target_version_array.push(nil)
|
456
473
|
elsif version_equals?(current_version, candidate_version)
|
474
|
+
# This check sees if the candidate_version is already installed or if we should upgrade/update the
|
475
|
+
# package. This is the normal idempotent behavior of :upgrade and is inherently expensive due to
|
476
|
+
# unlazying the candidate_version. To prevent the perf hit the version may be specified with a full
|
477
|
+
# version constraint. Then the cookbook can roll the version forward and use :upgrade to force version
|
478
|
+
# pinning.
|
457
479
|
logger.trace("#{new_resource} #{package_name} #{candidate_version} is already installed")
|
458
480
|
target_version_array.push(nil)
|
459
|
-
elsif !allow_downgrade && version_compare(current_version, candidate_version) == 1
|
460
|
-
logger.trace("#{new_resource} #{package_name} has installed version #{current_version}, which is newer than available version #{candidate_version}. Skipping...)")
|
461
|
-
target_version_array.push(nil)
|
462
481
|
else
|
463
|
-
logger.trace("#{new_resource} #{package_name} is out of date, will
|
482
|
+
logger.trace("#{new_resource} #{package_name} is out of date, will update to #{candidate_version}")
|
464
483
|
target_version_array.push(candidate_version)
|
465
484
|
end
|
466
485
|
|
467
486
|
when :install
|
468
|
-
if new_version && !
|
487
|
+
if current_version && new_version && !allow_downgrade && version_compare(current_version, new_version) == 1
|
488
|
+
# This is the idempotency guard for downgrades when downgrades are not allowed. This should perhaps raise
|
489
|
+
# an exception since we were told to install an exact package version but we are silently refusing to do so
|
490
|
+
# because a higher version is already installed. Maybe we need a flag for users to apply their preferred
|
491
|
+
# declarative philosophy? This has to come early and outside of the two code paths below.
|
492
|
+
logger.warn("#{new_resource} #{package_name} has installed version #{current_version}, which is newer than available version #{new_version}. Skipping...)")
|
493
|
+
target_version_array.push(nil)
|
494
|
+
elsif new_version && !use_magic_version?
|
495
|
+
# This is for "non magic version using" subclasses to do comparisons between the current_version and the
|
496
|
+
# desired new_version. XXX: If we converted this to current_version_requirement_satisfied? and made it specific
|
497
|
+
# to the current version check and then eliminated the magic_version, we might be able to eliminate separate codepaths
|
498
|
+
# here, and eliminate the semantic confusion around the magic_version?
|
469
499
|
if version_requirement_satisfied?(current_version, new_version)
|
470
500
|
logger.trace("#{new_resource} #{package_name} #{current_version} satisfies #{new_version} requirement")
|
471
501
|
target_version_array.push(nil)
|
472
|
-
elsif current_version && !allow_downgrade && version_compare(current_version, new_version) == 1
|
473
|
-
logger.warn("#{new_resource} #{package_name} has installed version #{current_version}, which is newer than available version #{new_version}. Skipping...)")
|
474
|
-
target_version_array.push(nil)
|
475
502
|
else
|
503
|
+
# XXX: some subclasses seem to depend on this behavior where the new_version can be different from the
|
504
|
+
# candidate_version and we install the new_version, it seems like the candidate_version should be fixed to
|
505
|
+
# be resolved correctly to the new_version for those providers. although it may just be unit test bugs.
|
506
|
+
# it would be more correct to use the candidate_version here, but then it needs to be the correctly resolved
|
507
|
+
# candidate_version against the new_version constraint.
|
476
508
|
logger.trace("#{new_resource} #{package_name} #{current_version} needs updating to #{new_version}")
|
477
509
|
target_version_array.push(new_version)
|
478
510
|
end
|
479
|
-
elsif
|
480
|
-
#
|
481
|
-
#
|
511
|
+
elsif magic_version.nil?
|
512
|
+
# This is for when we have a "magic version using" subclass and where the installed version does not match the
|
513
|
+
# constraint specified in the new_version, so we need to upgrade to the candidate_version. This is the only
|
514
|
+
# codepath in the :install branch which references the candidate_version so it is slow, but it is the path where
|
515
|
+
# we need to do work anyway. XXX: should we check for candidate_version.nil? somewhere around here?
|
482
516
|
logger.trace("#{new_resource} #{package_name} not installed, installing #{candidate_version}")
|
483
517
|
target_version_array.push(candidate_version)
|
484
518
|
else
|
@@ -512,8 +546,8 @@ class Chef
|
|
512
546
|
@packages_missing_candidates ||=
|
513
547
|
begin
|
514
548
|
missing = []
|
515
|
-
each_package do |package_name, new_version, current_version, candidate_version|
|
516
|
-
missing.push(package_name) if
|
549
|
+
each_package do |package_name, new_version, current_version, candidate_version, magic_version|
|
550
|
+
missing.push(package_name) if magic_version.nil? && candidate_version.nil?
|
517
551
|
end
|
518
552
|
missing
|
519
553
|
end
|
@@ -536,7 +570,7 @@ class Chef
|
|
536
570
|
@forced_packages_missing_candidates ||=
|
537
571
|
begin
|
538
572
|
missing = []
|
539
|
-
each_package do |package_name, new_version, current_version, candidate_version|
|
573
|
+
each_package do |package_name, new_version, current_version, candidate_version, magic_version|
|
540
574
|
next if new_version.nil? || current_version.nil?
|
541
575
|
|
542
576
|
if use_magic_version?
|
@@ -559,9 +593,10 @@ class Chef
|
|
559
593
|
def each_package
|
560
594
|
package_name_array.each_with_index do |package_name, i|
|
561
595
|
candidate_version = candidate_version_array[i]
|
562
|
-
current_version =
|
596
|
+
current_version = current_version_array[i]
|
597
|
+
magic_version = use_magic_version? ? magic_version_array[i] : current_version_array[i]
|
563
598
|
new_version = new_version_array[i]
|
564
|
-
yield package_name, new_version, current_version, candidate_version
|
599
|
+
yield package_name, new_version, current_version, candidate_version, magic_version
|
565
600
|
end
|
566
601
|
end
|
567
602
|
|
@@ -58,7 +58,7 @@ class Chef
|
|
58
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
|
-
shell_out!(checkout_command, run_options)
|
61
|
+
shell_out!(checkout_command, **run_options)
|
62
62
|
end
|
63
63
|
else
|
64
64
|
logger.debug "#{new_resource} checkout destination #{new_resource.destination} already exists or is a non-empty directory - nothing to do"
|
@@ -75,7 +75,7 @@ class Chef
|
|
75
75
|
|
76
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
|
-
shell_out!(export_command, run_options)
|
78
|
+
shell_out!(export_command, **run_options)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -86,7 +86,7 @@ class Chef
|
|
86
86
|
logger.trace "#{new_resource} current revision: #{current_rev} target revision: #{revision_int}"
|
87
87
|
unless current_revision_matches_target_revision?
|
88
88
|
converge_by("sync #{new_resource.destination} from #{new_resource.repository}") do
|
89
|
-
shell_out!(sync_command, run_options)
|
89
|
+
shell_out!(sync_command, **run_options)
|
90
90
|
logger.info "#{new_resource} updated to revision: #{revision_int}"
|
91
91
|
end
|
92
92
|
end
|
@@ -125,7 +125,7 @@ class Chef
|
|
125
125
|
new_resource.revision
|
126
126
|
else
|
127
127
|
command = scm(:info, new_resource.repository, new_resource.svn_info_args, authentication, "-r#{new_resource.revision}")
|
128
|
-
svn_info = shell_out!(command, run_options(cwd: cwd, returns: [0, 1])).stdout
|
128
|
+
svn_info = shell_out!(command, **run_options(cwd: cwd, returns: [0, 1])).stdout
|
129
129
|
|
130
130
|
extract_revision_info(svn_info)
|
131
131
|
end
|
@@ -137,7 +137,7 @@ class Chef
|
|
137
137
|
return nil unless ::File.exist?(::File.join(new_resource.destination, ".svn"))
|
138
138
|
|
139
139
|
command = scm(:info)
|
140
|
-
svn_info = shell_out!(command, run_options(cwd: cwd, returns: [0, 1])).stdout
|
140
|
+
svn_info = shell_out!(command, **run_options(cwd: cwd, returns: [0, 1])).stdout
|
141
141
|
|
142
142
|
extract_revision_info(svn_info)
|
143
143
|
end
|
data/lib/chef/provider.rb
CHANGED
@@ -269,7 +269,7 @@ class Chef
|
|
269
269
|
end
|
270
270
|
|
271
271
|
def requirements
|
272
|
-
@requirements ||= ResourceRequirements.new(@new_resource, run_context)
|
272
|
+
@requirements ||= ResourceRequirements.new(@new_resource, run_context, action || new_resource.action)
|
273
273
|
end
|
274
274
|
|
275
275
|
def description(description = "NOT_PASSED")
|
data/lib/chef/pwsh.rb
CHANGED
@@ -24,15 +24,16 @@ class Chef
|
|
24
24
|
# bindir directory.
|
25
25
|
#
|
26
26
|
# @param script [String] script to run
|
27
|
+
# @param timeout [Integer, nil] timeout in seconds.
|
27
28
|
# @return [Object] output
|
28
|
-
def initialize(script)
|
29
|
+
def initialize(script, timeout: -1)
|
29
30
|
@dll = Pwsh.dll
|
30
31
|
super
|
31
32
|
end
|
32
33
|
|
33
34
|
protected
|
34
35
|
|
35
|
-
def exec(script)
|
36
|
+
def exec(script, timeout: -1)
|
36
37
|
# Note that we need to override the location of the shared dotnet core library
|
37
38
|
# location. With most .net core applications, you can simply publish them as a
|
38
39
|
# "self-contained" application allowing consumers of the application to run them
|