chef 17.10.95 → 17.10.114

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: cbd02b60802f0874cef53b37a8b8d5996600fdcb6c53c29263fe454b18bf0cb6
4
- data.tar.gz: 70e96d302b07784e0b2fe4c93141f72510169f5a5456f6084d6d3f51fece3a33
3
+ metadata.gz: b9a67538138af0d5f0ffb36bab93c72df9698f2d6e01da4eebb2a1892b445329
4
+ data.tar.gz: 10055191565a3bbfa6eab934cd2a3a55094a5e7f5736c382de854b6d67478124
5
5
  SHA512:
6
- metadata.gz: f61a95453d1b50956c6c0b72552b3c8581b1707606589375352a0bdbbde54f7504c9a37d635b4ac2b2299ed33e75dfdec535ca2802b5be1e60a4ad1d33bf35b0
7
- data.tar.gz: 0c8fbbd7634626b2178516af1df72274d352f789097b5fde508b38d00e98860c6c359f391a4c2bc2573ff257b63a7d5833937ef3e0c9b1a1ea1e709504093c41
6
+ metadata.gz: 7685875558fbdbdac49f1e4f10c5c5522b0bbe2ae08568493f677d3ce0286299b847f3ae64a6b79e4cfdcae5b1548966314ac09ad68e44289b831137db72740c
7
+ data.tar.gz: 3859034bb19e28b6dee0eb1814213c7027057b567aba33eb728b77b4a1611853bbfb5bf312828f54049236b462d35f5d10a5ba175ad7cda4c54045639a85b6a8
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: ruby
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-18 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
@@ -2388,7 +2394,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2388
2394
  - !ruby/object:Gem::Version
2389
2395
  version: '0'
2390
2396
  requirements: []
2391
- rubygems_version: 3.2.33
2397
+ rubygems_version: 3.2.32
2392
2398
  signing_key:
2393
2399
  specification_version: 4
2394
2400
  summary: A systems integration framework, built to bring the benefits of configuration