manageiq-smartstate 0.10.0 → 0.11.0

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: d28b6b5963e7251ee987bba32b6136a49cff81afe1fbb5f6129661d3ee9ee129
4
- data.tar.gz: df79d4b387ac5ba5738e9886f49f461fb77d4c80f6e36b310b36e2fc61adc77e
3
+ metadata.gz: aa00c939f18f3a1ae77b29d423f2cc3cc2617f644907e8944a32aae411800644
4
+ data.tar.gz: 02fa7c5abeed6d0a1a9632e2572c43c3d8073de3c97cf02896cb08e9221c9546
5
5
  SHA512:
6
- metadata.gz: 8823628b1fb83a33b03dac60e53567e2228bb1da257d091d8914441aa88835ef43f77314f5954231efe434c7ee059a0484d34e2c6d2346e62c59fbcaf4e91251
7
- data.tar.gz: ceeb25ce2aea2280f71e1d53debe1bf493e8e3fb50de18a070585c4668d301c5292814cf759dbb1c834f202ab650b304a6a3ffba3b795b9ee12c0cb33338757b
6
+ metadata.gz: 3fb5033c357c8972ad28f9febfcc8f2831b41c283203a421c024e8fe0ae9d195f6f77ed3283f0740a5b391522661c5015b0420caa866a1fe0e8ca8795989bc5f
7
+ data.tar.gz: be673cf7018ae2a3dc5199a08799d3a65c0d26f35188e374c8d9bcc1a5b2d4a215e304df6bcaf02960796ac2bb70cfa0e435eb49c92701a174c592e6565a8699
@@ -11,12 +11,14 @@ jobs:
11
11
  strategy:
12
12
  matrix:
13
13
  ruby-version:
14
- - '3.0'
15
14
  - '3.1'
15
+ - '3.3'
16
16
  env:
17
17
  CC_TEST_REPORTER_ID: "${{ secrets.CC_TEST_REPORTER_ID }}"
18
18
  steps:
19
19
  - uses: actions/checkout@v4
20
+ - name: Set up system
21
+ run: bin/before_install
20
22
  - name: Set up Ruby
21
23
  uses: ruby/setup-ruby@v1
22
24
  with:
@@ -26,6 +28,6 @@ jobs:
26
28
  - name: Run tests
27
29
  run: bundle exec rake
28
30
  - name: Report code coverage
29
- if: "${{ github.ref == 'refs/heads/master' && matrix.ruby-version == '3.0' }}"
31
+ if: ${{ github.ref == 'refs/heads/master' && matrix.ruby-version == '3.3' }}
30
32
  continue-on-error: true
31
- uses: paambaati/codeclimate-action@v8
33
+ uses: paambaati/codeclimate-action@v9
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ if [ -n "$CI" ]; then
4
+ echo "== Installing system packages =="
5
+ sudo apt-get update
6
+ sudo apt-get install -y librpm-dev
7
+ echo
8
+ fi
@@ -63,7 +63,7 @@ module MiqSqlite3DB
63
63
  return if @type != "table" || @name[0..6] == "sqlite_" # Names beginning with sqlite_ are internal to engine
64
64
  @columns = []
65
65
  sql = @sql.gsub(/[\n\r]/, "")
66
- re1 = /\s*CREATE\s+TABLE\s+(\w+)\s*\((.*)\)\s*/
66
+ re1 = /\s*CREATE\s+TABLE\s+'?(\w+)'?\s*\((.*)\)\s*/
67
67
  m = re1.match(sql)
68
68
  tname = m[1].to_s.chomp
69
69
  raise "Inconsistent Table Name" if tname != @name
@@ -1,5 +1,5 @@
1
1
  module ManageIQ
2
2
  module Smartstate
3
- VERSION = "0.10.0".freeze
3
+ VERSION = "0.11.0".freeze
4
4
  end
5
5
  end
@@ -6,7 +6,7 @@ require 'metadata/linux/MiqConaryPackages'
6
6
 
7
7
  module MiqLinux
8
8
  class Packages
9
- attr_accessor :fs
9
+ attr_accessor :fs, :packages
10
10
  #
11
11
  # Debian based packageing.
12
12
  #
@@ -155,9 +155,13 @@ module MiqLinux
155
155
  #
156
156
  def procRPM(dbDir)
157
157
  $log.debug "Processing RPM package database"
158
- rpmp = MiqRpmPackages.new(@fs, File.join(dbDir, "Packages"))
159
- rpmp.each { |p| @packages << p }
160
- rpmp.close
158
+
159
+ rpmp = MiqRpmPackages.new(@fs, dbDir)
160
+ begin
161
+ rpmp.each { |p| @packages << p }
162
+ ensure
163
+ rpmp.close
164
+ end
161
165
  end
162
166
 
163
167
  #
@@ -0,0 +1,151 @@
1
+ require 'binary_struct'
2
+ require 'manageiq/gems/pending'
3
+ require 'util/miq-hash_struct'
4
+ require 'db/MiqBdb/MiqBdb'
5
+ require 'miq_unicode'
6
+
7
+ class MiqRpmPackages
8
+ class Bdb < MiqRpmPackages
9
+ using ManageIQ::UnicodeString
10
+
11
+ #
12
+ # The data types we support.
13
+ #
14
+ RPM_INT32_TYPE = 4
15
+ RPM_STRING_TYPE = 6
16
+ RPM_STRING_ARRAY_TYPE = 8
17
+ RPM_I18NSTRING_TYPE = 9
18
+
19
+ #
20
+ # The things we care about.
21
+ #
22
+ NAME = 1000
23
+ VERSION = 1001
24
+ RELEASE = 1002
25
+ SUMMARY = 1004
26
+ DESCRIPTION = 1005
27
+ BUILDTIME = 1006
28
+ INSTALLTIME = 1008
29
+ VENDOR = 1011
30
+ GROUP = 1016
31
+ URL = 1020
32
+ ARCH = 1022
33
+ REQUIRES = 1049
34
+
35
+ TAGIDS = {
36
+ 1000 => "name",
37
+ 1001 => "version",
38
+ 1002 => "release",
39
+ 1004 => "summary",
40
+ 1005 => "description",
41
+ 1006 => "buildtime",
42
+ 1008 => "installtime",
43
+ 1011 => "vendor",
44
+ 1016 => "category", # group
45
+ 1020 => "url",
46
+ 1022 => "arch",
47
+ 1049 => "depends", # requires
48
+ }
49
+
50
+ #
51
+ # Nubbers on disk are in network byte order.
52
+ #
53
+ RPML_HEADER = BinaryStruct.new([
54
+ 'N', 'num_index',
55
+ "N", 'num_data'
56
+ ])
57
+ RPML_HEADER_LEN = RPML_HEADER.size
58
+
59
+ ENTRY_INFO = BinaryStruct.new([
60
+ 'N', 'tag',
61
+ 'N', 'ttype',
62
+ 'N', 'offset',
63
+ 'N', 'count'
64
+ ])
65
+ ENTRY_INFO_LEN = ENTRY_INFO.size
66
+
67
+ def initialize(fs, dbFile)
68
+ @pkgDb = MiqBerkeleyDB::MiqBdb.new(dbFile, fs)
69
+ # Pre-read all pages into the bdb cache, as we will be processing all of them anyway.
70
+ @pkgDb.readAllPages
71
+ end
72
+
73
+ def each
74
+ @pkgDb.each_value do |v|
75
+ next if v.length <= RPML_HEADER_LEN
76
+
77
+ hdr = RPML_HEADER.decode(v)
78
+
79
+ offset = RPML_HEADER_LEN + (ENTRY_INFO_LEN * hdr['num_index'])
80
+ if v.length != offset + hdr['num_data']
81
+ $log.debug "record length = #{v.length}"
82
+ $log.debug "num_index = #{hdr['num_index']}"
83
+ $log.debug "num_data = #{hdr['num_data']}"
84
+ $log.error "Invalid or corrupt RPM database record"
85
+ next
86
+ end
87
+
88
+ data = v[offset, hdr['num_data']]
89
+ pkg = {}
90
+
91
+ eis = ENTRY_INFO.decode(v[RPML_HEADER_LEN..-1], hdr['num_index'])
92
+ eis.each do |ei|
93
+ tag = TAGIDS[ei['tag']]
94
+ next if tag.nil?
95
+ pkg[tag] = getVal(data, ei)
96
+ pkg[tag] = convert(tag, pkg[tag])
97
+ end
98
+ pkg['installed'] = true unless pkg.empty?
99
+ yield(MiqHashStruct.new(pkg))
100
+ end
101
+ end # def each
102
+
103
+ def close
104
+ @pkgDb.close
105
+ end
106
+
107
+ private
108
+
109
+ def time_tag?(tag)
110
+ ['installtime', 'buildtime'].include?(tag)
111
+ end
112
+
113
+ def convert(tag, val)
114
+ time_tag?(tag) ? Time.at(val).utc : val
115
+ end
116
+
117
+ def getVal(data, ei)
118
+ case ei['ttype']
119
+ when RPM_INT32_TYPE then return(getInt32Val(data, ei['offset']))
120
+ when RPM_STRING_TYPE then return(getStringVal(data, ei['offset']))
121
+ when RPM_STRING_ARRAY_TYPE then return(getStringArray(data, ei['offset'], ei['count']).join("\n"))
122
+ when RPM_I18NSTRING_TYPE then return(getStringArray(data, ei['offset'], ei['count']).join("\n").AsciiToUtf8)
123
+ else
124
+ $log.warn "MiqRpmPackages.getVal: unsupported data type: #{ei['ttype']}"
125
+ return("")
126
+ end
127
+ end
128
+
129
+ def getInt32Val(data, offset)
130
+ (data[offset, 4].unpack("N").first)
131
+ end
132
+
133
+ def getStringVal(data, offset)
134
+ eos = data.index(0.chr, offset) - offset
135
+ (data[offset, eos])
136
+ end
137
+
138
+ def getStringArray(data, offset, count)
139
+ ra = []
140
+ cpos = offset
141
+
142
+ count.times do
143
+ s = getStringVal(data, cpos)
144
+ ra << s
145
+ cpos += (s.length + 1)
146
+ end
147
+ ra.uniq!
148
+ (ra)
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,58 @@
1
+ require "tmpdir"
2
+
3
+ class MiqRpmPackages
4
+ class Sqlite < MiqRpmPackages
5
+ def initialize(fs, dbFile)
6
+ require "rpm"
7
+
8
+ @fs = fs
9
+ @db_file_path = dbFile
10
+
11
+ @rpmdb_tempdir = nil
12
+ @rpmdb_path = nil
13
+
14
+ if fs.nil?
15
+ @rpmdb_path = @db_file_path
16
+ else
17
+ @rpmdb_tempdir = Dir.mktmpdir("rpmdb-")
18
+ rpmdb_dir = File.join(@rpmdb_tempdir, RPM['_dbpath'])
19
+ FileUtils.mkdir_p(rpmdb_dir)
20
+
21
+ rpmdb_tempfile = File.open(File.join(rpmdb_dir, "rpmdb.sqlite"), "wb")
22
+ rpmdb_file = fs.fileOpen(@db_file_path, "r")
23
+
24
+ loop do
25
+ chunk = rpmdb_file.read(4_096)
26
+ break if chunk.nil?
27
+
28
+ rpmdb_tempfile.write(chunk)
29
+ end
30
+
31
+ rpmdb_tempfile.close
32
+ rpmdb_file.close
33
+
34
+ @rpmdb_path = rpmdb_tempfile.path
35
+ end
36
+ end
37
+
38
+ def each
39
+ RPM.transaction(@rpmdb_tempdir) do |ts|
40
+ ts.each do |pkg|
41
+ tagids = %w[name version release summary description buildtime vendor arch installtime]
42
+
43
+ result = tagids.each_with_object({}) { |tag, obj| obj[tag] = pkg[tag.to_sym] }
44
+ # These have different tag names for the tagid
45
+ result["category"] = pkg[:group]
46
+ result["depends"] = pkg[:requirename]&.join("\n")
47
+ result["installed"] = true unless result.empty?
48
+
49
+ yield MiqHashStruct.new(result)
50
+ end
51
+ end
52
+ end
53
+
54
+ def close
55
+ FileUtils.rm_rf(@rpmdb_tempdir) if @rpmdb_tempdir
56
+ end
57
+ end
58
+ end
@@ -1,152 +1,29 @@
1
- require 'binary_struct'
2
- require 'manageiq/gems/pending'
3
- require 'util/miq-hash_struct'
4
- require 'db/MiqBdb/MiqBdb'
5
- require 'miq_unicode'
6
1
 
7
- # RPM Specification located at: http://jrpm.sourceforge.net/rpmspec/index.html
8
-
9
- class MiqRpmPackages
10
- using ManageIQ::UnicodeString
11
-
12
- #
13
- # The data types we support.
14
- #
15
- RPM_INT32_TYPE = 4
16
- RPM_STRING_TYPE = 6
17
- RPM_STRING_ARRAY_TYPE = 8
18
- RPM_I18NSTRING_TYPE = 9
19
2
 
20
- #
21
- # The things we care about.
22
- #
23
- NAME = 1000
24
- VERSION = 1001
25
- RELEASE = 1002
26
- SUMMARY = 1004
27
- DESCRIPTION = 1005
28
- BUILDTIME = 1006
29
- INSTALLTIME = 1008
30
- VENDOR = 1011
31
- GROUP = 1016
32
- URL = 1020
33
- ARCH = 1022
34
- REQUIRES = 1049
35
-
36
- TAGIDS = {
37
- 1000 => "name",
38
- 1001 => "version",
39
- 1002 => "release",
40
- 1004 => "summary",
41
- 1005 => "description",
42
- 1006 => "buildtime",
43
- 1008 => "installtime",
44
- 1011 => "vendor",
45
- 1016 => "category", # group
46
- 1020 => "url",
47
- 1022 => "arch",
48
- 1049 => "depends", # requires
49
- }
3
+ # RPM Specification located at: http://jrpm.sourceforge.net/rpmspec/index.html
50
4
 
51
- #
52
- # Nubbers on disk are in network byte order.
53
- #
54
- RPML_HEADER = BinaryStruct.new([
55
- 'N', 'num_index',
56
- "N", 'num_data'
57
- ])
58
- RPML_HEADER_LEN = RPML_HEADER.size
5
+ require_relative "MiqRpmPackages/Bdb"
6
+ require_relative "MiqRpmPackages/Sqlite"
59
7
 
60
- ENTRY_INFO = BinaryStruct.new([
61
- 'N', 'tag',
62
- 'N', 'ttype',
63
- 'N', 'offset',
64
- 'N', 'count'
65
- ])
66
- ENTRY_INFO_LEN = ENTRY_INFO.size
8
+ class MiqRpmPackages
9
+ class << self
10
+ private
67
11
 
68
- def initialize(fs, dbFile)
69
- @pkgDb = MiqBerkeleyDB::MiqBdb.new(dbFile, fs)
70
- # Pre-read all pages into the bdb cache, as we will be processing all of them anyway.
71
- @pkgDb.readAllPages
12
+ alias orig_new new
72
13
  end
73
14
 
74
- def each
75
- @pkgDb.each_value do |v|
76
- next if v.length <= RPML_HEADER_LEN
77
-
78
- hdr = RPML_HEADER.decode(v)
79
-
80
- offset = RPML_HEADER_LEN + (ENTRY_INFO_LEN * hdr['num_index'])
81
- if v.length != offset + hdr['num_data']
82
- $log.debug "record length = #{v.length}"
83
- $log.debug "num_index = #{hdr['num_index']}"
84
- $log.debug "num_data = #{hdr['num_data']}"
85
- $log.error "Invalid or corrupt RPM database record"
86
- next
87
- end
88
-
89
- data = v[offset, hdr['num_data']]
90
- pkg = {}
91
-
92
- eis = ENTRY_INFO.decode(v[RPML_HEADER_LEN..-1], hdr['num_index'])
93
- eis.each do |ei|
94
- tag = TAGIDS[ei['tag']]
95
- next if tag.nil?
96
- pkg[tag] = getVal(data, ei)
97
- pkg[tag] = convert(tag, pkg[tag])
15
+ def self.new(fs, dbDir)
16
+ if self == MiqRpmPackages
17
+ if fs.fileExists?(File.join(dbDir, "Packages"))
18
+ MiqRpmPackages::Bdb.new(fs, File.join(dbDir, "Packages"))
19
+ elsif fs.fileExists?(File.join(dbDir, "rpmdb.sqlite"))
20
+ MiqRpmPackages::Sqlite.new(fs, File.join(dbDir, "rpmdb.sqlite"))
21
+ else
22
+ raise ArgumentError, "Invalid RPM database"
98
23
  end
99
- pkg['installed'] = true unless pkg.empty?
100
- yield(MiqHashStruct.new(pkg))
101
- end
102
- end # def each
103
-
104
- def close
105
- @pkgDb.close
106
- end
107
-
108
- private
109
-
110
- def time_tag?(tag)
111
- ['installtime', 'buildtime'].include?(tag)
112
- end
113
-
114
- def convert(tag, val)
115
- time_tag?(tag) ? Time.at(val).utc : val
116
- end
117
-
118
- def getVal(data, ei)
119
- case ei['ttype']
120
- when RPM_INT32_TYPE then return(getInt32Val(data, ei['offset']))
121
- when RPM_STRING_TYPE then return(getStringVal(data, ei['offset']))
122
- when RPM_STRING_ARRAY_TYPE then return(getStringArray(data, ei['offset'], ei['count']).join("\n"))
123
- when RPM_I18NSTRING_TYPE then return(getStringArray(data, ei['offset'], ei['count']).join("\n").AsciiToUtf8)
124
24
  else
125
- $log.warn "MiqRpmPackages.getVal: unsupported data type: #{ei['ttype']}"
126
- return("")
127
- end
128
- end
129
-
130
- def getInt32Val(data, offset)
131
- (data[offset, 4].unpack("N").first)
132
- end
133
-
134
- def getStringVal(data, offset)
135
- eos = data.index(0.chr, offset) - offset
136
- (data[offset, eos])
137
- end
138
-
139
- def getStringArray(data, offset, count)
140
- ra = []
141
- cpos = offset
142
-
143
- count.times do
144
- s = getStringVal(data, cpos)
145
- ra << s
146
- cpos += (s.length + 1)
25
+ orig_new(fs, dbDir)
147
26
  end
148
- ra.uniq!
149
- (ra)
150
27
  end
151
28
  end # class MiqRPM
152
29
 
@@ -56,12 +56,12 @@ module FindClassMethods
56
56
 
57
57
  while (file = paths.shift)
58
58
  depth = depths.shift
59
- yield file.dup.taint
59
+ yield file.dup
60
60
  next if max_depth && depth + 1 > max_depth
61
61
 
62
62
  get_dir_entries(file).each do |f|
63
63
  f = File.join(file, f)
64
- paths.unshift f.untaint
64
+ paths.unshift f
65
65
  depths.unshift depth + 1
66
66
  end
67
67
  end
data/lib/miq_tempfile.rb CHANGED
@@ -5,11 +5,11 @@ class MiqTempfile < DelegateClass(Tempfile)
5
5
  # TODO: share this definition with appliance console code.
6
6
  MIQ_TMP_DIR = '/var/www/miq_tmp'.freeze
7
7
 
8
- def initialize(basename, *options)
8
+ def initialize(basename, **options)
9
9
  if File.directory?(MIQ_TMP_DIR)
10
- super(Tempfile.new(basename, MIQ_TMP_DIR, *options))
10
+ super(Tempfile.new(basename, MIQ_TMP_DIR, **options))
11
11
  else
12
- super(Tempfile.new(basename, *options))
12
+ super(Tempfile.new(basename, **options))
13
13
  end
14
14
  end
15
15
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "activesupport"
23
+ spec.add_dependency "activesupport", ">= 7.0.8", "<8.0"
24
24
  spec.add_dependency "awesome_spawn", "~> 1.5"
25
25
  spec.add_dependency "azure-armrest", "~> 0.9"
26
26
  spec.add_dependency "binary_struct", "~> 2.1"
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency "linux_block_device", "~>0.2.1"
29
29
  spec.add_dependency "manageiq-password", "< 2"
30
30
  spec.add_dependency "memory_buffer", ">=0.1.0"
31
+ spec.add_dependency "rpm2", "~>0.1.0"
31
32
  spec.add_dependency "rufus-lru", "~>1.0.3"
32
33
  spec.add_dependency "sys-uname", "~>1.2.1"
33
34
  spec.add_dependency "uuidtools", "~>2.1"
data/renovate.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
- "extends": [
4
- "config:recommended"
5
- ]
3
+ "inheritConfig": true,
4
+ "inheritConfigRepoName": "manageiq/renovate-config"
6
5
  }
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manageiq-smartstate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ManageIQ Developers
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-06-20 00:00:00.000000000 Z
10
+ date: 2025-02-04 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -16,14 +15,20 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '0'
18
+ version: 7.0.8
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '8.0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
26
  - - ">="
25
27
  - !ruby/object:Gem::Version
26
- version: '0'
28
+ version: 7.0.8
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '8.0'
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: awesome_spawn
29
34
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +127,20 @@ dependencies:
122
127
  - - ">="
123
128
  - !ruby/object:Gem::Version
124
129
  version: 0.1.0
130
+ - !ruby/object:Gem::Dependency
131
+ name: rpm2
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: 0.1.0
137
+ type: :runtime
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: 0.1.0
125
144
  - !ruby/object:Gem::Dependency
126
145
  name: rufus-lru
127
146
  requirement: !ruby/object:Gem::Requirement
@@ -305,7 +324,6 @@ dependencies:
305
324
  - !ruby/object:Gem::Version
306
325
  version: 2.3.1
307
326
  description: ManageIQ SmartState Analysis
308
- email:
309
327
  executables: []
310
328
  extensions: []
311
329
  extra_rdoc_files: []
@@ -323,6 +341,7 @@ files:
323
341
  - LICENSE.txt
324
342
  - README.md
325
343
  - Rakefile
344
+ - bin/before_install
326
345
  - bin/console
327
346
  - bin/setup
328
347
  - lib/MiqContainerGroup/MiqContainerGroup.rb
@@ -553,6 +572,8 @@ files:
553
572
  - lib/metadata/linux/LinuxUtils.rb
554
573
  - lib/metadata/linux/MiqConaryPackages.rb
555
574
  - lib/metadata/linux/MiqRpmPackages.rb
575
+ - lib/metadata/linux/MiqRpmPackages/Bdb.rb
576
+ - lib/metadata/linux/MiqRpmPackages/Sqlite.rb
556
577
  - lib/metadata/util/event_log_filter.rb
557
578
  - lib/metadata/util/find_class_methods.rb
558
579
  - lib/metadata/util/md5deep.rb
@@ -579,7 +600,6 @@ homepage: https://github.com/ManageIQ/manageiq-smartstate
579
600
  licenses:
580
601
  - Apache-2.0
581
602
  metadata: {}
582
- post_install_message:
583
603
  rdoc_options: []
584
604
  require_paths:
585
605
  - lib
@@ -594,8 +614,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
594
614
  - !ruby/object:Gem::Version
595
615
  version: '0'
596
616
  requirements: []
597
- rubygems_version: 3.4.20
598
- signing_key:
617
+ rubygems_version: 3.6.3
599
618
  specification_version: 4
600
619
  summary: ManageIQ SmartState Analysis
601
620
  test_files: []