chef 17.10.95-universal-mingw32 → 17.10.114-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2cef379375db57951a202d81e9ea1292682d53dc37a798c7bb1d3112a4da5f24
4
- data.tar.gz: 3f8b9c412863cf00b7c1c570b577580c5bd2533de6e0d5a3ad0c85e5888907db
3
+ metadata.gz: 0c7be97bfc509a17ef34e5db14410f0ef6776e5d0f7c2b318b5f34f8807b336e
4
+ data.tar.gz: a89b9d196345735f2541f59f1c814c2029207447afb27c52b619ecdcca1b2e62
5
5
  SHA512:
6
- metadata.gz: fca6c017424272808c6aa5742be4dc51a908880579323cd00f8969b74698110d8761415ba7f0fa2c939d8f3ee06181d0c1432b0fd9e8abbcc02b273f7ecc3df6
7
- data.tar.gz: d5f4dca147e35a6440f5ea461e910caab7be6680e5d3de52031a5fb785679361ce2a7971ff14126478425f7b1d5848c3aac187605a11f15e7a19a8aa9a3ca55c
6
+ metadata.gz: 5f6857ffc3db30aefad7f17ce04f7540f38ac2bc8dbe505da89e9b9d0a8677c5dedec6876782483de8024db3fcf43ae79619f2a280333f479ee00791a38f6d6c
7
+ data.tar.gz: 6f5d26697302bf28d520f042f7dfaf044c0e8bea86d267da4180078f544d29dd48d66d0784dfc9586814c59b0a2b449eb20c1b5794ecd8dc7160a6d304da020b
data/Gemfile CHANGED
@@ -17,17 +17,18 @@ end
17
17
 
18
18
  gem "cheffish", "~> 17.0.0"
19
19
 
20
+ gem "ast", "~> 2.4.2"
21
+ gem "rubocop-ast", ">= 1.30.0"
22
+
20
23
  group(:omnibus_package) do
21
24
  gem "appbundler"
22
25
  gem "rb-readline"
23
- gem "inspec-core-bin", ">= 4.24" # need to provide the binaries for inspec
26
+ gem "inspec-core-bin", "~> 5.22.36" # need to provide the binaries for inspec
24
27
  gem "chef-vault"
25
28
  end
26
29
 
27
30
  group(:omnibus_package, :pry) do
28
- # Locked because pry-byebug is broken with 13+.
29
- # some work is ongoing? https://github.com/deivid-rodriguez/pry-byebug/issues/343
30
- gem "pry", "= 0.13.0"
31
+ gem "pry", ">= 0.14.1"
31
32
  # byebug does not install on freebsd on ruby 3.0
32
33
  gem "pry-byebug" unless RUBY_PLATFORM.match?(/freebsd/i)
33
34
  gem "pry-stack_explorer"
data/chef.gemspec CHANGED
@@ -36,10 +36,10 @@ Gem::Specification.new do |s|
36
36
  s.add_dependency "mixlib-shellout", ">= 3.1.1", "< 4.0"
37
37
  s.add_dependency "mixlib-archive", ">= 0.4", "< 2.0"
38
38
  s.add_dependency "ohai", "~> 17.0"
39
- s.add_dependency "inspec-core", ">= 4.23"
39
+ s.add_dependency "inspec-core", "~> 5.22.36"
40
40
 
41
- s.add_dependency "ffi", "~> 1.15.0"
42
- s.add_dependency "ffi-yajl", "~> 2.2"
41
+ s.add_dependency "ffi", "~> 1.15.5"
42
+ s.add_dependency "ffi-yajl", ">= 2.2", "< 4.0"
43
43
  s.add_dependency "net-sftp", ">= 2.1.2", "< 5.0" # remote_file resource
44
44
  s.add_dependency "erubis", "~> 2.7" # template resource / cookbook syntax check
45
45
  s.add_dependency "diff-lcs", ">= 1.2.4", "!= 1.4.0", "< 1.6.0" # 1.4 breaks output. Used in lib/chef/util/diff
data/lib/chef/client.rb CHANGED
@@ -330,9 +330,10 @@ class Chef
330
330
  new_date = eol_override
331
331
 
332
332
  # We make a release every year so take the version you're on + 2006 and you get
333
- # the year it goes EOL
334
- eol_year = 2006 + Gem::Version.new(Chef::VERSION).segments.first
335
- cut_off_date = !!new_date ? Time.parse(new_date) : Time.new(eol_year, 5, 01)
333
+ # the year it goes EOL. 1/8/2024 - EOL for Chef-17 is now November 1, 2024
334
+ # eol_year = 2006 + Gem::Version.new(Chef::VERSION).segments.first
335
+ eol_year = "2024"
336
+ cut_off_date = !!new_date ? Time.parse(new_date) : Time.new(eol_year, 11, 30)
336
337
 
337
338
  return if Time.now < cut_off_date
338
339
 
@@ -57,18 +57,28 @@ class Chef
57
57
  @homebrew_owner_username
58
58
  end
59
59
 
60
+ def homebrew_bin_path(brew_bin_path = nil)
61
+ if brew_bin_path && ::File.exist?(brew_bin_path)
62
+ brew_bin_path
63
+ else
64
+ [which("brew"), "/opt/homebrew/bin/brew", "/usr/local/bin/brew", "/home/linuxbrew/.linuxbrew/bin/brew"].uniq.select do |x|
65
+ next if x == false
66
+
67
+ ::File.exist?(x) && ::File.executable?(x)
68
+ end.first || nil
69
+ end
70
+ end
71
+
60
72
  private
61
73
 
62
74
  def calculate_owner
63
- default_brew_path = "/usr/local/bin/brew"
64
- if ::File.exist?(default_brew_path)
75
+ brew_path = homebrew_bin_path
76
+ if brew_path
65
77
  # By default, this follows symlinks which is what we want
66
- owner = ::File.stat(default_brew_path).uid
67
- elsif (brew_path = shell_out("which brew").stdout.strip) && !brew_path.empty?
68
78
  owner = ::File.stat(brew_path).uid
69
79
  else
70
80
  raise Chef::Exceptions::CannotDetermineHomebrewOwner,
71
- 'Could not find the "brew" executable in /usr/local/bin or anywhere on the path.'
81
+ 'Could not find the "brew" executable anywhere on the path.'
72
82
  end
73
83
 
74
84
  Chef::Log.debug "Found Homebrew owner #{Etc.getpwuid(owner).name}; executing `brew` commands as them"
@@ -93,6 +93,11 @@ class Chef
93
93
  end
94
94
  current_version ||= latest_version if is_installed
95
95
  current_version
96
+ rescue Mixlib::ShellOut::ShellCommandFailed => e
97
+ # zypper returns a '104' code if info is called for a non-existent package
98
+ return nil if e.message =~ /'104'/
99
+
100
+ raise
96
101
  end
97
102
 
98
103
  def resolve_available_version(package_name, new_version)
@@ -74,6 +74,7 @@ class Chef::Provider::Service::Windows < Chef::Provider::Service
74
74
  current_resource.run_as_user(config_info.service_start_name) if config_info.service_start_name
75
75
  current_resource.display_name(config_info.display_name) if config_info.display_name
76
76
  current_resource.delayed_start(current_delayed_start) if current_delayed_start
77
+ current_resource.description(config_info.description) if new_resource.description
77
78
  end
78
79
 
79
80
  current_resource
@@ -177,7 +177,7 @@ class Chef
177
177
  }
178
178
 
179
179
  unit["Service"]["ConditionACPower"] = "true" unless new_resource.run_on_battery
180
- unit["Service"]["CPUQuota"] = new_resource.cpu_quota if new_resource.cpu_quota
180
+ unit["Service"]["CPUQuota"] = "#{new_resource.cpu_quota}%" if new_resource.cpu_quota
181
181
  unit["Service"]["Environment"] = new_resource.environment.collect { |k, v| "\"#{k}=#{v}\"" } unless new_resource.environment.empty?
182
182
  unit
183
183
  end
@@ -46,25 +46,24 @@ class Chef
46
46
  default: true
47
47
 
48
48
  property :homebrew_path, String,
49
- description: "The path to the homebrew binary.",
50
- default: "/usr/local/bin/brew"
49
+ description: "The path to the homebrew binary."
51
50
 
52
51
  property :owner, [String, Integer],
53
52
  description: "The owner of the Homebrew installation.",
54
53
  default: lazy { find_homebrew_username },
55
- default_description: "Calculated default username"\
54
+ default_description: "Calculated default username"
56
55
 
57
56
  action :install, description: "Install an application that is packaged as a Homebrew cask." do
58
57
  if new_resource.install_cask
59
58
  homebrew_tap "homebrew/cask" do
60
- homebrew_path new_resource.homebrew_path
59
+ homebrew_path homebrew_bin_path(new_resource.homebrew_path)
61
60
  owner new_resource.owner
62
61
  end
63
62
  end
64
63
 
65
64
  unless casked?
66
65
  converge_by("install cask #{new_resource.cask_name} #{new_resource.options}") do
67
- shell_out!("#{new_resource.homebrew_path} install --cask #{new_resource.cask_name} #{new_resource.options}",
66
+ shell_out!("#{homebrew_bin_path(new_resource.homebrew_path)} install --cask #{new_resource.cask_name} #{new_resource.options}",
68
67
  user: new_resource.owner,
69
68
  env: { "HOME" => ::Dir.home(new_resource.owner), "USER" => new_resource.owner },
70
69
  cwd: ::Dir.home(new_resource.owner))
@@ -75,14 +74,14 @@ class Chef
75
74
  action :remove, description: "Remove an application that is packaged as a Homebrew cask." do
76
75
  if new_resource.install_cask
77
76
  homebrew_tap "homebrew/cask" do
78
- homebrew_path new_resource.homebrew_path
77
+ homebrew_path homebrew_bin_path(new_resource.homebrew_path)
79
78
  owner new_resource.owner
80
79
  end
81
80
  end
82
81
 
83
82
  if casked?
84
83
  converge_by("uninstall cask #{new_resource.cask_name}") do
85
- shell_out!("#{new_resource.homebrew_path} uninstall --cask #{new_resource.cask_name}",
84
+ shell_out!("#{homebrew_bin_path(new_resource.homebrew_path)} uninstall --cask #{new_resource.cask_name}",
86
85
  user: new_resource.owner,
87
86
  env: { "HOME" => ::Dir.home(new_resource.owner), "USER" => new_resource.owner },
88
87
  cwd: ::Dir.home(new_resource.owner))
@@ -100,7 +99,7 @@ class Chef
100
99
  # @return [Boolean]
101
100
  def casked?
102
101
  unscoped_name = new_resource.cask_name.split("/").last
103
- shell_out!("#{new_resource.homebrew_path} list --cask 2>/dev/null",
102
+ shell_out!("#{homebrew_bin_path(new_resource.homebrew_path)} list --cask 2>/dev/null",
104
103
  user: new_resource.owner,
105
104
  env: { "HOME" => ::Dir.home(new_resource.owner), "USER" => new_resource.owner },
106
105
  cwd: ::Dir.home(new_resource.owner)).stdout.split.include?(unscoped_name)
@@ -62,7 +62,7 @@ class Chef
62
62
  DOC
63
63
 
64
64
  property :homebrew_user, [ String, Integer ],
65
- description: "The name or uid of the Homebrew owner to be used by #{ChefUtils::Dist::Infra::PRODUCT} when executing a command.\n\n#{ChefUtils::Dist::Infra::PRODUCT}, by default, will attempt to execute a Homebrew command as the owner of the `/usr/local/bin/brew` executable. If that executable does not exist, #{ChefUtils::Dist::Infra::PRODUCT} will attempt to find the user by executing `which brew`. If that executable cannot be found, #{ChefUtils::Dist::Infra::PRODUCT} will print an error message: `Could not find the 'brew' executable in /usr/local/bin or anywhere on the path.`.\n\nSet this property to specify the Homebrew owner for situations where Chef Infra Client cannot automatically detect the correct owner.'"
65
+ description: "The name or uid of the Homebrew owner to be used by #{ChefUtils::Dist::Infra::PRODUCT} when executing a command.\n\n#{ChefUtils::Dist::Infra::PRODUCT}, by default, will attempt to execute a Homebrew command as the owner of the `/usr/local/bin/brew` executable on x86_64 machines or `/opt/homebrew/bin/brew` executable on arm64 machines. If that executable does not exist, #{ChefUtils::Dist::Infra::PRODUCT} will attempt to find the user by executing `which brew`. If that executable cannot be found, #{ChefUtils::Dist::Infra::PRODUCT} will print an error message: `Could not find the 'brew' executable in /usr/local/bin, /opt/homebrew/bin, or anywhere on the path.`.\n\nSet this property to specify the Homebrew owner for situations where Chef Infra Client cannot automatically detect the correct owner.'"
66
66
 
67
67
  end
68
68
  end
@@ -42,8 +42,7 @@ class Chef
42
42
  description: "The URL of the tap."
43
43
 
44
44
  property :homebrew_path, String,
45
- description: "The path to the Homebrew binary.",
46
- default: "/usr/local/bin/brew"
45
+ description: "The path to the Homebrew binary."
47
46
 
48
47
  property :owner, String,
49
48
  description: "The owner of the Homebrew installation.",
@@ -53,7 +52,7 @@ class Chef
53
52
  action :tap, description: "Add a Homebrew tap." do
54
53
  unless tapped?(new_resource.tap_name)
55
54
  converge_by("tap #{new_resource.tap_name}") do
56
- shell_out!("#{new_resource.homebrew_path} tap #{new_resource.tap_name} #{new_resource.url || ""}",
55
+ shell_out!("#{homebrew_bin_path(new_resource.homebrew_path)} tap #{new_resource.tap_name} #{new_resource.url || ""}",
57
56
  user: new_resource.owner,
58
57
  env: { "HOME" => ::Dir.home(new_resource.owner), "USER" => new_resource.owner },
59
58
  cwd: ::Dir.home(new_resource.owner))
@@ -64,7 +63,7 @@ class Chef
64
63
  action :untap, description: "Remove a Homebrew tap." do
65
64
  if tapped?(new_resource.tap_name)
66
65
  converge_by("untap #{new_resource.tap_name}") do
67
- shell_out!("#{new_resource.homebrew_path} untap #{new_resource.tap_name}",
66
+ shell_out!("#{homebrew_bin_path(new_resource.homebrew_path)} untap #{new_resource.tap_name}",
68
67
  user: new_resource.owner,
69
68
  env: { "HOME" => ::Dir.home(new_resource.owner), "USER" => new_resource.owner },
70
69
  cwd: ::Dir.home(new_resource.owner))
@@ -76,8 +75,9 @@ class Chef
76
75
  #
77
76
  # @return [Boolean]
78
77
  def tapped?(name)
78
+ base_path = ["#{::File.dirname(which("brew"))}/../homebrew", "#{::File.dirname(which("brew"))}/../Homebrew", "/opt/homebrew", "/usr/local/Homebrew", "/home/linuxbrew/.linuxbrew"].uniq.select { |x| Dir.exist?(x) }.first
79
79
  tap_dir = name.gsub("/", "/homebrew-")
80
- ::File.directory?("/usr/local/Homebrew/Library/Taps/#{tap_dir}")
80
+ ::File.directory?("#{base_path}/Library/Taps/#{tap_dir}")
81
81
  end
82
82
  end
83
83
  end
data/lib/chef/version.rb CHANGED
@@ -23,7 +23,7 @@ require_relative "version_string"
23
23
 
24
24
  class Chef
25
25
  CHEF_ROOT = File.expand_path("..", __dir__)
26
- VERSION = Chef::VersionString.new("17.10.95")
26
+ VERSION = Chef::VersionString.new("17.10.114")
27
27
  end
28
28
 
29
29
  #
@@ -177,6 +177,15 @@ describe Chef::Resource::ZypperPackage, :requires_root, :suse_only do
177
177
  expect(zypper_package.updated_by_last_action?).to be true
178
178
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
179
179
  end
180
+
181
+ context "Package doesn't exist" do
182
+ let(:package_name) { "nonexistent_repo" }
183
+ it "does nothing if the package is not installed" do
184
+ zypper_package.run_action(:remove)
185
+ expect(zypper_package.updated_by_last_action?).to be false
186
+ end
187
+
188
+ end
180
189
  end
181
190
 
182
191
  context "with no available version" do
@@ -247,6 +256,7 @@ describe Chef::Resource::ZypperPackage, :requires_root, :suse_only do
247
256
  expect(shell_out("zypper locks | grep chef_rpm_provides").stdout.chomp).not_to match("chef_rpm_provides")
248
257
  end
249
258
  end
259
+
250
260
  def remove_package
251
261
  pkg_to_remove = Chef::Resource::ZypperPackage.new(package_name, run_context)
252
262
  pkg_to_remove.run_action(:remove)
@@ -313,9 +313,9 @@ describe Chef::Client do
313
313
  stub_const("Chef::VERSION", 15)
314
314
  # added a call to client because Time.now gets invoked multiple times during instantiation. Don't mock Time until after client initialized
315
315
  client
316
- expect(Time).to receive(:now).and_return(Time.new(2021, 5, 1, 5))
316
+ expect(Time).to receive(:now).and_return(Time.new(2024, 12, 1, 5))
317
317
  allow(client).to receive(:eol_override).and_return(false)
318
- expect(logger).to receive(:warn).with("This release of Chef Infra Client became end of life (EOL) on May 01, 2021. Please update to a supported release to receive new features, bug fixes, and security updates.")
318
+ expect(logger).to receive(:warn).with("This release of Chef Infra Client became end of life (EOL) on Nov 30, 2024. Please update to a supported release to receive new features, bug fixes, and security updates.")
319
319
  client.warn_if_eol
320
320
  end
321
321
 
@@ -47,6 +47,8 @@ describe Chef::Mixin::HomebrewUser do
47
47
  let(:user) { nil }
48
48
  let(:brew_owner) { 2001 }
49
49
  let(:default_brew_path) { "/usr/local/bin/brew" }
50
+ let(:default_brew_path_arm) { "/opt/homebrew/bin/brew" }
51
+ let(:default_brew_path_linux) { "/home/linuxbrew/.linuxbrew/bin/brew" }
50
52
  let(:stat_double) do
51
53
  d = double
52
54
  expect(d).to receive(:uid).and_return(brew_owner)
@@ -59,16 +61,38 @@ describe Chef::Mixin::HomebrewUser do
59
61
  expect(Etc).to receive(:getpwuid).with(brew_owner).and_return(OpenStruct.new(name: "name"))
60
62
  end
61
63
 
62
- it "returns the owner of the brew executable when it is at a default location" do
63
- expect(File).to receive(:exist?).with(default_brew_path).and_return(true)
64
- expect(File).to receive(:stat).with(default_brew_path).and_return(stat_double)
64
+ def false_unless_specific_value(object, method, value)
65
+ allow(object).to receive(method).and_return(false)
66
+ allow(object).to receive(method).with(value).and_return(true)
67
+ end
68
+
69
+ it "returns the owner of the brew executable when it is at a default location for x86_64 machines" do
70
+ false_unless_specific_value(File, :exist?, default_brew_path)
71
+ false_unless_specific_value(File, :executable?, default_brew_path)
72
+ allow(File).to receive(:stat).with(default_brew_path).and_return(stat_double)
73
+ expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
74
+ end
75
+
76
+ it "returns the owner of the brew executable when it is at a default location for arm machines" do
77
+ false_unless_specific_value(File, :exist?, default_brew_path_arm)
78
+ false_unless_specific_value(File, :executable?, default_brew_path_arm)
79
+ allow(File).to receive(:stat).with(default_brew_path_arm).and_return(stat_double)
80
+ expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
81
+ end
82
+
83
+ it "returns the owner of the brew executable when it is at a default location for linux machines" do
84
+ false_unless_specific_value(File, :exist?, default_brew_path_linux)
85
+ false_unless_specific_value(File, :executable?, default_brew_path_linux)
86
+ allow(File).to receive(:stat).with(default_brew_path_linux).and_return(stat_double)
65
87
  expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
66
88
  end
67
89
 
68
90
  it "returns the owner of the brew executable when it is not at a default location" do
69
- expect(File).to receive(:exist?).with(default_brew_path).and_return(false)
91
+ allow_any_instance_of(ExampleHomebrewUser).to receive(:which).and_return("/foo")
92
+ false_unless_specific_value(File, :exist?, "/foo")
93
+ false_unless_specific_value(File, :executable?, "/foo")
70
94
  allow(homebrew_user).to receive_message_chain(:shell_out, :stdout, :strip).and_return("/foo")
71
- expect(File).to receive(:stat).with("/foo").and_return(stat_double)
95
+ allow(File).to receive(:stat).with("/foo").and_return(stat_double)
72
96
  expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
73
97
  end
74
98
 
@@ -78,8 +102,7 @@ describe Chef::Mixin::HomebrewUser do
78
102
  describe "when the homebrew user is not provided" do
79
103
 
80
104
  it "raises an error if no executable is found" do
81
- expect(File).to receive(:exist?).with(default_brew_path).and_return(false)
82
- allow(homebrew_user).to receive_message_chain(:shell_out, :stdout, :strip).and_return("")
105
+ expect(File).to receive(:exist?).and_return(nil).at_least(:once)
83
106
  expect { homebrew_user.find_homebrew_uid(user) }.to raise_error(Chef::Exceptions::CannotDetermineHomebrewOwner)
84
107
  end
85
108
 
@@ -102,7 +102,7 @@ describe Chef::Resource::ChefClientSystemdTimer do
102
102
 
103
103
  it "sets CPUQuota if cpu_quota property is set" do
104
104
  resource.cpu_quota 50
105
- expect(provider.service_content["Service"]["CPUQuota"]).to eq(50)
105
+ expect(provider.service_content["Service"]["CPUQuota"]).to eq("50%")
106
106
  end
107
107
  end
108
108
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef
3
3
  version: !ruby/object:Gem::Version
4
- version: 17.10.95
4
+ version: 17.10.114
5
5
  platform: universal-mingw32
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-01 00:00:00.000000000 Z
11
+ date: 2024-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-config
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 17.10.95
19
+ version: 17.10.114
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 17.10.95
26
+ version: 17.10.114
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: chef-utils
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 17.10.95
33
+ version: 17.10.114
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 17.10.95
40
+ version: 17.10.114
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: train-core
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -204,44 +204,50 @@ dependencies:
204
204
  name: inspec-core
205
205
  requirement: !ruby/object:Gem::Requirement
206
206
  requirements:
207
- - - ">="
207
+ - - "~>"
208
208
  - !ruby/object:Gem::Version
209
- version: '4.23'
209
+ version: 5.22.36
210
210
  type: :runtime
211
211
  prerelease: false
212
212
  version_requirements: !ruby/object:Gem::Requirement
213
213
  requirements:
214
- - - ">="
214
+ - - "~>"
215
215
  - !ruby/object:Gem::Version
216
- version: '4.23'
216
+ version: 5.22.36
217
217
  - !ruby/object:Gem::Dependency
218
218
  name: ffi
219
219
  requirement: !ruby/object:Gem::Requirement
220
220
  requirements:
221
221
  - - "~>"
222
222
  - !ruby/object:Gem::Version
223
- version: 1.15.0
223
+ version: 1.15.5
224
224
  type: :runtime
225
225
  prerelease: false
226
226
  version_requirements: !ruby/object:Gem::Requirement
227
227
  requirements:
228
228
  - - "~>"
229
229
  - !ruby/object:Gem::Version
230
- version: 1.15.0
230
+ version: 1.15.5
231
231
  - !ruby/object:Gem::Dependency
232
232
  name: ffi-yajl
233
233
  requirement: !ruby/object:Gem::Requirement
234
234
  requirements:
235
- - - "~>"
235
+ - - ">="
236
236
  - !ruby/object:Gem::Version
237
237
  version: '2.2'
238
+ - - "<"
239
+ - !ruby/object:Gem::Version
240
+ version: '4.0'
238
241
  type: :runtime
239
242
  prerelease: false
240
243
  version_requirements: !ruby/object:Gem::Requirement
241
244
  requirements:
242
- - - "~>"
245
+ - - ">="
243
246
  - !ruby/object:Gem::Version
244
247
  version: '2.2'
248
+ - - "<"
249
+ - !ruby/object:Gem::Version
250
+ version: '4.0'
245
251
  - !ruby/object:Gem::Dependency
246
252
  name: net-sftp
247
253
  requirement: !ruby/object:Gem::Requirement
@@ -3181,7 +3187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
3181
3187
  - !ruby/object:Gem::Version
3182
3188
  version: '0'
3183
3189
  requirements: []
3184
- rubygems_version: 3.2.33
3190
+ rubygems_version: 3.2.32
3185
3191
  signing_key:
3186
3192
  specification_version: 4
3187
3193
  summary: A systems integration framework, built to bring the benefits of configuration