manageiq-smartstate 0.6.1 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codeclimate.yml +34 -35
- data/.rubocop.yml +3 -3
- data/.rubocop_cc.yml +3 -4
- data/.rubocop_local.yml +1 -1
- data/.travis.yml +3 -3
- data/README.md +1 -1
- data/lib/db/MiqBdb/MiqBdb.rb +0 -2
- data/lib/db/MiqBdb/MiqBdbPage.rb +0 -2
- data/lib/db/MiqSqlite/MiqSqlite3.rb +0 -2
- data/lib/db/MiqSqlite/MiqSqlite3Cell.rb +0 -2
- data/lib/db/MiqSqlite/MiqSqlite3Page.rb +0 -2
- data/lib/db/MiqSqlite/MiqSqlite3Table.rb +0 -2
- data/lib/disk/modules/MSCommon.rb +3 -1
- data/lib/disk/modules/VhdxDisk.rb +3 -1
- data/lib/fs/MiqMountManager.rb +2 -29
- data/lib/fs/VimDatastoreFS/VimDatastoreFS.rb +1 -6
- data/lib/fs/fat32/directory_entry.rb +540 -540
- data/lib/fs/iso9660/boot_sector.rb +3 -2
- data/lib/fs/iso9660/directory_entry.rb +3 -2
- data/lib/fs/iso9660/rock_ridge.rb +3 -1
- data/lib/fs/ntfs/attrib_attribute_list.rb +3 -1
- data/lib/fs/ntfs/attrib_file_name.rb +3 -1
- data/lib/fs/ntfs/attrib_header.rb +3 -1
- data/lib/fs/ntfs/attrib_index_root.rb +3 -1
- data/lib/fs/ntfs/attrib_volume_name.rb +3 -1
- data/lib/manageiq/smartstate/util.rb +18 -0
- data/lib/manageiq/smartstate/version.rb +1 -1
- data/lib/metadata/MIQExtract/MIQExtract.rb +1 -2
- data/lib/metadata/VmConfig/GetNativeCfg.rb +2 -4
- data/lib/metadata/VmConfig/VmConfig.rb +5 -4
- data/lib/metadata/VmConfig/cfgConfig.rb +4 -0
- data/lib/metadata/VmConfig/xmlConfig.rb +3 -3
- data/lib/metadata/linux/MiqRpmPackages.rb +3 -1
- data/lib/metadata/util/win32/Win32Accounts.rb +3 -1
- data/lib/metadata/util/win32/Win32EventLog.rb +3 -1
- data/lib/metadata/util/win32/Win32Software.rb +5 -3
- data/lib/metadata/util/win32/decode.rb +0 -0
- data/lib/metadata/util/win32/fleece_hives.rb +0 -9
- data/lib/metadata/util/win32/ms-registry.rb +3 -2
- data/lib/metadata/util/win32/peheader.rb +3 -2
- data/lib/metadata/util/win32/system_path_win.rb +0 -2
- data/lib/miq_unicode.rb +45 -0
- data/manageiq-smartstate.gemspec +8 -7
- metadata +60 -32
- 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 '
|
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 '
|
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 '
|
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,10 +1,12 @@
|
|
1
1
|
require 'fs/ntfs/utils'
|
2
2
|
require 'util/win32/nt_util'
|
3
3
|
require 'binary_struct'
|
4
|
-
require '
|
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 '
|
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 '
|
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
|
#
|
@@ -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
|
@@ -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
|
@@ -126,7 +125,7 @@ class MIQExtract
|
|
126
125
|
|
127
126
|
def extract(category, &blk)
|
128
127
|
xml = nil
|
129
|
-
Array.wrap(category).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 =
|
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 '
|
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
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'util/miq-xml'
|
2
|
-
require '
|
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
|
-
|
15
|
+
AwesomeSpawn.run!("virsh", :params => ["list"])
|
16
16
|
begin
|
17
|
-
xml_data =
|
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 '
|
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
|
#
|
@@ -19,13 +19,15 @@ require 'digest/md5'
|
|
19
19
|
|
20
20
|
# Common utilities.
|
21
21
|
require 'binary_struct'
|
22
|
-
require '
|
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
|
-
|
255
|
-
|
256
|
-
|
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 '
|
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 '
|
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
|
|
data/lib/miq_unicode.rb
ADDED
@@ -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
|
data/manageiq-smartstate.gemspec
CHANGED
@@ -21,25 +21,26 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
23
|
spec.add_dependency "activesupport"
|
24
|
+
spec.add_dependency "awesome_spawn", "~> 1.5"
|
24
25
|
spec.add_dependency "azure-armrest", "~> 0.9"
|
25
26
|
spec.add_dependency "binary_struct", "~> 2.1"
|
26
27
|
spec.add_dependency "iniparse"
|
27
28
|
spec.add_dependency "linux_block_device", "~>0.2.1"
|
28
|
-
spec.add_dependency "manageiq-password", "
|
29
|
+
spec.add_dependency "manageiq-password", "< 2"
|
29
30
|
spec.add_dependency "memory_buffer", ">=0.1.0"
|
30
31
|
spec.add_dependency "rufus-lru", "~>1.0.3"
|
31
32
|
spec.add_dependency "sys-uname", "~>1.2.1"
|
32
33
|
spec.add_dependency "uuidtools", "~>2.1"
|
33
|
-
spec.add_dependency "vmware_web_service", "~>
|
34
|
+
spec.add_dependency "vmware_web_service", "~>3.0"
|
34
35
|
|
35
36
|
spec.add_development_dependency "bundler"
|
37
|
+
spec.add_development_dependency "camcorder"
|
38
|
+
spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0.0"
|
39
|
+
spec.add_development_dependency "manageiq-style"
|
36
40
|
spec.add_development_dependency "rake"
|
37
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
38
|
-
spec.add_development_dependency "
|
42
|
+
spec.add_development_dependency "simplecov"
|
43
|
+
spec.add_development_dependency "sqlite3"
|
39
44
|
spec.add_development_dependency "vcr", "~>3.0.2"
|
40
45
|
spec.add_development_dependency "webmock", "~>2.3.1"
|
41
|
-
spec.add_development_dependency "simplecov"
|
42
|
-
spec.add_development_dependency "rubocop"
|
43
|
-
spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0.0"
|
44
|
-
|
45
46
|
end
|