manageiq-smartstate 0.5.9 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +34 -35
  3. data/.rubocop.yml +3 -3
  4. data/.rubocop_cc.yml +3 -4
  5. data/.rubocop_local.yml +1 -1
  6. data/.travis.yml +2 -3
  7. data/lib/MiqVm/MiqRhevmVm.rb +1 -1
  8. data/lib/MiqVm/MiqVm.rb +0 -140
  9. data/lib/OpenStackExtract/MiqOpenStackVm/MiqOpenStackImage.rb +0 -1
  10. data/lib/OpenStackExtract/MiqOpenStackVm/MiqOpenStackInstance.rb +0 -1
  11. data/lib/VolumeManager/MiqLdm.rb +1 -1
  12. data/lib/db/MiqSqlite/MiqSqlite3Cell.rb +2 -3
  13. data/lib/disk/modules/MSCommon.rb +3 -1
  14. data/lib/disk/modules/VhdxDisk.rb +3 -1
  15. data/lib/fs/MiqMountManager.rb +2 -29
  16. data/lib/fs/VimDatastoreFS/VimDatastoreFS.rb +1 -6
  17. data/lib/fs/ext3/superblock.rb +1 -1
  18. data/lib/fs/ext4/superblock.rb +2 -2
  19. data/lib/fs/fat32/directory_entry.rb +60 -60
  20. data/lib/fs/iso9660/boot_sector.rb +3 -2
  21. data/lib/fs/iso9660/directory_entry.rb +3 -2
  22. data/lib/fs/iso9660/rock_ridge.rb +3 -1
  23. data/lib/fs/modules/LinuxMount.rb +3 -3
  24. data/lib/fs/ntfs/attrib_attribute_list.rb +3 -1
  25. data/lib/fs/ntfs/attrib_file_name.rb +3 -1
  26. data/lib/fs/ntfs/attrib_header.rb +3 -1
  27. data/lib/fs/ntfs/attrib_index_root.rb +3 -1
  28. data/lib/fs/ntfs/attrib_object_id.rb +1 -1
  29. data/lib/fs/ntfs/attrib_volume_name.rb +3 -1
  30. data/lib/fs/xfs/allocation_group.rb +1 -1
  31. data/lib/fs/xfs/bmap_btree_block.rb +1 -1
  32. data/lib/fs/xfs/superblock.rb +1 -1
  33. data/lib/manageiq/smartstate/util.rb +18 -0
  34. data/lib/manageiq/smartstate/version.rb +1 -1
  35. data/lib/metadata/MIQExtract/MIQExtract.rb +2 -3
  36. data/lib/metadata/VmConfig/GetNativeCfg.rb +2 -4
  37. data/lib/metadata/VmConfig/VmConfig.rb +7 -5
  38. data/lib/metadata/VmConfig/cfgConfig.rb +4 -0
  39. data/lib/metadata/VmConfig/xmlConfig.rb +3 -3
  40. data/lib/metadata/linux/MiqRpmPackages.rb +3 -1
  41. data/lib/metadata/util/md5deep.rb +4 -2
  42. data/lib/metadata/util/win32/Win32Accounts.rb +3 -0
  43. data/lib/metadata/util/win32/Win32EventLog.rb +5 -3
  44. data/lib/metadata/util/win32/Win32Software.rb +5 -3
  45. data/lib/metadata/util/win32/decode.rb +0 -0
  46. data/lib/metadata/util/win32/fleece_hives.rb +0 -8
  47. data/lib/metadata/util/win32/ms-registry.rb +3 -1
  48. data/lib/metadata/util/win32/peheader.rb +7 -8
  49. data/lib/miq_unicode.rb +45 -0
  50. data/manageiq-smartstate.gemspec +9 -7
  51. metadata +76 -33
  52. data/lib/fs/MetakitFS/MetakitFS.rb +0 -530
@@ -1,7 +1,9 @@
1
1
  require 'binary_struct'
2
- require 'util/miq-unicode'
2
+ require 'miq_unicode'
3
3
 
4
4
  module Iso9660
5
+ using ManageIQ::UnicodeString
6
+
5
7
  # SUSP extensions are present if the first two characters of the SUA of
6
8
  # the first directory entry are "SP". After SUSP is identified, if the
7
9
  # first two characters of any directory entry's SUA are "RR" a Rock Ridge
@@ -321,9 +321,9 @@ module LinuxMount
321
321
  #
322
322
  no_more_links = false
323
323
  until no_more_links
324
- filesys, link_ptr = getFsPathBase(link_ptr)
325
- if filesys.fileSymLink?(link_ptr)
326
- symlink = getSymLink(filesys, link_ptr)
324
+ filesys, tmp_link_ptr = getFsPathBase(link_ptr)
325
+ if filesys.fileSymLink?(tmp_link_ptr)
326
+ symlink = getSymLink(filesys, tmp_link_ptr)
327
327
  link_ptr = symlink[0, 1] == '/' ? symlink : File.join(File.dirname(link_ptr), symlink)
328
328
  else
329
329
  no_more_links = true
@@ -1,8 +1,10 @@
1
1
  require 'fs/ntfs/utils'
2
2
  require 'binary_struct'
3
- require 'util/miq-unicode'
3
+ require 'miq_unicode'
4
4
 
5
5
  module NTFS
6
+ using ManageIQ::UnicodeString
7
+
6
8
  #
7
9
  # ATTR_LIST_ENTRY - Attribute: Attribute list (0x20).
8
10
  #
@@ -1,10 +1,12 @@
1
1
  require 'fs/ntfs/utils'
2
2
  require 'util/win32/nt_util'
3
3
  require 'binary_struct'
4
- require 'util/miq-unicode'
4
+ require 'miq_unicode'
5
5
  require 'fs/ntfs/attrib_standard_information'
6
6
 
7
7
  module NTFS
8
+ using ManageIQ::UnicodeString
9
+
8
10
  #
9
11
  # FILE_NAME_ATTR - Attribute: Filename (0x30)
10
12
  #
@@ -1,9 +1,11 @@
1
1
  require 'binary_struct'
2
- require 'util/miq-unicode'
2
+ require 'miq_unicode'
3
3
  require 'fs/ntfs/utils'
4
4
  require 'fs/ntfs/attrib_type'
5
5
 
6
6
  module NTFS
7
+ using ManageIQ::UnicodeString
8
+
7
9
  # Standard attribute header.
8
10
  # Each attribute begins with one of these.
9
11
  STANDARD_ATTRIBUTE_HEADER = BinaryStruct.new([
@@ -1,10 +1,12 @@
1
1
  require 'binary_struct'
2
- require 'util/miq-unicode'
2
+ require 'miq_unicode'
3
3
  require 'fs/ntfs/index_node_header'
4
4
  require 'fs/ntfs/directory_index_node'
5
5
  require 'fs/ntfs/index_record_header'
6
6
 
7
7
  module NTFS
8
+ using ManageIQ::UnicodeString
9
+
8
10
  #
9
11
  # INDEX_ROOT - Attribute: Index root (0x90).
10
12
  #
@@ -1,4 +1,4 @@
1
- require 'util/miq-uuid'
1
+ require 'uuidtools'
2
2
 
3
3
  module NTFS
4
4
  # There is no real data definition for this class - it consists entirely of GUIDs.
@@ -1,6 +1,8 @@
1
- require 'util/miq-unicode'
1
+ require 'miq_unicode'
2
2
 
3
3
  module NTFS
4
+ using ManageIQ::UnicodeString
5
+
4
6
  #
5
7
  # VOLUME_NAME - Attribute: Volume name (0x60).
6
8
  #
@@ -1,5 +1,5 @@
1
1
  require 'binary_struct'
2
- require 'util/miq-uuid'
2
+ require 'uuidtools'
3
3
  require 'stringio'
4
4
  require 'memory_buffer'
5
5
  require 'fs/xfs/superblock'
@@ -1,5 +1,5 @@
1
1
  require 'binary_struct'
2
- require 'util/miq-uuid'
2
+ require 'uuidtools'
3
3
  require 'stringio'
4
4
 
5
5
  require 'rufus/lru'
@@ -1,7 +1,7 @@
1
1
  # encoding: US-ASCII
2
2
 
3
3
  require 'binary_struct'
4
- require 'util/miq-uuid'
4
+ require 'uuidtools'
5
5
  require 'stringio'
6
6
  require 'memory_buffer'
7
7
  require 'fs/xfs/allocation_group'
@@ -13,6 +13,24 @@ module ManageIQ
13
13
  rescue
14
14
  return uri_path
15
15
  end
16
+
17
+ def self.base24_decode(byte_array)
18
+ digits = %w(B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9)
19
+ out = " " * 29
20
+ out.length.downto(0) do |i|
21
+ if i.modulo(6) == 0
22
+ out[i, 1] = "-"
23
+ else
24
+ map_index = 0
25
+ 15.downto(0) do |j|
26
+ byte_value = (map_index << 8) | byte_array[j]
27
+ byte_array[j], map_index = byte_value.divmod(24)
28
+ out[i, 1] = digits[map_index]
29
+ end
30
+ end
31
+ end
32
+ out[1..-1]
33
+ end
16
34
  end
17
35
  end
18
36
  end
@@ -1,5 +1,5 @@
1
1
  module ManageIQ
2
2
  module Smartstate
3
- VERSION = "0.5.9".freeze
3
+ VERSION = "0.7.0".freeze
4
4
  end
5
5
  end
@@ -1,4 +1,3 @@
1
- require 'MiqVm/MiqVm'
2
1
  require 'metadata/util/md5deep'
3
2
  require 'util/miq-xml'
4
3
  require 'ostruct'
@@ -100,7 +99,7 @@ class MIQExtract
100
99
  yield({:msg => 'Scanning Profile-Registry'}) if block_given?
101
100
 
102
101
  filters = []
103
- reg_filters[:HKCU].to_miq_a.each { |f| filters << {:key => split_registry(f['key']).join('/'), :depth => f['depth']} }
102
+ Array.wrap(reg_filters[:HKCU]).each { |f| filters << {:key => split_registry(f['key']).join('/'), :depth => f['depth']} }
104
103
  @scanProfiles.parse_data(@target, RemoteRegistry.new(@systemFs, @xml_class).loadCurrentUser(filters)) unless filters.empty?
105
104
 
106
105
  filters = {}
@@ -127,7 +126,7 @@ class MIQExtract
127
126
 
128
127
  def extract(category, &blk)
129
128
  xml = nil
130
- category.to_miq_a.each do |c|
129
+ Array.wrap(category.presence).each do |c|
131
130
  c = c.downcase
132
131
  xml = case c
133
132
  when "accounts" then getAccounts(c)
@@ -1,12 +1,10 @@
1
1
  require 'util/miq-xml'
2
- require 'util/runcmd'
3
2
  require 'metadata/VmConfig/VmConfig'
3
+ require 'awesome_spawn'
4
4
 
5
5
  class GetNativeCfg
6
- LSHW = "lshw"
7
-
8
6
  def self.new
9
- lshwXml = MiqUtil.runcmd("#{LSHW} -xml")
7
+ lshwXml = AwesomeSpawn.run!("lshw", :params => ["-xml"], :combined_output => true).output
10
8
  nodeHash = Hash.new { |h, k| h[k] = [] }
11
9
  doc = MiqXml.load(lshwXml)
12
10
  doc.find_match("//node").each { |n| nodeHash[n.attributes["id"].split(':', 2)[0]] << n }
@@ -1,6 +1,6 @@
1
1
  require 'pathname'
2
2
  require 'metadata/VMMount/VMMount'
3
- require 'util/miq-unicode'
3
+ require 'miq_unicode'
4
4
  require 'util/miq-xml'
5
5
  require 'VMwareWebService/MiqVimInventory'
6
6
  require 'timeout'
@@ -8,6 +8,8 @@ require 'util/miq-extensions'
8
8
  require 'VMwareWebService/MiqVimBroker'
9
9
 
10
10
  class VmConfig
11
+ using ManageIQ::UnicodeString
12
+
11
13
  attr_reader :configFile
12
14
 
13
15
  def initialize(filename)
@@ -364,7 +366,7 @@ class VmConfig
364
366
 
365
367
  def resolve_ds_path(filename)
366
368
  # TODO: Determine if we need to do any work here.
367
- ds, dir, name = split_filename(filename)
369
+ ds, _dir, _name = split_filename(filename)
368
370
  return filename unless ds.nil?
369
371
 
370
372
  @ds_replace ||= {}
@@ -373,7 +375,7 @@ class VmConfig
373
375
  end
374
376
 
375
377
  ds_filename = resolve_ds_path_with_vim(filename)
376
- ds, dir, name = split_filename(ds_filename)
378
+ ds, dir, _name = split_filename(ds_filename)
377
379
  unless ds.nil?
378
380
  idx = filename.index(dir)
379
381
  replaced_str = filename[0, idx]
@@ -498,7 +500,7 @@ class VmConfig
498
500
  end
499
501
 
500
502
  def rhevm_disk_file_entry(disk)
501
- storage_id = disk.storage_domains.first&.id
503
+ storage_id = disk.storage_domains&.first&.id
502
504
  disk_id = disk.image_id || disk.id
503
505
  full_path = storage_id && File.join('/dev', storage_id, disk_id)
504
506
  {:path => full_path, :name => disk_id, :size => disk.actual_size.to_i}
@@ -550,7 +552,7 @@ class VmConfig
550
552
  elsif miqvm.rhevmVm
551
553
  disks = miqvm.rhevm.collect_vm_disks(miqvm.rhevmVm)
552
554
  disks.each do |disk|
553
- storage_id = disk.storage_domains.first&.id
555
+ storage_id = disk.storage_domains&.first&.id
554
556
  disk_id = disk.image_id || disk.id
555
557
  full_path = storage_id && File.join('/dev', storage_id, disk_id)
556
558
  d = {:path => full_path, :name => disk.name.to_s, :size => disk.actual_size.to_i}
@@ -1,4 +1,8 @@
1
+ require 'miq_unicode'
2
+
1
3
  module CfgConfig
4
+ using ManageIQ::UnicodeString
5
+
2
6
  def convert(filename)
3
7
  @convertText = ""
4
8
  $log.debug "Processing Windows Configuration file [#{filename}]"
@@ -1,5 +1,5 @@
1
1
  require 'util/miq-xml'
2
- require 'util/runcmd'
2
+ require 'awesome_spawn'
3
3
 
4
4
  module XmlConfig
5
5
  def convert(filename)
@@ -12,9 +12,9 @@ module XmlConfig
12
12
  if Sys::Platform::IMPL == :linux
13
13
  begin
14
14
  # First check to see if the command is available
15
- MiqUtil.runcmd("virsh list")
15
+ AwesomeSpawn.run!("virsh", :params => ["list"])
16
16
  begin
17
- xml_data = MiqUtil.runcmd("virsh dumpxml #{File.basename(filename, ".*")}")
17
+ xml_data = AwesomeSpawn.run!("virsh", :params => ["dumpxml", File.basename(filename, ".*")], :combined_output => true).output
18
18
  rescue => err
19
19
  $log.error "#{err}\n#{err.backtrace.join("\n")}"
20
20
  end
@@ -1,11 +1,13 @@
1
1
  require 'binary_struct'
2
2
  require 'util/miq-hash_struct'
3
3
  require 'db/MiqBdb/MiqBdb'
4
- require 'util/miq-unicode'
4
+ require 'miq_unicode'
5
5
 
6
6
  # RPM Specification located at: http://jrpm.sourceforge.net/rpmspec/index.html
7
7
 
8
8
  class MiqRpmPackages
9
+ using ManageIQ::UnicodeString
10
+
9
11
  #
10
12
  # The data types we support.
11
13
  #
@@ -13,6 +13,8 @@ class MD5deep
13
13
  def initialize(fs = nil, options = {})
14
14
  @fullFileCount = 0
15
15
  @fullDirCount = 0
16
+ @drive_letter = nil
17
+
16
18
  # Create XML document
17
19
  @xml = XmlHash.createDoc(:filesystem)
18
20
  @fs = fs.kind_of?(MiqFS) ? fs : nil
@@ -179,9 +181,9 @@ class MD5deep
179
181
 
180
182
  def fileOpen(currFile)
181
183
  if @fs
182
- fh = @fs.fileOpen(currFile)
184
+ @fs.fileOpen(currFile)
183
185
  else
184
- fh = File.open(currFile)
186
+ File.open(currFile)
185
187
  end
186
188
  end
187
189
 
@@ -2,8 +2,11 @@
2
2
 
3
3
  require 'util/miq-xml'
4
4
  require 'enumerator'
5
+ require 'miq_unicode'
5
6
 
6
7
  module MiqWin32
8
+ using ManageIQ::UnicodeString
9
+
7
10
  class Accounts
8
11
  attr_reader :users, :groups
9
12
 
@@ -19,13 +19,15 @@ require 'digest/md5'
19
19
 
20
20
  # Common utilities.
21
21
  require 'binary_struct'
22
- require 'util/miq-unicode'
22
+ require 'miq_unicode'
23
23
  require 'util/miq-xml'
24
24
  require 'util/miq-exception'
25
25
 
26
26
  require 'metadata/util/event_log_filter'
27
27
 
28
28
  class Win32EventLog
29
+ using ManageIQ::UnicodeString
30
+
29
31
  # Standard file log names
30
32
  SYSTEM_LOGS = %w(Application System Security)
31
33
  BUFFER_READ_SIZE = 10485760 # 10 MB buffer
@@ -684,8 +686,8 @@ class Win32EventLog
684
686
  reg.each_key do |subKey, _wtime|
685
687
  subpath = "#{src}\\#{subKey}"
686
688
  subKey.downcase!
687
- Win32::Registry::HKEY_LOCAL_MACHINE.open(subpath) do |reg|
688
- reg.each_value do |name, _type, data|
689
+ Win32::Registry::HKEY_LOCAL_MACHINE.open(subpath) do |subreg|
690
+ subreg.each_value do |name, _type, data|
689
691
  case name
690
692
  when 'EventMessageFile', 'ParameterMessageFile', 'CategoryMessageFile' then
691
693
  fn = data.to_s
@@ -251,11 +251,13 @@ module MiqWin32
251
251
  end
252
252
 
253
253
  def self.DecodeProductKey(product_key)
254
- return if product_key.blank? || product_key.length < 67
255
- y = []; product_key.split(",")[52..67].each { |b| y << b.hex }
256
- return MIQEncode.base24Decode(y)
254
+ parts = product_key.to_s.split(",")
255
+ return if parts.length < 67
256
+
257
+ ManageIQ::Smartstate::Util.base24_decode(parts[52..67].map(&:hex))
257
258
  rescue => err
258
259
  $log.error "MIQ(DecodeProductKey): [#{err}]"
260
+ nil
259
261
  end
260
262
 
261
263
  private
File without changes
@@ -92,14 +92,6 @@ class FleeceHives
92
92
  xmlCol
93
93
  end
94
94
 
95
- def self.DecodeProductKey(product_key)
96
- return if product_key.blank? || product_key.length < 67
97
- y = []; product_key.split(",")[52..67].each { |b| y << b.hex }
98
- return MIQEncode.base24Decode(y)
99
- rescue => err
100
- $log.error "MIQ(OS-DecodeProductKey): [#{err}]"
101
- end
102
-
103
95
  def self.collectProductKeys(_xml, xmlCol, regHnd)
104
96
  prodKeys = MIQRexml.findElement("software/productkeys", xmlCol.root)
105
97
  regHnd.digitalProductKeys.each do |e|
@@ -1,7 +1,7 @@
1
1
  # encoding: US-ASCII
2
2
 
3
3
  require 'binary_struct'
4
- require 'util/miq-unicode'
4
+ require 'miq_unicode'
5
5
  require 'enumerator'
6
6
  require 'util/miq-xml'
7
7
  require 'util/xml/xml_hash'
@@ -13,6 +13,8 @@ DEBUG_LOG_PERFORMANCE = false
13
13
  DEBUG_FILE_READS = false
14
14
 
15
15
  class MSRegHive
16
+ using ManageIQ::UnicodeString
17
+
16
18
  attr_reader :fileLoadTime, :fileParseTime, :digitalProductKeys, :xmlNode
17
19
 
18
20
  # Size of the HBIN data (as well as initiale REGF) segments
@@ -1,9 +1,8 @@
1
1
  # encoding: US-ASCII
2
2
 
3
3
  require 'stringio'
4
-
5
4
  require 'binary_struct'
6
- require 'util/miq-unicode'
5
+ require 'miq_unicode'
7
6
 
8
7
  # Notes:
9
8
  # The peheader object member 'icons' is an array of icons in the file. Sub 0 is the application
@@ -12,11 +11,11 @@ require 'util/miq-unicode'
12
11
  # to open them and display each resolution contained in the icon (if more than one).
13
12
 
14
13
  class PEheader
14
+ using ManageIQ::UnicodeString
15
+
15
16
  IMAGE_NT_SIGNATURE = "PE\0\0"
16
17
  IMAGE_DOS_SIGNATURE = "MZ"
17
18
 
18
- attr_reader :imports, :icons, :messagetables, :versioninfo
19
-
20
19
  def initialize(path)
21
20
  @fname = path
22
21
  @dataDirs = []
@@ -91,19 +90,19 @@ class PEheader
91
90
  end
92
91
 
93
92
  def imports
94
- @import_array ||= getImports
93
+ @imports ||= getImports
95
94
  end
96
95
 
97
96
  def icons
98
- @icon_array ||= getIcons(@fBuf)
97
+ @icons ||= getIcons(@fBuf)
99
98
  end
100
99
 
101
100
  def messagetables
102
- @messagetable_hash ||= getMessagetables
101
+ @messagetables ||= getMessagetables
103
102
  end
104
103
 
105
104
  def versioninfo
106
- @versioninfo_array ||= getVersioninfo
105
+ @versioninfo ||= getVersioninfo
107
106
  end
108
107
 
109
108
  # //////////////////////////////////////////////////////////////////////////