Skip to content

Commit a360b02

Browse files
committed
fix: Improve iLO ip address resolution on Windows
Closes #1023
1 parent 16006dc commit a360b02

File tree

6 files changed

+695
-17
lines changed

6 files changed

+695
-17
lines changed

Changes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ inventory:
2424
* fix #955: Add support for SimpleHelp remote_management inventory
2525
* fix #1017: Don't cleanup cpu on win32 from (R) trademark to keep cpu naming
2626
the same between OS
27+
* fix #1023: Improve iLO ip address resolution on Windows
2728

2829
remoteinventory:
2930
* fix RedHat RHN systemid set as WINPRODID

lib/GLPI/Agent/Task/Inventory/Generic/Networks/iLO.pm

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,38 +13,37 @@ use GLPI::Agent::Tools::Network;
1313
our $runMeIfTheseChecksFailed = ['GLPI::Agent::Task::Inventory::Generic::Ipmi::Lan'];
1414

1515
sub isEnabled {
16-
return OSNAME eq 'MSWin32' ?
17-
canRun("C:\\Program\ Files\\HP\\hponcfg\\hponcfg.exe") :
18-
canRun('hponcfg');
16+
return 1 if OSNAME eq 'MSWin32' && canRun("C:\\Program\ Files\\HP\\hponcfg\\hponcfg.exe");
17+
return canRun('hponcfg');
1918
}
2019

2120
sub _parseHponcfg {
2221
my (%params) = @_;
2322

2423
my @lines = getAllLines(%params)
25-
or return;
24+
or return $params{entry};
2625

27-
my $interface = {
26+
my $interface = $params{entry} // {
2827
DESCRIPTION => 'Management Interface - HP iLO',
2928
TYPE => 'ethernet',
3029
MANAGEMENT => 'iLO',
3130
STATUS => 'Down',
3231
};
3332

3433
foreach my $line (@lines) {
35-
if ($line =~ /<IP_ADDRESS VALUE="($ip_address_pattern)" ?\/>/) {
34+
if ($line =~ /<IP_ADDRESS VALUE *= *"($ip_address_pattern)" ?\/>/) {
3635
$interface->{IPADDRESS} = $1 unless $1 eq '0.0.0.0';
3736
}
38-
if ($line =~ /<SUBNET_MASK VALUE="($ip_address_pattern)" ?\/>/) {
37+
if ($line =~ /<SUBNET_MASK VALUE *= *"($ip_address_pattern)" ?\/>/) {
3938
$interface->{IPMASK} = $1;
4039
}
41-
if ($line =~ /<GATEWAY_IP_ADDRESS VALUE="($ip_address_pattern)"\/>/) {
40+
if ($line =~ /<GATEWAY_IP_ADDRESS VALUE *= *"($ip_address_pattern)"\/>/) {
4241
$interface->{IPGATEWAY} = $1;
4342
}
44-
if ($line =~ /<NIC_SPEED VALUE="([0-9]+)" ?\/>/) {
43+
if ($line =~ /<NIC_SPEED VALUE *= *"([0-9]+)" ?\/>/) {
4544
$interface->{SPEED} = $1;
4645
}
47-
if ($line =~ /<ENABLE_NIC VALUE="Y" ?\/>/) {
46+
if ($line =~ /<ENABLE_NIC VALUE *= *"Y" ?\/>/) {
4847
$interface->{STATUS} = 'Up';
4948
}
5049
if ($line =~ /not found/) {
@@ -55,7 +54,7 @@ sub _parseHponcfg {
5554
}
5655
$interface->{IPSUBNET} = getSubnetAddress(
5756
$interface->{IPADDRESS}, $interface->{IPMASK}
58-
);
57+
) if $interface->{IPADDRESS} && $interface->{IPMASK};
5958

6059
return $interface;
6160
}
@@ -66,16 +65,25 @@ sub doInventory {
6665
my $inventory = $params{inventory};
6766
my $logger = $params{logger};
6867

69-
my $command = OSNAME eq 'MSWin32' ?
70-
'"c:\Program Files\HP\hponcfg\hponcfg" /a /w output.txt >nul 2>&1 && type output.txt' :
71-
'hponcfg -aw -';
72-
68+
my $exe = OSNAME eq 'MSWin32' && canRun("C:\\Program\ Files\\HP\\hponcfg\\hponcfg.exe") ?
69+
'"C:\Program Files\HP\hponcfg\hponcfg.exe" ' : 'hponcfg ';
70+
my $command = $exe . (OSNAME eq 'MSWin32' ?
71+
'/a /w output.txt >nul 2>&1 && type output.txt' : '-aw -');
7372

7473
my $entry = _parseHponcfg(
7574
logger => $logger,
7675
command => $command
7776
);
7877

78+
if (OSNAME eq 'MSWin32') {
79+
$command = $exe . '/w output.txt >nul 2>&1 && type output.txt';
80+
$entry = _parseHponcfg(
81+
entry => $entry,
82+
logger => $logger,
83+
command => $command
84+
);
85+
}
86+
7987
$inventory->addEntry(
8088
section => 'NETWORKS',
8189
entry => $entry

resources/linux/hponcfg/sample3

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
<!-- HPONCFG VERSION = "6.0.0.0" -->
2+
<!-- Device: iLO 4 Firmware Version : 2.82 Firmware Date : 6-2-2023 -->
3+
<!-- Generated 09/23/25 12:08:24 -->
4+
<RIBCL VERSION="2.0">
5+
<LOGIN USER_LOGIN="admin" PASSWORD="password">
6+
<RIB_INFO mode="write">
7+
<MOD_NETWORK_SETTINGS>
8+
<ENABLE_NIC VALUE="Y" />
9+
<SHARED_NETWORK_PORT VALUE="N" />
10+
<VLAN_ENABLED VALUE="N" />
11+
12+
<SPEED_AUTOSELECT VALUE="Y" />
13+
14+
15+
<DHCP_ENABLE VALUE="Y" />
16+
<DHCP_GATEWAY VALUE="Y" />
17+
<DHCP_DNS_SERVER VALUE="Y" />
18+
<DHCP_WINS_SERVER VALUE="Y" />
19+
<DHCP_STATIC_ROUTE VALUE="Y" />
20+
<DHCP_DOMAIN_NAME VALUE="Y" />
21+
<DHCP_SNTP_SETTINGS VALUE="Y" />
22+
<REG_WINS_SERVER VALUE="Y" />
23+
<REG_DDNS_SERVER VALUE="Y" />
24+
<PING_GATEWAY VALUE="Y" />
25+
26+
27+
<SUBNET_MASK VALUE="255.255.254.0" />
28+
29+
<DNS_NAME VALUE="LUBSHVH51" />
30+
<DOMAIN_NAME VALUE="ilo.dc" />
31+
32+
33+
34+
<PRIM_WINS_SERVER VALUE="0.0.0.0" />
35+
<SEC_WINS_SERVER VALUE="0.0.0.0" />
36+
<SNTP_SERVER1 VALUE="192.168.51.254" />
37+
<SNTP_SERVER2 VALUE="" />
38+
<TIMEZONE VALUE="Atlantic/Reykjavik" />
39+
<STATIC_ROUTE_1 DEST="0.0.0.0" MASK="0.0.0.0" GATEWAY="0.0.0.0" />
40+
<STATIC_ROUTE_2 DEST="0.0.0.0" MASK="0.0.0.0" GATEWAY="0.0.0.0" />
41+
<STATIC_ROUTE_3 DEST="0.0.0.0" MASK="0.0.0.0" GATEWAY="0.0.0.0" />
42+
43+
<IPV6_STATIC_ROUTE_1 IPV6_DEST="::" PREFIXLEN="0" IPV6_GATEWAY="::" ADDR_STATUS="INACTIVE" />
44+
<IPV6_STATIC_ROUTE_2 IPV6_DEST="::" PREFIXLEN="0" IPV6_GATEWAY="::" ADDR_STATUS="INACTIVE" />
45+
<IPV6_STATIC_ROUTE_3 IPV6_DEST="::" PREFIXLEN="0" IPV6_GATEWAY="::" ADDR_STATUS="INACTIVE" />
46+
<IPV6_PRIM_DNS_SERVER VALUE="::" />
47+
<IPV6_SEC_DNS_SERVER VALUE="::" />
48+
<IPV6_TER_DNS_SERVER VALUE="::" />
49+
<IPV6_DEFAULT_GATEWAY VALUE="::" />
50+
<IPV6_PREFERRED_PROTOCOL VALUE="Y" />
51+
<IPV6_ADDR_AUTOCFG VALUE="Y" />
52+
<IPV6_REG_DDNS_SERVER VALUE="Y" />
53+
<DHCPV6_STATELESS_ENABLE VALUE="Y" />
54+
<DHCPV6_STATEFUL_ENABLE VALUE="Y" />
55+
<DHCPV6_RAPID_COMMIT VALUE="N" />
56+
<DHCPV6_DOMAIN_NAME VALUE="Y" />
57+
<DHCPV6_SNTP_SETTINGS VALUE="Y" />
58+
<DHCPV6_DNS_SERVER VALUE="Y" />
59+
<ILO_NIC_AUTO_SELECT VALUE="DISABLED" />
60+
<ILO_NIC_AUTO_SNP_SCAN VALUE="0" />
61+
<ILO_NIC_AUTO_DELAY VALUE="90" />
62+
<ILO_NIC_FAIL_OVER VALUE="DISABLED" />
63+
<ILO_NIC_FAIL_OVER_DELAY VALUE="300" />
64+
<SNP_PORT VALUE="1" />
65+
</MOD_NETWORK_SETTINGS>
66+
</RIB_INFO>
67+
<RIB_INFO mode="write">
68+
<MOD_GLOBAL_SETTINGS>
69+
<SESSION_TIMEOUT VALUE="30" />
70+
<ILO_FUNCT_ENABLED VALUE="Y" />
71+
<F8_PROMPT_ENABLED VALUE="Y" />
72+
<F8_LOGIN_REQUIRED VALUE="N" />
73+
<HTTPS_PORT VALUE="443" />
74+
<HTTP_PORT VALUE="80" />
75+
<REMOTE_CONSOLE_PORT VALUE="17990" />
76+
<VIRTUAL_MEDIA_PORT VALUE="17988" />
77+
<SNMP_ACCESS_ENABLED VALUE="Y" />
78+
<SNMP_PORT VALUE="161" />
79+
<SNMP_TRAP_PORT VALUE="162" />
80+
<SSH_PORT VALUE="22" />
81+
<SSH_STATUS VALUE="Y" />
82+
<SERIAL_CLI_STATUS VALUE="3" />
83+
<SERIAL_CLI_SPEED VALUE="1" />
84+
<VSP_LOG_ENABLE VALUE="N" />
85+
<MIN_PASSWORD VALUE="8" />
86+
<AUTHENTICATION_FAILURE_LOGGING VALUE="3" />
87+
<AUTHENTICATION_FAILURE_DELAY_SECS VALUE="10" />
88+
<AUTHENTICATION_FAILURES_BEFORE_DELAY VALUE="1" />
89+
<LOCK_CONFIGURATION VALUE="N" />
90+
<RBSU_POST_IP VALUE="Y" />
91+
<ENFORCE_AES VALUE="N" />
92+
<IPMI_DCMI_OVER_LAN_ENABLED VALUE="N" />
93+
<REMOTE_SYSLOG_ENABLE VALUE="N" />
94+
<REMOTE_SYSLOG_PORT VALUE="514" />
95+
<REMOTE_SYSLOG_SERVER_ADDRESS VALUE="" />
96+
<ALERTMAIL_ENABLE VALUE="N" />
97+
<ALERTMAIL_EMAIL_ADDRESS VALUE="" />
98+
<ALERTMAIL_SENDER_DOMAIN VALUE="" />
99+
<ALERTMAIL_SMTP_PORT VALUE="25" />
100+
<ALERTMAIL_SMTP_SERVER VALUE="" />
101+
<PROPAGATE_TIME_TO_HOST VALUE="N" />
102+
<IPMI_DCMI_OVER_LAN_PORT VALUE="623" />
103+
</MOD_GLOBAL_SETTINGS>
104+
</RIB_INFO>
105+
<DIR_INFO mode="write">
106+
<MOD_DIR_CONFIG>
107+
<DIR_AUTHENTICATION_ENABLED VALUE="N" />
108+
<DIR_LOCAL_USER_ACCT VALUE="Y" />
109+
<DIR_SERVER_ADDRESS VALUE="" />
110+
<DIR_SERVER_PORT VALUE="636" />
111+
<DIR_OBJECT_DN VALUE="" />
112+
<DIR_USER_CONTEXT_1 VALUE="" />
113+
<DIR_USER_CONTEXT_2 VALUE="" />
114+
<DIR_USER_CONTEXT_3 VALUE="" />
115+
<DIR_USER_CONTEXT_4 VALUE="" />
116+
<DIR_USER_CONTEXT_5 VALUE="" />
117+
<DIR_USER_CONTEXT_6 VALUE="" />
118+
<DIR_USER_CONTEXT_7 VALUE="" />
119+
<DIR_USER_CONTEXT_8 VALUE="" />
120+
<DIR_USER_CONTEXT_9 VALUE="" />
121+
<DIR_USER_CONTEXT_10 VALUE="" />
122+
<DIR_USER_CONTEXT_11 VALUE="" />
123+
<DIR_USER_CONTEXT_12 VALUE="" />
124+
<DIR_USER_CONTEXT_13 VALUE="" />
125+
<DIR_USER_CONTEXT_14 VALUE="" />
126+
<DIR_USER_CONTEXT_15 VALUE="" />
127+
<DIR_ENABLE_GRP_ACCT VALUE="N" />
128+
<DIR_GRPACCT1_NAME VALUE="Administrators" />
129+
<DIR_GRPACCT1_PRIV VALUE="1,2,3,4,5,6" />
130+
<DIR_GRPACCT1_SID VALUE="" />
131+
<DIR_GRPACCT2_NAME VALUE="Authenticated Users" />
132+
<DIR_GRPACCT2_PRIV VALUE="6" />
133+
<DIR_GRPACCT2_SID VALUE="S-1-5-11" />
134+
<DIR_KERBEROS_ENABLED VALUE="N" />
135+
<DIR_KERBEROS_REALM VALUE="" />
136+
<DIR_KERBEROS_KDC_ADDRESS VALUE="" />
137+
<DIR_KERBEROS_KDC_PORT VALUE="88" />
138+
<DIR_GENERIC_LDAP_ENABLED VALUE="N" />
139+
</MOD_DIR_CONFIG>
140+
</DIR_INFO>
141+
<RIB_INFO mode="write">
142+
<MOD_SNMP_IM_SETTINGS>
143+
<SNMP_ACCESS VALUE="Enable" />
144+
<SNMP_ADDRESS_1 VALUE="" />
145+
<SNMP_ADDRESS_1_ROCOMMUNITY VALUE="dboqp" />
146+
<SNMP_ADDRESS_1_TRAPCOMMUNITY VERSION="" VALUE="" />
147+
<SNMP_ADDRESS_2 VALUE="" />
148+
<SNMP_ADDRESS_2_ROCOMMUNITY VALUE="" />
149+
<SNMP_ADDRESS_2_TRAPCOMMUNITY VERSION="" VALUE="" />
150+
<SNMP_ADDRESS_3 VALUE="" />
151+
<SNMP_ADDRESS_3_ROCOMMUNITY VALUE="" />
152+
<SNMP_ADDRESS_3_TRAPCOMMUNITY VERSION="" VALUE="" />
153+
<SNMP_V3_ENGINE_ID VALUE="0x800000E804435A4A35333330433346" />
154+
<SNMP_PORT VALUE="161" />
155+
<SNMP_TRAP_PORT VALUE="162" />
156+
<TRAP_SOURCE_IDENTIFIER VALUE="iLO Hostname" />
157+
<RIB_TRAPS VALUE="Y" />
158+
<OS_TRAPS VALUE="Y" />
159+
<COLD_START_TRAP_BROADCAST VALUE="Y" />
160+
<SNMP_V1_TRAPS VALUE="Y" />
161+
<SNMP_PASSTHROUGH_STATUS VALUE="N" />
162+
<WEB_AGENT_IP_ADDRESS VALUE="LUBSHVH51" />
163+
<CIM_SECURITY_MASK VALUE="3" />
164+
<SNMP_SYS_CONTACT VALUE="" />
165+
<SNMP_SYS_LOCATION VALUE="" />
166+
<AGENTLESS_MANAGEMENT_ENABLE VALUE="Y" />
167+
<SNMP_SYSTEM_ROLE VALUE="" />
168+
<SNMP_SYSTEM_ROLE_DETAIL VALUE="" />
169+
</MOD_SNMP_IM_SETTINGS>
170+
</RIB_INFO>
171+
<SERVER_INFO mode="write">
172+
<SET_HOST_POWER_SAVER HOST_POWER_SAVER="4" />
173+
</SERVER_INFO>
174+
<USER_INFO mode="write">
175+
176+
<ADD_USER USER_NAME="Admin" USER_LOGIN="Admin" PASSWORD="%user_password%">
177+
<ADMIN_PRIV value="Y" />
178+
<REMOTE_CONS_PRIV value="Y" />
179+
<RESET_SERVER_PRIV value="Y" />
180+
<VIRTUAL_MEDIA_PRIV value="Y" />
181+
<CONFIG_ILO_PRIV value="Y" />
182+
</ADD_USER>
183+
<ADD_USER USER_NAME="ASSECO" USER_LOGIN="ASSECO" PASSWORD="%user_password%">
184+
<ADMIN_PRIV value="Y" />
185+
<REMOTE_CONS_PRIV value="Y" />
186+
<RESET_SERVER_PRIV value="Y" />
187+
<VIRTUAL_MEDIA_PRIV value="Y" />
188+
<CONFIG_ILO_PRIV value="Y" />
189+
</ADD_USER>
190+
<ADD_USER USER_NAME="getprice" USER_LOGIN="getprice" PASSWORD="%user_password%">
191+
<ADMIN_PRIV value="Y" />
192+
<REMOTE_CONS_PRIV value="Y" />
193+
<RESET_SERVER_PRIV value="Y" />
194+
<VIRTUAL_MEDIA_PRIV value="Y" />
195+
<CONFIG_ILO_PRIV value="Y" />
196+
</ADD_USER>
197+
</USER_INFO>
198+
<RIB_INFO mode="write">
199+
200+
</RIB_INFO>
201+
<RIB_INFO mode="write">
202+
<SET_FEDERATION_MULTICAST>
203+
<MULTICAST_FEDERATION_ENABLED VALUE="Yes" />
204+
<MULTICAST_DISCOVERY_ENABLED VALUE="Yes" />
205+
<MULTICAST_ANNOUNCEMENT_INTERVAL VALUE="600" />
206+
<IPV6_MULTICAST_SCOPE VALUE="Site" />
207+
<MULTICAST_TTL VALUE="5" />
208+
</SET_FEDERATION_MULTICAST>
209+
</RIB_INFO>
210+
<SSO_INFO mode="write">
211+
<MOD_SSO_SETTINGS>
212+
<TRUST_MODE VALUE="DISABLED" />
213+
<USER_ROLE LOGIN_PRIV="Y" />
214+
<USER_ROLE REMOTE_CONS_PRIV="N" />
215+
<USER_ROLE VIRTUAL_MEDIA_PRIV="N" />
216+
<USER_ROLE RESET_SERVER_PRIV="N" />
217+
<USER_ROLE CONFIG_ILO_PRIV="N" />
218+
<USER_ROLE ADMIN_PRIV="N" />
219+
<OPERATOR_ROLE LOGIN_PRIV="Y" />
220+
<OPERATOR_ROLE REMOTE_CONS_PRIV="Y" />
221+
<OPERATOR_ROLE VIRTUAL_MEDIA_PRIV="Y" />
222+
<OPERATOR_ROLE RESET_SERVER_PRIV="Y" />
223+
<OPERATOR_ROLE CONFIG_ILO_PRIV="N" />
224+
<OPERATOR_ROLE ADMIN_PRIV="N" />
225+
<ADMINISTRATOR_ROLE LOGIN_PRIV="Y" />
226+
<ADMINISTRATOR_ROLE REMOTE_CONS_PRIV="Y" />
227+
<ADMINISTRATOR_ROLE VIRTUAL_MEDIA_PRIV="Y" />
228+
<ADMINISTRATOR_ROLE RESET_SERVER_PRIV="Y" />
229+
<ADMINISTRATOR_ROLE CONFIG_ILO_PRIV="Y" />
230+
<ADMINISTRATOR_ROLE ADMIN_PRIV="Y" />
231+
</MOD_SSO_SETTINGS>
232+
</SSO_INFO>
233+
<SERVER_INFO mode="write">
234+
<SERVER_AUTO_PWR VALUE="RESTORE" />
235+
</SERVER_INFO>
236+
<SERVER_INFO MODE="write">
237+
<SET_POWER_CAP POWER_CAP="0" />
238+
</SERVER_INFO>
239+
</LOGIN>
240+
</RIBCL>

0 commit comments

Comments
 (0)