manageiq-smartstate 0.6.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) 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/db/MiqBdb/MiqBdb.rb +0 -2
  9. data/lib/db/MiqBdb/MiqBdbPage.rb +0 -2
  10. data/lib/db/MiqSqlite/MiqSqlite3.rb +0 -2
  11. data/lib/db/MiqSqlite/MiqSqlite3Cell.rb +0 -2
  12. data/lib/db/MiqSqlite/MiqSqlite3Page.rb +0 -2
  13. data/lib/db/MiqSqlite/MiqSqlite3Table.rb +0 -2
  14. data/lib/disk/modules/MSCommon.rb +3 -1
  15. data/lib/disk/modules/VhdxDisk.rb +3 -1
  16. data/lib/fs/MiqMountManager.rb +2 -29
  17. data/lib/fs/VimDatastoreFS/VimDatastoreFS.rb +1 -6
  18. data/lib/fs/fat32/directory_entry.rb +540 -540
  19. data/lib/fs/iso9660/boot_sector.rb +3 -2
  20. data/lib/fs/iso9660/directory_entry.rb +3 -2
  21. data/lib/fs/iso9660/rock_ridge.rb +3 -1
  22. data/lib/fs/ntfs/attrib_attribute_list.rb +3 -1
  23. data/lib/fs/ntfs/attrib_file_name.rb +3 -1
  24. data/lib/fs/ntfs/attrib_header.rb +3 -1
  25. data/lib/fs/ntfs/attrib_index_root.rb +3 -1
  26. data/lib/fs/ntfs/attrib_volume_name.rb +3 -1
  27. data/lib/manageiq/smartstate/util.rb +18 -0
  28. data/lib/manageiq/smartstate/version.rb +1 -1
  29. data/lib/metadata/MIQExtract/MIQExtract.rb +2 -3
  30. data/lib/metadata/VmConfig/GetNativeCfg.rb +2 -4
  31. data/lib/metadata/VmConfig/VmConfig.rb +7 -6
  32. data/lib/metadata/VmConfig/cfgConfig.rb +4 -0
  33. data/lib/metadata/VmConfig/xmlConfig.rb +3 -3
  34. data/lib/metadata/linux/MiqRpmPackages.rb +3 -1
  35. data/lib/metadata/util/win32/Win32Accounts.rb +3 -1
  36. data/lib/metadata/util/win32/Win32EventLog.rb +3 -1
  37. data/lib/metadata/util/win32/Win32Software.rb +5 -3
  38. data/lib/metadata/util/win32/decode.rb +0 -0
  39. data/lib/metadata/util/win32/fleece_hives.rb +0 -9
  40. data/lib/metadata/util/win32/ms-registry.rb +3 -2
  41. data/lib/metadata/util/win32/peheader.rb +3 -2
  42. data/lib/metadata/util/win32/system_path_win.rb +0 -2
  43. data/lib/miq_unicode.rb +45 -0
  44. data/manageiq-smartstate.gemspec +8 -6
  45. metadata +66 -23
  46. data/lib/fs/MetakitFS/MetakitFS.rb +0 -530
@@ -1,11 +1,12 @@
1
1
  require 'fs/iso9660/util'
2
-
3
2
  require 'sys-uname'
4
3
  require 'binary_struct'
5
- require 'util/miq-unicode'
4
+ require 'miq_unicode'
6
5
 
7
6
  module Iso9660
8
7
  class BootSector
8
+ using ManageIQ::UnicodeString
9
+
9
10
  # Universal Volume Descriptor ID.
10
11
  DESCRIPTOR_ID = "CD001"
11
12
 
@@ -1,10 +1,11 @@
1
1
  require 'fs/iso9660/util'
2
2
  require 'fs/iso9660/rock_ridge'
3
-
4
3
  require 'binary_struct'
5
- require 'util/miq-unicode'
4
+ require 'miq_unicode'
6
5
 
7
6
  module Iso9660
7
+ using ManageIQ::UnicodeString
8
+
8
9
  # FlagBits: FB_
9
10
  FB_HIDDEN = 0x01 # 0 if not hidden.
10
11
  FB_DIRECTORY = 0x02 # 0 if file.
@@ -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
@@ -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,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
  #
@@ -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.6.0".freeze
3
+ VERSION = "0.8.0".freeze
4
4
  end
5
5
  end
@@ -16,7 +16,6 @@ require 'metadata/ScanProfile/VmScanProfiles'
16
16
  require 'VMwareWebService/MiqVim'
17
17
  require 'OpenStackExtract/MiqOpenStackVm/MiqOpenStackImage'
18
18
  require 'OpenStackExtract/MiqOpenStackVm/MiqOpenStackInstance'
19
- require 'VMwareWebService/MiqVimBroker'
20
19
 
21
20
  class MIQExtract
22
21
  attr_reader :systemFsMsg, :systemFs, :vm
@@ -99,7 +98,7 @@ class MIQExtract
99
98
  yield({:msg => 'Scanning Profile-Registry'}) if block_given?
100
99
 
101
100
  filters = []
102
- reg_filters[:HKCU].to_miq_a.each { |f| filters << {:key => split_registry(f['key']).join('/'), :depth => f['depth']} }
101
+ Array.wrap(reg_filters[:HKCU]).each { |f| filters << {:key => split_registry(f['key']).join('/'), :depth => f['depth']} }
103
102
  @scanProfiles.parse_data(@target, RemoteRegistry.new(@systemFs, @xml_class).loadCurrentUser(filters)) unless filters.empty?
104
103
 
105
104
  filters = {}
@@ -126,7 +125,7 @@ class MIQExtract
126
125
 
127
126
  def extract(category, &blk)
128
127
  xml = nil
129
- category.to_miq_a.each do |c|
128
+ Array.wrap(category.presence).each do |c|
130
129
  c = c.downcase
131
130
  xml = case c
132
131
  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,13 +1,14 @@
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'
7
7
  require 'util/miq-extensions'
8
- require 'VMwareWebService/MiqVimBroker'
9
8
 
10
9
  class VmConfig
10
+ using ManageIQ::UnicodeString
11
+
11
12
  attr_reader :configFile
12
13
 
13
14
  def initialize(filename)
@@ -412,7 +413,7 @@ class VmConfig
412
413
  require 'VMwareWebService/MiqVim'
413
414
 
414
415
  password_decrypt = ManageIQ::Password.decrypt(ems_host['password'])
415
- hostVim = MiqVim.new(ems_host['host'], ems_host['user'], password_decrypt)
416
+ hostVim = MiqVim.new(:server => ems_host['host'], :username => ems_host['user'], :password => password_decrypt)
416
417
  $log.info "#{conn_reason}: Connection to [#{ems_display_text}] completed for VM:[#{vmCfgFile}] in [#{Time.now - st}] seconds"
417
418
  return hostVim
418
419
  rescue Timeout::Error => err
@@ -430,7 +431,7 @@ class VmConfig
430
431
 
431
432
  password_decrypt = ManageIQ::Password.decrypt(ems['password'])
432
433
  $log.debug "resolve_path_names: emsHost = #{ems['host']}, emsUser = #{ems['user']}" if $log
433
- vi = MiqVimInventory.new(ems['host'], ems['user'], password_decrypt)
434
+ vi = MiqVimInventory.new(:server => ems['host'], :username => ems['user'], :password => password_decrypt)
434
435
  return getDsName(filename, vi)
435
436
 
436
437
  rescue
@@ -498,7 +499,7 @@ class VmConfig
498
499
  end
499
500
 
500
501
  def rhevm_disk_file_entry(disk)
501
- storage_id = disk.storage_domains.first&.id
502
+ storage_id = disk.storage_domains&.first&.id
502
503
  disk_id = disk.image_id || disk.id
503
504
  full_path = storage_id && File.join('/dev', storage_id, disk_id)
504
505
  {:path => full_path, :name => disk_id, :size => disk.actual_size.to_i}
@@ -550,7 +551,7 @@ class VmConfig
550
551
  elsif miqvm.rhevmVm
551
552
  disks = miqvm.rhevm.collect_vm_disks(miqvm.rhevmVm)
552
553
  disks.each do |disk|
553
- storage_id = disk.storage_domains.first&.id
554
+ storage_id = disk.storage_domains&.first&.id
554
555
  disk_id = disk.image_id || disk.id
555
556
  full_path = storage_id && File.join('/dev', storage_id, disk_id)
556
557
  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
  #
@@ -1,9 +1,11 @@
1
1
  # encoding: US-ASCII
2
2
 
3
3
  require 'util/miq-xml'
4
- require 'enumerator'
4
+ require 'miq_unicode'
5
5
 
6
6
  module MiqWin32
7
+ using ManageIQ::UnicodeString
8
+
7
9
  class Accounts
8
10
  attr_reader :users, :groups
9
11
 
@@ -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
@@ -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
@@ -1,7 +1,6 @@
1
1
  require 'util/miq-xml'
2
2
  require 'digest/md5'
3
3
  require 'metadata/util/win32/remote-registry'
4
- require 'enumerator'
5
4
  require 'util/miq-encode'
6
5
 
7
6
  class FleeceHives
@@ -92,14 +91,6 @@ class FleeceHives
92
91
  xmlCol
93
92
  end
94
93
 
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
94
  def self.collectProductKeys(_xml, xmlCol, regHnd)
104
95
  prodKeys = MIQRexml.findElement("software/productkeys", xmlCol.root)
105
96
  regHnd.digitalProductKeys.each do |e|
@@ -1,8 +1,7 @@
1
1
  # encoding: US-ASCII
2
2
 
3
3
  require 'binary_struct'
4
- require 'util/miq-unicode'
5
- require 'enumerator'
4
+ require 'miq_unicode'
6
5
  require 'util/miq-xml'
7
6
  require 'util/xml/xml_hash'
8
7
 
@@ -13,6 +12,8 @@ DEBUG_LOG_PERFORMANCE = false
13
12
  DEBUG_FILE_READS = false
14
13
 
15
14
  class MSRegHive
15
+ using ManageIQ::UnicodeString
16
+
16
17
  attr_reader :fileLoadTime, :fileParseTime, :digitalProductKeys, :xmlNode
17
18
 
18
19
  # 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,6 +11,8 @@ 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
 
@@ -1,5 +1,3 @@
1
- require 'enumerator'
2
-
3
1
  module Win32
4
2
  class SystemPath
5
3
  # BCD WMI Provider Enumerations (values)
@@ -0,0 +1,45 @@
1
+ module ManageIQ
2
+ module UnicodeString
3
+ refine String do
4
+ def UnicodeToUtf8
5
+ dup.UnicodeToUtf8!
6
+ end
7
+
8
+ def UnicodeToUtf8!
9
+ force_encoding("UTF-16LE").encode!("UTF-8")
10
+ end
11
+
12
+ def Utf8ToUnicode
13
+ dup.Utf8ToUnicode!
14
+ end
15
+
16
+ def Utf8ToUnicode!
17
+ force_encoding("UTF-8").encode!("UTF-16LE")
18
+ end
19
+
20
+ def AsciiToUtf8
21
+ dup.AsciiToUtf8!
22
+ end
23
+
24
+ def AsciiToUtf8!
25
+ force_encoding("ISO-8859-1").encode!("UTF-8")
26
+ end
27
+
28
+ def Utf8ToAscii
29
+ dup.Utf8ToAscii!
30
+ end
31
+
32
+ def Utf8ToAscii!
33
+ force_encoding("UTF-8").encode!("ISO-8859-1")
34
+ end
35
+
36
+ def Ucs2ToAscii
37
+ dup.Ucs2ToAscii!
38
+ end
39
+
40
+ def Ucs2ToAscii!
41
+ force_encoding("UTF-16LE").encode!("ISO-8859-1")
42
+ end
43
+ end
44
+ end
45
+ end