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

Sign up to get free protection for your applications and to get access to all the features.
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