foreman_discovery 12.0.2 → 13.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/mailers/discovered_mailer.rb +12 -1
- data/app/models/host/discovered.rb +20 -7
- data/app/models/setting/discovered.rb +2 -0
- data/app/services/foreman_discovery/fact_parser.rb +8 -2
- data/app/services/foreman_discovery/lldp_neighbors.rb +104 -0
- data/app/views/discovery_rules/index.html.erb +1 -1
- data/extra/discovery/pxeless-vlan.json +217 -0
- data/lib/foreman_discovery/engine.rb +1 -1
- data/lib/foreman_discovery/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ca/foreman_discovery.edit.po +143 -58
- data/locale/ca/foreman_discovery.po +4 -4
- data/locale/de/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/de/foreman_discovery.edit.po +145 -59
- data/locale/de/foreman_discovery.po +7 -7
- data/locale/en/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/en/foreman_discovery.edit.po +90 -58
- data/locale/en/foreman_discovery.po +28 -4
- data/locale/en_GB/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/en_GB/foreman_discovery.edit.po +151 -66
- data/locale/en_GB/foreman_discovery.po +12 -12
- data/locale/es/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/es/foreman_discovery.edit.po +155 -70
- data/locale/es/foreman_discovery.po +16 -16
- data/locale/foreman_discovery.pot +93 -59
- data/locale/fr/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/fr/foreman_discovery.edit.po +287 -200
- data/locale/fr/foreman_discovery.po +149 -148
- data/locale/gl/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/gl/foreman_discovery.edit.po +144 -59
- data/locale/gl/foreman_discovery.po +5 -5
- data/locale/it/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/it/foreman_discovery.edit.po +144 -59
- data/locale/it/foreman_discovery.po +5 -5
- data/locale/ja/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ja/foreman_discovery.edit.po +153 -68
- data/locale/ja/foreman_discovery.po +16 -14
- data/locale/ko/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ko/foreman_discovery.edit.po +143 -59
- data/locale/ko/foreman_discovery.po +5 -5
- data/locale/pt_BR/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/pt_BR/foreman_discovery.edit.po +155 -70
- data/locale/pt_BR/foreman_discovery.po +16 -16
- data/locale/ru/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ru/foreman_discovery.edit.po +146 -63
- data/locale/ru/foreman_discovery.po +6 -6
- data/locale/sv_SE/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/sv_SE/foreman_discovery.edit.po +144 -59
- data/locale/sv_SE/foreman_discovery.po +5 -5
- data/locale/zh_CN/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_CN/foreman_discovery.edit.po +150 -69
- data/locale/zh_CN/foreman_discovery.po +13 -15
- data/locale/zh_TW/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_TW/foreman_discovery.edit.po +227 -144
- data/locale/zh_TW/foreman_discovery.po +88 -88
- data/test/functional/api/v2/discovery_rules_controller_test.rb +8 -0
- data/test/functional/api/v2/settings_controller_test.rb +2 -0
- data/test/test_helper_discovery.rb +2 -0
- data/test/unit/discovered_mailer_test.rb +14 -0
- data/test/unit/discovery_rule_test.rb +3 -0
- data/test/unit/facts_with_lldp.json +107 -0
- data/test/unit/facts_with_lldp_bond_candidate.json +107 -0
- data/test/unit/host_discovered_test.rb +72 -1
- data/test/unit/lldp_neighbors_test.rb +56 -0
- metadata +11 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9ffdab95d6a69414a0b99ecdb838f4c9d4c2ee9f9eba3d71ba2a5bb3fe3ef3d0
|
|
4
|
+
data.tar.gz: 5e721d701c1d35f93dcec4f096b41cfcb08ea605bd46aa37a538349c61c2985d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bac34ddb73174715645508c038e8d1951840374b8b32b0c8073f424522c0ff322645cc5dde847914cc2861f9363f8ad64aa943c9a48f04b947c37c633c48afb3
|
|
7
|
+
data.tar.gz: 37e531b52508c10f32617eae2af3beb893c9eee65698dbad324af1bb77212ca4659ab1a71b35f77b57ddaca3825f10fde2f452b6bf1e87fd6b0628616d4e00fb
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
class DiscoveredMailer < ::ApplicationMailer
|
|
2
2
|
helper :discovered_hosts
|
|
3
3
|
def discovered_summary(options = {})
|
|
4
|
-
|
|
4
|
+
user = if options[:user].kind_of? User
|
|
5
|
+
options[:user]
|
|
6
|
+
elsif options[:user].kind_of? Integer
|
|
7
|
+
User.find(options[:user])
|
|
8
|
+
else
|
|
9
|
+
raise ::Foreman::Exception.new(N_('Invalid user type of %s was provided'), options[:user].class.to_s)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
unless user.mail_enabled?
|
|
13
|
+
Rails.logger.debug("The user #{user.id} does not email enabled")
|
|
14
|
+
return
|
|
15
|
+
end
|
|
5
16
|
begin
|
|
6
17
|
Time.zone = user.timezone
|
|
7
18
|
rescue ArgumentError
|
|
@@ -42,6 +42,12 @@ class Host::Discovered < ::Host::Base
|
|
|
42
42
|
where(taxonomy_conditions).order("hosts.created_at DESC")
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
NAMING_PATTERNS = {
|
|
46
|
+
'Fact' => _('Fact + prefix'),
|
|
47
|
+
'Random-name' => _('Random name'),
|
|
48
|
+
'MAC-name' => _('MAC-based name')
|
|
49
|
+
}.freeze
|
|
50
|
+
|
|
45
51
|
# Discovery import workflow:
|
|
46
52
|
# discovered#import_host ->
|
|
47
53
|
# discovered#import_facts -> base#import_facts -> base#parse_facts ->
|
|
@@ -56,16 +62,22 @@ class Host::Discovered < ::Host::Base
|
|
|
56
62
|
raise ::Foreman::Exception.new(N_("Expected discovery_fact '%s' is missing, unable to detect primary interface and set hostname") % FacterUtils::bootif_name) unless FacterUtils::bootif_present(facts)
|
|
57
63
|
|
|
58
64
|
# construct hostname
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
bootif_mac = FacterUtils::bootif_mac(facts).try(:downcase)
|
|
66
|
+
hostname = ''
|
|
67
|
+
if Setting[:discovery_naming] == 'MAC-name'
|
|
68
|
+
hostname = NameGenerator.new.generate_next_mac_name(bootif_mac)
|
|
69
|
+
elsif Setting[:discovery_naming] == 'Random-name'
|
|
70
|
+
hostname = NameGenerator.new.generate_next_random_name
|
|
71
|
+
else
|
|
72
|
+
prefix_from_settings = Setting[:discovery_prefix]
|
|
73
|
+
hostname_prefix = prefix_from_settings if prefix_from_settings.present? && prefix_from_settings.match(/^[a-zA-Z].*/)
|
|
74
|
+
name_fact = return_first_valid_fact(Setting::Discovered.discovery_hostname_fact_array, facts)
|
|
75
|
+
raise(::Foreman::Exception.new(N_("Invalid facts: hash does not contain a valid value for any of the facts in the discovery_hostname setting: %s"), Setting::Discovered.discovery_hostname_fact_array.join(', '))) unless name_fact && name_fact.present?
|
|
76
|
+
hostname = normalize_string_for_hostname("#{hostname_prefix}#{name_fact}")
|
|
77
|
+
end
|
|
65
78
|
Rails.logger.warn "Hostname does not start with an alphabetical character" unless hostname.downcase.match(/^[a-z]/)
|
|
66
79
|
|
|
67
80
|
# check for existing managed hosts and fail or warn
|
|
68
|
-
bootif_mac = FacterUtils::bootif_mac(facts).try(:downcase)
|
|
69
81
|
existing_managed = Nic::Managed.joins(:host).where(:mac => bootif_mac, :provision => true, :hosts => {:type => "Host::Managed"}).limit(1)
|
|
70
82
|
if existing_managed.count > 0
|
|
71
83
|
if Setting[:discovery_error_on_existing]
|
|
@@ -131,6 +143,7 @@ class Host::Discovered < ::Host::Base
|
|
|
131
143
|
self.discovery_attribute_set = DiscoveryAttributeSet.where(:host_id => id).first_or_create
|
|
132
144
|
self.discovery_attribute_set.update_attributes(import_from_facts)
|
|
133
145
|
# set additional discovery attributes
|
|
146
|
+
::ForemanDiscovery::LldpNeighbors.eventually_make_bond(self) if Setting[:discovery_auto_bond]
|
|
134
147
|
primary_ip = self.primary_interface.ip
|
|
135
148
|
unless primary_ip.nil?
|
|
136
149
|
subnet = Subnet.subnet_for(primary_ip)
|
|
@@ -17,6 +17,7 @@ class Setting::Discovered < ::Setting
|
|
|
17
17
|
Setting.transaction do
|
|
18
18
|
[
|
|
19
19
|
self.set('discovery_fact', N_("Fact name to use for primary interface detection"), "discovery_bootif", N_("Interface fact")),
|
|
20
|
+
self.set('discovery_auto_bond', N_("Automatic bond interface (if another interface is detected on the same VLAN via LLDP)"), false, N_("Create bond interfaces")),
|
|
20
21
|
self.set('discovery_clean_facts', N_("Clean all reported facts during provisioning (except discovery facts)"), false, N_("Clean all facts")),
|
|
21
22
|
self.set('discovery_hostname', N_("List of facts to use for the hostname (separated by comma, first wins)"), "discovery_bootif", N_("Hostname facts")),
|
|
22
23
|
self.set('discovery_auto', N_("Automatically provision newly discovered hosts, according to the provisioning rules"), false, N_("Auto provisioning")),
|
|
@@ -35,6 +36,7 @@ class Setting::Discovered < ::Setting
|
|
|
35
36
|
self.set('discovery_pxegrub2_lock_template', N_("PXEGrub2 template to be used when pinning a host to discovery"), 'pxegrub2_discovery', N_("Locked PXEGrub2 template name"), nil, { :collection => Proc.new {Hash[ProvisioningTemplate.where(:template_kind => TemplateKind.find_by_name(:snippet)).map{|template| [template[:name], template[:name]]}]} }),
|
|
36
37
|
self.set('discovery_always_rebuild_dns', N_("Force DNS entries creation when provisioning discovered host"), true, N_("Force DNS")),
|
|
37
38
|
self.set('discovery_error_on_existing', N_("Do not allow to discover existing managed host matching MAC of a provisioning NIC (errors out early)"), false, N_("Error on existing NIC")),
|
|
39
|
+
self.set('discovery_naming', N_("Discovery hostname naming pattern"), 'Fact', N_("Type of name generator"), nil, {:collection => Proc.new {::Host::Discovered::NAMING_PATTERNS} }),
|
|
38
40
|
].compact.each { |s| self.create s.update(:category => "Setting::Discovered")}
|
|
39
41
|
end
|
|
40
42
|
|
|
@@ -6,15 +6,21 @@ module ForemanDiscovery
|
|
|
6
6
|
raise(::Foreman::Exception.new(N_("Discovered host '%{host}' has all NICs filtered out, filter: %{filter}") %
|
|
7
7
|
{:host => host, :filter => Setting[:ignored_interface_identifiers]})) if interfaces.size == 0
|
|
8
8
|
bootif_mac = FacterUtils::bootif_mac(facts).try(:downcase)
|
|
9
|
-
detected = interfaces.detect { |_, values| values[:macaddress].try(:downcase) == bootif_mac }
|
|
9
|
+
detected = interfaces.detect { |_, values| values[:macaddress].try(:downcase) == bootif_mac && values[:ipaddress].present? }
|
|
10
10
|
Rails.logger.debug "Discovery fact parser detected primary interface: #{detected}"
|
|
11
11
|
# return the detected interface as array [name, facts]
|
|
12
12
|
detected || raise(::Foreman::Exception.new(N_("Unable to find primary NIC with %{mac} specified via '%{fact}', NIC filter: %{filter}") %
|
|
13
13
|
{:mac => bootif_mac, :fact => FacterUtils::bootif_name, :filter => Setting[:ignored_interface_identifiers]}))
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
# ignores 'ignore_puppet_facts_for_provisioning' setting
|
|
16
17
|
def parse_interfaces?
|
|
17
|
-
true
|
|
18
|
+
true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# ignores 'update_subnets_from_facts' setting
|
|
22
|
+
def get_facts_for_interface(interface)
|
|
23
|
+
super.merge(keep_subnet: true)
|
|
18
24
|
end
|
|
19
25
|
end
|
|
20
26
|
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
module ForemanDiscovery
|
|
2
|
+
class LldpNeighbors
|
|
3
|
+
def set(iface, neighbor)
|
|
4
|
+
interfaces[iface] = neighbor
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def get(iface)
|
|
8
|
+
interfaces[iface]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def list_by_pvid
|
|
12
|
+
list = {}
|
|
13
|
+
interfaces.each do |name, neighbor|
|
|
14
|
+
next unless neighbor.has_key? 'PVID'
|
|
15
|
+
vlan = neighbor['PVID']
|
|
16
|
+
list[vlan] = [] unless list.has_key? vlan
|
|
17
|
+
list[vlan].push name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
list.each { |_, interfaces| interfaces.sort!}
|
|
21
|
+
list
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def interfaces
|
|
25
|
+
@interfaces ||= {}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def get_neighbors_by_interface(ifname)
|
|
29
|
+
return nil unless interfaces.has_key? ifname
|
|
30
|
+
|
|
31
|
+
interface = get(ifname)
|
|
32
|
+
return nil unless interface.has_key? 'PVID'
|
|
33
|
+
|
|
34
|
+
list = []
|
|
35
|
+
interfaces.each do |name, neighbor|
|
|
36
|
+
next unless neighbor.has_key? 'PVID'
|
|
37
|
+
list.push name if neighbor['PVID'] == interface['PVID']
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
return if list.size < 2
|
|
41
|
+
list.sort
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.eventually_make_bond(host)
|
|
45
|
+
primary = host.primary_interface
|
|
46
|
+
return if primary.nil?
|
|
47
|
+
return if primary.type == 'Nic::Bond'
|
|
48
|
+
|
|
49
|
+
neighbors = ::ForemanDiscovery::LldpNeighbors
|
|
50
|
+
.from_facts(host.facts_hash)
|
|
51
|
+
.get_neighbors_by_interface(primary.identifier)
|
|
52
|
+
|
|
53
|
+
return if neighbors.nil?
|
|
54
|
+
|
|
55
|
+
ip = primary.ip
|
|
56
|
+
mac = primary.mac
|
|
57
|
+
name = primary.name
|
|
58
|
+
primary.update(
|
|
59
|
+
:primary => false,
|
|
60
|
+
:provision => false,
|
|
61
|
+
:managed => false,
|
|
62
|
+
:name => nil,
|
|
63
|
+
:ip => nil
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
bond = Nic::Bond.create(
|
|
67
|
+
:identifier => "bond0",
|
|
68
|
+
:attached_devices => neighbors,
|
|
69
|
+
:primary => true,
|
|
70
|
+
:provision => true,
|
|
71
|
+
:name => name,
|
|
72
|
+
:ip => ip,
|
|
73
|
+
:mac => mac,
|
|
74
|
+
:host => host
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
bond.save!
|
|
78
|
+
host.interfaces.push(bond)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.from_facts(facts)
|
|
82
|
+
neighbors = self.new
|
|
83
|
+
interfaces = {}
|
|
84
|
+
facts.keys.each do |key|
|
|
85
|
+
key_s = key.to_s
|
|
86
|
+
next unless key_s.start_with? 'lldp_neighbor_'
|
|
87
|
+
|
|
88
|
+
property, iface = key_s[14..-1].split('_', 2)
|
|
89
|
+
if property == 'mngAddr'
|
|
90
|
+
protocol, iface = iface.split('_', 2)
|
|
91
|
+
property += '_' + protocol
|
|
92
|
+
end
|
|
93
|
+
interfaces[iface] = {} unless interfaces.has_key? iface
|
|
94
|
+
interfaces[iface][property] = facts[key]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
interfaces.each do |name, properties|
|
|
98
|
+
neighbors.set name, properties
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
neighbors
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lib": "/usr/share/fdi/facts:/opt/extension/facts",
|
|
3
|
+
"selinux": false,
|
|
4
|
+
"kernelversion": "3.10.0",
|
|
5
|
+
"memorysize": "2.39 GB",
|
|
6
|
+
"memoryfree": "2.18 GB",
|
|
7
|
+
"swapsize": "0.00 MB",
|
|
8
|
+
"swapfree": "0.00 MB",
|
|
9
|
+
"swapsize_mb": "0.00",
|
|
10
|
+
"swapfree_mb": "0.00",
|
|
11
|
+
"memorysize_mb": "2443.68",
|
|
12
|
+
"memoryfree_mb": "2228.96",
|
|
13
|
+
"kernel": "Linux",
|
|
14
|
+
"hardwareisa": "x86_64",
|
|
15
|
+
"interfaces": "eth0,eth0_2,lo",
|
|
16
|
+
"macaddress_eth0": "52:54:00:00:00:99",
|
|
17
|
+
"mtu_eth0": 1500,
|
|
18
|
+
"macaddress_eth0_2": "52:54:00:00:00:99",
|
|
19
|
+
"mtu_eth0_2": 1500,
|
|
20
|
+
"ipaddress_lo": "127.0.0.1",
|
|
21
|
+
"ipaddress": "192.168.99.56",
|
|
22
|
+
"ipaddress_eth0_2": "192.168.99.56",
|
|
23
|
+
"netmask_lo": "255.0.0.0",
|
|
24
|
+
"netmask_eth0_2": "255.255.255.0",
|
|
25
|
+
"mtu_lo": 65536,
|
|
26
|
+
"uptime": "0:23 hours",
|
|
27
|
+
"processors": {
|
|
28
|
+
"models": [
|
|
29
|
+
"AMD Opteron 63xx class CPU",
|
|
30
|
+
"AMD Opteron 63xx class CPU",
|
|
31
|
+
"AMD Opteron 63xx class CPU",
|
|
32
|
+
"AMD Opteron 63xx class CPU",
|
|
33
|
+
"AMD Opteron 63xx class CPU",
|
|
34
|
+
"AMD Opteron 63xx class CPU"
|
|
35
|
+
],
|
|
36
|
+
"count": 6,
|
|
37
|
+
"physicalcount": 6
|
|
38
|
+
},
|
|
39
|
+
"architecture": "x86_64",
|
|
40
|
+
"hardwaremodel": "x86_64",
|
|
41
|
+
"operatingsystem": "CentOS",
|
|
42
|
+
"os": {
|
|
43
|
+
"name": "CentOS",
|
|
44
|
+
"family": "RedHat",
|
|
45
|
+
"release": {
|
|
46
|
+
"major": "7",
|
|
47
|
+
"minor": "4",
|
|
48
|
+
"full": "7.4.1708"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"processor0": "AMD Opteron 63xx class CPU",
|
|
52
|
+
"processor1": "AMD Opteron 63xx class CPU",
|
|
53
|
+
"processor2": "AMD Opteron 63xx class CPU",
|
|
54
|
+
"processor3": "AMD Opteron 63xx class CPU",
|
|
55
|
+
"processor4": "AMD Opteron 63xx class CPU",
|
|
56
|
+
"processor5": "AMD Opteron 63xx class CPU",
|
|
57
|
+
"processorcount": 6,
|
|
58
|
+
"virtual": "kvm",
|
|
59
|
+
"is_virtual": true,
|
|
60
|
+
"vlans": "2",
|
|
61
|
+
"filesystems": "ext2,ext3,ext4,iso9660,squashfs",
|
|
62
|
+
"facterversion": "2.4.1",
|
|
63
|
+
"fqdn": "fdi",
|
|
64
|
+
"macaddress": "52:54:00:00:00:99",
|
|
65
|
+
"partitions": {
|
|
66
|
+
"vda1": {
|
|
67
|
+
"uuid": "86da4843-d401-45c7-95ae-f71ac60ce089",
|
|
68
|
+
"size": "14678016",
|
|
69
|
+
"filesystem": "ext4"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"kernelmajversion": "3.10",
|
|
73
|
+
"osfamily": "RedHat",
|
|
74
|
+
"path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/extension/bin:/root/bin",
|
|
75
|
+
"uptime_days": 0,
|
|
76
|
+
"netmask": "255.255.255.0",
|
|
77
|
+
"id": "root",
|
|
78
|
+
"uniqueid": "007f0200",
|
|
79
|
+
"network_lo": "127.0.0.0",
|
|
80
|
+
"network_eth0_2": "192.168.99.0",
|
|
81
|
+
"bios_vendor": "SeaBIOS",
|
|
82
|
+
"bios_version": "1.10.2-2.fc27",
|
|
83
|
+
"bios_release_date": "04/01/2014",
|
|
84
|
+
"manufacturer": "QEMU",
|
|
85
|
+
"productname": "Standard PC (i440FX + PIIX, 1996)",
|
|
86
|
+
"serialnumber": "Not Specified",
|
|
87
|
+
"uuid": "5F567C25-92DF-4D69-BF7B-98255E9A18D7",
|
|
88
|
+
"type": "Other",
|
|
89
|
+
"blockdevice_sr0_size": 301989888,
|
|
90
|
+
"blockdevice_sr0_vendor": "QEMU",
|
|
91
|
+
"blockdevice_sr0_model": "QEMU DVD-ROM",
|
|
92
|
+
"blockdevice_vda_size": 7516192768,
|
|
93
|
+
"blockdevice_vda_vendor": "0x1af4",
|
|
94
|
+
"blockdevices": "sr0,vda",
|
|
95
|
+
"operatingsystemrelease": "7.4.1708",
|
|
96
|
+
"uptime_seconds": 1426,
|
|
97
|
+
"rubyversion": "2.0.0",
|
|
98
|
+
"uptime_hours": 0,
|
|
99
|
+
"ps": "ps -ef",
|
|
100
|
+
"rubysitedir": "/usr/local/share/ruby/site_ruby/",
|
|
101
|
+
"operatingsystemmajrelease": "7",
|
|
102
|
+
"system_uptime": {
|
|
103
|
+
"seconds": 1426,
|
|
104
|
+
"hours": 0,
|
|
105
|
+
"days": 0,
|
|
106
|
+
"uptime": "0:23 hours"
|
|
107
|
+
},
|
|
108
|
+
"gid": "root",
|
|
109
|
+
"sshrsakey": "AAAAB3NzaC1yc2EAAAADAQABAAABAQC6wMNWRHdg9EkNyhz69xO7BEw173aAGS+h0siUeAZV1vBtUBxmMKUip03YKuOJNYyuFFM1Xoi3AvhuNau97L8lKLDwuafu/2nfb8ov6wWPpG84qSMul0Bk7ZQ2G+o6pgkKY9mQwLn65S5Cbi4u6xMRtOrv+2J6QoSXq9mIUupEKQqbrTCboIKiS6qwFkelWF2SL3Yc87dhedRsqdscgOemaBj8o3yTNswQJO9XnTT1JeSD9zj2uTNTQT2u17z3yAPmBHzBgBY2VbYj5BQfQ9AKGhxj/KsSlbCZXBksGLnMoAZl/NKnxy79fHM3pw2PPyGLsVJVEC5xJtDgTizkzSMp",
|
|
110
|
+
"sshfp_rsa": "SSHFP 1 1 0f09ec3c15a69053a0ac08ea419bc4647f3e7760\nSSHFP 1 2 84ba4b8589c52f74016f98d6fadafaa232f3c1b823e17d1668f88d19716c5318",
|
|
111
|
+
"sshecdsakey": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLyHOqoT/QLRlOuhWpxI5eHSyWbiU7y0KmZFKVvQnajFQWvyPLyy1C3URTCozIGnJJmJiX6CgeOBSE3dQM1Yuos=",
|
|
112
|
+
"sshfp_ecdsa": "SSHFP 3 1 e409cb6d894d92b61f8983a1ff24fc244b0ff3e7\nSSHFP 3 2 a01e6f5f4c7d402b62d01f3af2ec594c07054c5114c004cd5e6bbd76e1bacc01",
|
|
113
|
+
"sshed25519key": "AAAAC3NzaC1lZDI1NTE5AAAAIGOF1jRpvPpJL92iNPUwLAZYH8EC7U8EXHggVaqj09Mp",
|
|
114
|
+
"sshfp_ed25519": "SSHFP 4 1 65e5525827acebb42e15ed3bbe0143d87bc07155\nSSHFP 4 2 28281c896ac18da6dd272dd239a82a03eb549a813e228cd6b0f347bda4cf01a3",
|
|
115
|
+
"kernelrelease": "3.10.0-693.11.1.el7.x86_64",
|
|
116
|
+
"rubyplatform": "x86_64-linux",
|
|
117
|
+
"hostname": "fdi",
|
|
118
|
+
"timezone": "UTC",
|
|
119
|
+
"physicalprocessorcount": 6,
|
|
120
|
+
"discovery_version": "3.4.2",
|
|
121
|
+
"discovery_release": "20180102.1",
|
|
122
|
+
"discovery_bootif": "52:54:00:00:00:99",
|
|
123
|
+
"link_eth0": "true",
|
|
124
|
+
"link_eth0_2": "true",
|
|
125
|
+
"link_lo": "true",
|
|
126
|
+
"nmprimary_connection_id": "primary",
|
|
127
|
+
"nmprimary_connection_uuid": "12ce9b2c-f53c-11e7-99bc-525400000099",
|
|
128
|
+
"nmprimary_connection_stable-id": "",
|
|
129
|
+
"nmprimary_connection_interface-name": "",
|
|
130
|
+
"nmprimary_connection_type": "vlan",
|
|
131
|
+
"nmprimary_connection_autoconnect": "yes",
|
|
132
|
+
"nmprimary_connection_autoconnect-priority": "1",
|
|
133
|
+
"nmprimary_connection_autoconnect-retries": "-1",
|
|
134
|
+
"nmprimary_connection_timestamp": "0",
|
|
135
|
+
"nmprimary_connection_read-only": "no",
|
|
136
|
+
"nmprimary_connection_permissions": "",
|
|
137
|
+
"nmprimary_connection_zone": "",
|
|
138
|
+
"nmprimary_connection_master": "",
|
|
139
|
+
"nmprimary_connection_slave-type": "",
|
|
140
|
+
"nmprimary_connection_autoconnect-slaves": "-1",
|
|
141
|
+
"nmprimary_connection_secondaries": "",
|
|
142
|
+
"nmprimary_connection_gateway-ping-timeout": "0",
|
|
143
|
+
"nmprimary_connection_metered": "unknown",
|
|
144
|
+
"nmprimary_connection_lldp": "default",
|
|
145
|
+
"nmprimary_802-3-ethernet_port": "",
|
|
146
|
+
"nmprimary_802-3-ethernet_speed": "0",
|
|
147
|
+
"nmprimary_802-3-ethernet_duplex": "",
|
|
148
|
+
"nmprimary_802-3-ethernet_auto-negotiate": "no",
|
|
149
|
+
"nmprimary_802-3-ethernet_mac-address": "52:54:00:00:00:99",
|
|
150
|
+
"nmprimary_802-3-ethernet_cloned-mac-address": "",
|
|
151
|
+
"nmprimary_802-3-ethernet_generate-mac-address-mask": "",
|
|
152
|
+
"nmprimary_802-3-ethernet_mac-address-blacklist": "",
|
|
153
|
+
"nmprimary_802-3-ethernet_mtu": "auto",
|
|
154
|
+
"nmprimary_802-3-ethernet_s390-subchannels": "",
|
|
155
|
+
"nmprimary_802-3-ethernet_s390-nettype": "",
|
|
156
|
+
"nmprimary_802-3-ethernet_s390-options": "",
|
|
157
|
+
"nmprimary_802-3-ethernet_wake-on-lan": "default",
|
|
158
|
+
"nmprimary_802-3-ethernet_wake-on-lan-password": "",
|
|
159
|
+
"nmprimary_ipv4_method": "auto",
|
|
160
|
+
"nmprimary_ipv4_dns": "",
|
|
161
|
+
"nmprimary_ipv4_dns-search": "",
|
|
162
|
+
"nmprimary_ipv4_dns-options": "",
|
|
163
|
+
"nmprimary_ipv4_dns-priority": "0",
|
|
164
|
+
"nmprimary_ipv4_addresses": "",
|
|
165
|
+
"nmprimary_ipv4_gateway": "",
|
|
166
|
+
"nmprimary_ipv4_routes": "",
|
|
167
|
+
"nmprimary_ipv4_route-metric": "-1",
|
|
168
|
+
"nmprimary_ipv4_ignore-auto-routes": "no",
|
|
169
|
+
"nmprimary_ipv4_ignore-auto-dns": "no",
|
|
170
|
+
"nmprimary_ipv4_dhcp-client-id": "",
|
|
171
|
+
"nmprimary_ipv4_dhcp-timeout": "300",
|
|
172
|
+
"nmprimary_ipv4_dhcp-send-hostname": "no",
|
|
173
|
+
"nmprimary_ipv4_dhcp-hostname": "",
|
|
174
|
+
"nmprimary_ipv4_dhcp-fqdn": "",
|
|
175
|
+
"nmprimary_ipv4_never-default": "no",
|
|
176
|
+
"nmprimary_ipv4_may-fail": "yes",
|
|
177
|
+
"nmprimary_ipv4_dad-timeout": "-1",
|
|
178
|
+
"nmprimary_ipv6_method": "ignore",
|
|
179
|
+
"nmprimary_ipv6_dns": "",
|
|
180
|
+
"nmprimary_ipv6_dns-search": "",
|
|
181
|
+
"nmprimary_ipv6_dns-options": "",
|
|
182
|
+
"nmprimary_ipv6_dns-priority": "0",
|
|
183
|
+
"nmprimary_ipv6_addresses": "",
|
|
184
|
+
"nmprimary_ipv6_gateway": "",
|
|
185
|
+
"nmprimary_ipv6_routes": "",
|
|
186
|
+
"nmprimary_ipv6_route-metric": "-1",
|
|
187
|
+
"nmprimary_ipv6_ignore-auto-routes": "no",
|
|
188
|
+
"nmprimary_ipv6_ignore-auto-dns": "no",
|
|
189
|
+
"nmprimary_ipv6_never-default": "no",
|
|
190
|
+
"nmprimary_ipv6_may-fail": "yes",
|
|
191
|
+
"nmprimary_ipv6_ip6-privacy": "-1",
|
|
192
|
+
"nmprimary_ipv6_addr-gen-mode": "eui64",
|
|
193
|
+
"nmprimary_ipv6_dhcp-send-hostname": "yes",
|
|
194
|
+
"nmprimary_ipv6_dhcp-hostname": "",
|
|
195
|
+
"nmprimary_ipv6_token": "",
|
|
196
|
+
"nmprimary_vlan_parent": "",
|
|
197
|
+
"nmprimary_vlan_id": "2",
|
|
198
|
+
"nmprimary_vlan_flags": "1",
|
|
199
|
+
"nmprimary_vlan_ingress-priority-map": "",
|
|
200
|
+
"nmprimary_vlan_egress-priority-map": "",
|
|
201
|
+
"nmprimary_proxy_method": "none",
|
|
202
|
+
"nmprimary_proxy_browser-only": "no",
|
|
203
|
+
"nmprimary_proxy_pac-url": "",
|
|
204
|
+
"nmprimary_proxy_pac-script": "",
|
|
205
|
+
"nmprimary_general_name": "primary",
|
|
206
|
+
"nmprimary_general_uuid": "12ce9b2c-f53c-11e7-99bc-525400000099",
|
|
207
|
+
"nmprimary_general_devices": "eth0.2",
|
|
208
|
+
"nmprimary_general_state": "activating",
|
|
209
|
+
"nmprimary_general_default": "no",
|
|
210
|
+
"nmprimary_general_default6": "no",
|
|
211
|
+
"nmprimary_general_vpn": "no",
|
|
212
|
+
"nmprimary_general_zone": "",
|
|
213
|
+
"nmprimary_general_dbus-path": "/org/freedesktop/NetworkManager/ActiveConnection/3",
|
|
214
|
+
"nmprimary_general_con-path": "/org/freedesktop/NetworkManager/Settings/2",
|
|
215
|
+
"nmprimary_general_spec-object": "",
|
|
216
|
+
"nmprimary_general_master-path": ""
|
|
217
|
+
}
|