* Finally finished scan-apc-ups! Proved way harder than anticipated... (over a solid week of work!) In M3, this agent is no longer host-bound, and the UPSes to scan based on entries in 'upses' using this scan agent.

* Fixed a bug in Database->insert_or_update_power() where the check to see if 'power_ups_uuid' was passed in was reversed. Also fixed a bug where the convertion of the value to TRUE/FALSE for the old value wasn't being set correctly.
* Updated Server->get_definition() to only translate the host name to a uuid if the host uuid wasn't passed in. Added a sanity check on the UUID as well.
* Cleaned up how existing UPSes are displayed in Striker when managing UPSes. Also renamed the form's scan agents to match the real agent names.
* Fixed alert sorting in scan-apc-pdu.

Signed-off-by: Digimer <digimer@alteeve.ca>
main
Digimer 4 years ago
parent 7516047c15
commit 713f77bc78
  1. 1
      Anvil/Tools/Alert.pm
  2. 4
      Anvil/Tools/Convert.pm
  3. 7
      Anvil/Tools/Database.pm
  4. 10
      Anvil/Tools/Get.pm
  5. 8
      Anvil/Tools/Server.pm
  6. 6
      cgi-bin/striker
  7. 55
      html/skins/alteeve/anvil.html
  8. 7
      scancore-agents/scan-apc-pdu/scan-apc-pdu
  9. 2
      scancore-agents/scan-apc-pdu/scan-apc-pdu.xml
  10. 4585
      scancore-agents/scan-apc-ups/scan-apc-ups
  11. 76
      scancore-agents/scan-apc-ups/scan-apc-ups.sql
  12. 157
      scancore-agents/scan-apc-ups/scan-apc-ups.xml
  13. 4
      share/anvil.sql
  14. 9
      share/words.xml
  15. 16
      tools/scancore
  16. 8
      tools/striker-manage-install-target
  17. 370
      tools/test.pl

@ -605,6 +605,7 @@ INSERT INTO
return($alert_uuid);
}
### TODO: Write this, maybe? Or remove it and ->warning()?
=head2 error

@ -526,7 +526,7 @@ sub celsius_to_fahrenheit
}
if ($temperature !~ /^\d/)
{
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "error_0165", variables => { $temperature => temperature }});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "error_0165", variables => { temperature => $temperature }});
return("!!error!!");
}
@ -702,7 +702,7 @@ sub fahrenheit_to_celsius
}
if ($temperature !~ /^\d/)
{
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "error_0165", variables => { $temperature => temperature }});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "error_0165", variables => { temperature => $temperature }});
return("!!error!!");
}

@ -8680,7 +8680,7 @@ sub insert_or_update_power
power_charge_percentage => $power_charge_percentage,
}});
if ($power_ups_uuid)
if (not $power_ups_uuid)
{
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0020", variables => { method => "Database->insert_or_update_power()", parameter => "power_ups_uuid" }});
return("");
@ -8732,7 +8732,6 @@ WHERE
{
my $query = "
SELECT
power_record_locator,
power_ups_uuid,
power_on_battery,
power_seconds_left,
@ -8767,7 +8766,7 @@ WHERE
}});
# Convert the read-in "on battery" value to TRUE/FALSE
$old_power_on_battery = $power_on_battery ? "TRUE" : "FALSE";
$old_power_on_battery = $old_power_on_battery ? "TRUE" : "FALSE";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { old_power_on_battery => $old_power_on_battery }});
if (($old_power_ups_uuid ne $power_ups_uuid) or
@ -10388,6 +10387,8 @@ This is the scan agent (or program name) setting this score.
This is the host (uuid) that the sensor was read from. This is important as ScanCore on a striker will read available thermal data from a node using it's IPMI data.
NOTE: For shared temperature sensors (like UPSes), set this to the device UUID (ie: C<< upses >> -> C<<ups_uuid>>). Devices that use the device will add these values to their own when doing post-scan calculations.
=head3 temperature_sensor_name (required)
This is the name of the free-form, descriptive name of the sensor reporting the temperature.

@ -1371,7 +1371,7 @@ sub server_uuid_from_name
if ($anvil_uuid)
{
# Make sure the Anvil! UUID is valid.
my $anvil_name = $anvil->Get->anvil_name_from_uuid({anvil_uuid => $anvil_uuid});
my $anvil_name = $anvil->Get->anvil_name_from_uuid({debug => $debug, anvil_uuid => $anvil_uuid});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { anvil_name => $anvil_name }});
if ((not $anvil_name) or ($anvil_name eq "!!error!!"))
{
@ -1406,12 +1406,12 @@ AND
if ($count == 1)
{
# Found it
$server_name = defined $results->[0]->[0] ? $results->[0]->[0] : "";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { server_name => $server_name }});
$server_uuid = defined $results->[0]->[0] ? $results->[0]->[0] : "";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { server_uuid => $server_uuid }});
}
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { server_name => $server_name }});
return($server_name);
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { server_uuid => $server_uuid }});
return($server_uuid);
}

@ -370,7 +370,7 @@ sub get_definition
my $parameter = shift;
my $anvil = $self->parent;
my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3;
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0125", variables => { method => "Server->get_runtime()" }});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0125", variables => { method => "Server->get_definition()" }});
my $definition_xml = "";
my $anvil_uuid = defined $parameter->{anvil_uuid} ? $parameter->{anvil_uuid} : "";
@ -382,12 +382,16 @@ sub get_definition
server_uuid => $server_uuid,
}});
if (not $server_uuid)
{
$server_uuid = $anvil->Get->server_uuid_from_name({
debug => $debug,
server_name => $server_name,
anvil_uuid => $anvil_uuid,
});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { server_uuid => $server_uuid }});
if ($server_uuid)
}
if (($server_uuid) && ($anvil->Validate->uuid({uuid => $server_uuid})))
{
my $query = "SELECT server_definition_xml FROM server_definitions WHERE server_definition_server_uuid = ".$anvil->Database->quote($server_uuid).";";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { query => $query }});

@ -4017,17 +4017,15 @@ sub show_ups_config_main_menu
my $ups_uuid = $anvil->data->{upses}{ups_name}{$ups_name}{ups_uuid};
my $ups_agent = $anvil->data->{upses}{ups_name}{$ups_name}{ups_agent};
my $ups_ip_address = $anvil->data->{upses}{ups_name}{$ups_name}{ups_ip_address};
my $say_ups_device = $ups_agent." ".$ups_ip_address;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
ups_uuid => $ups_uuid,
ups_agent => $ups_agent,
ups_ip_address => $ups_ip_address,
say_ups_device => $say_ups_device,
}});
$ups_devices .= $anvil->Template->get({file => "anvil.html", name => "existing-ups-entry", variables => {
name => $ups_name,
ip_address => $say_ups_device,
ip_address => $ups_ip_address,
ups_agent => $ups_agent,
ups_uuid => $ups_uuid,
}});
@ -4066,7 +4064,7 @@ sub show_ups_config_main_menu
options => $brands,
blank => 0,
'sort' => 1,
selected => $anvil->data->{cgi}{ups_agent}{value} ? $anvil->data->{cgi}{ups_agent}{value} : "scan_ups_apc",
selected => $anvil->data->{cgi}{ups_agent}{value} ? $anvil->data->{cgi}{ups_agent}{value} : "scan-apc-ups",
class => "input_clear",
});
my $ups_count_select = $anvil->Template->select_form({

@ -1896,7 +1896,14 @@
<td>
&nbsp;
</td>
<!-- agent and arguments -->
<!-- Scan agent -->
<td class="column_header">
#!string!header_0041!#
</td>
<td>
&nbsp;
</td>
<!-- IP Address -->
<td class="column_header">
#!string!header_0025!#
</td>
@ -1913,40 +1920,30 @@
</tr>
<!-- end existing-upses -->
<!-- start existing-fence-device-entry -->
<!-- start existing-ups-entry -->
<tr style="border: 1px dotted #7f7f7f;">
<!-- Device Name -->
<td>
<a href="?anvil=true&task=fences&fence_agent=#!variable!fence_agent!#&fence_count=1&fence_uuid_1=#!variable!fence_uuid!#" class="fixed_link_highlight">#!variable!name!#</a>
<a href="?anvil=true&task=upses&ups_agent=#!variable!ups_agent!#&ups_count=1&ups_uuid_1=#!variable!ups_uuid!#" class="fixed_link_highlight">#!variable!name!#</a>
</td>
<td>
&nbsp;
</td>
<!-- Delete -->
<td style="text-align: center;">
<a href="?anvil=true&task=fences&delete_fence_uuid=#!variable!fence_uuid!#" class="fixed_link_highlight"><img src="#!data!skin::url!#/images/delete.png" alt="#!string!striker_0068!#" style="height: .8em;"></a>
<a href="?anvil=true&task=upses&delete_ups_uuid=#!variable!ups_uuid!#" class="fixed_link_highlight"><img src="#!data!skin::url!#/images/delete.png" alt="#!string!striker_0068!#" style="height: .8em;"></a>
</td>
<td>
&nbsp;
</td>
<!-- Scan agent -->
<td class="fixed_width">
#!variable!arguments!#
</td>
</tr>
<!-- end existing-fence-device-entry -->
<!-- start existing-ups-entry -->
<tr style="border: 1px dotted #7f7f7f;">
<td>
<a href="?anvil=true&task=upses&ups_agent=#!variable!ups_agent!#&ups_count=1&ups_uuid_1=#!variable!ups_uuid!#" class="fixed_link_highlight">#!variable!name!#</a>
</td>
<td>
&nbsp;
</td>
<td style="text-align: center;">
<a href="?anvil=true&task=upses&delete_ups_uuid=#!variable!ups_uuid!#" class="fixed_link_highlight"><img src="#!data!skin::url!#/images/delete.png" alt="#!string!striker_0068!#" style="height: .8em;"></a>
#!variable!ups_agent!#
</td>
<td>
&nbsp;
</td>
<!-- IP Address -->
<td class="fixed_width">
#!variable!ip_address!#
</td>
@ -2071,6 +2068,26 @@
</table>
<!-- end fence-agent-menu -->
<!-- start existing-fence-device-entry -->
<tr style="border: 1px dotted #7f7f7f;">
<td>
<a href="?anvil=true&task=fences&fence_agent=#!variable!fence_agent!#&fence_count=1&fence_uuid_1=#!variable!fence_uuid!#" class="fixed_link_highlight">#!variable!name!#</a>
</td>
<td>
&nbsp;
</td>
<td style="text-align: center;">
<a href="?anvil=true&task=fences&delete_fence_uuid=#!variable!fence_uuid!#" class="fixed_link_highlight"><img src="#!data!skin::url!#/images/delete.png" alt="#!string!striker_0068!#" style="height: .8em;"></a>
</td>
<td>
&nbsp;
</td>
<td class="fixed_width">
#!variable!arguments!#
</td>
</tr>
<!-- end existing-fence-device-entry -->
<!-- start ups-agent-menu -->
<table align="center" class="anvil_main_menu">
<script type="text/javascript" src="/skins/alteeve/anvil.js"></script>

@ -89,7 +89,8 @@ if (($< != 0) && ($> != 0))
}
$anvil->data->{'scan-apc-pdu'} = {
alert_sort => 0,
# Starts at '2' so that anything set to '1' manually shows first
alert_sort => 2,
disable => 0,
# Ticks are genera lly in 10ms increments
ticks_per_second => 100,
@ -627,8 +628,8 @@ sub find_changes
my $variables = {
name => $pdu_host_name,
old_model_number => $old_scan_apc_pdu_serial_number,
new_model_number => $new_scan_apc_pdu_serial_number,
old_serial_number => $old_scan_apc_pdu_serial_number,
new_serial_number => $new_scan_apc_pdu_serial_number,
};
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "scan_apc_pdu_message_0008", variables => $variables});
$anvil->Alert->register({

@ -30,7 +30,7 @@ NOTE: All string keys MUST be prefixed with the agent name! ie: 'scan_apc_pdu_lo
<key name="scan_apc_pdu_message_0005">Able to now read the number of outlets for the PDU: [#!variable!name!#] at IP: [#!variable!ip!#] (sn: #!variable!serial_number!#).</key>
<key name="scan_apc_pdu_message_0006">The PDU: [#!variable!name!#] with the serial number: [#!variable!serial_number!#] at the IP address: [#!variable!ip_address!#] has returned.</key>
<key name="scan_apc_pdu_message_0007">The model of the PDU: [#!variable!name!#] has changed from; [#!variable!old_model_number!#] to: [#!variable!new_model_number!#]</key>
<key name="scan_apc_pdu_message_0008">The serial number of the PDU: [#!variable!name!#] has changed from; [#!variable!old_model_number!#] to: [#!variable!new_model_number!#]. This is expected if the PDU was replaced.</key>
<key name="scan_apc_pdu_message_0008">The serial number of the PDU: [#!variable!name!#] has changed from; [#!variable!old_serial_number!#] to: [#!variable!new_serial_number!#]. This is expected if the PDU was replaced.</key>
<key name="scan_apc_pdu_message_0009">The manufacture date of the PDU: [#!variable!name!#] has changed from: [#!variable!old_manufacture_date!#] to: [#!variable!new_manufacture_date!#]. This is expected if the PDU was replaced.</key>
<key name="scan_apc_pdu_message_0010">The firmware on the PDU: [#!variable!name!#] has changed from: [#!variable!old_firmware_version!#] to: [#!variable!new_firmware_version!#].</key>
<key name="scan_apc_pdu_message_0011">The hardware version on the PDU: [#!variable!name!#] has changed from: [#!variable!old_hardware_version!#] to: [#!variable!new_hardware_version!#]. This is expected if the PDU was replaced.</key>

File diff suppressed because it is too large Load Diff

@ -15,7 +15,6 @@ CREATE TABLE scan_apc_upses (
scan_apc_ups_last_transfer_reason numeric not null,
scan_apc_ups_manufactured_date text not null,
scan_apc_ups_model text not null,
scan_apc_ups_temperature_units text not null,
scan_apc_ups_nmc_firmware_version text not null,
scan_apc_ups_nmc_serial_number text not null,
scan_apc_ups_nmc_mac_address text not null,
@ -41,7 +40,6 @@ CREATE TABLE history.scan_apc_upses (
scan_apc_ups_last_transfer_reason numeric,
scan_apc_ups_manufactured_date text,
scan_apc_ups_model text,
scan_apc_ups_temperature_units text,
scan_apc_ups_nmc_firmware_version text,
scan_apc_ups_nmc_serial_number text,
scan_apc_ups_nmc_mac_address text,
@ -57,6 +55,7 @@ BEGIN
SELECT INTO history_scan_apc_upses * FROM scan_apc_upses WHERE scan_apc_ups_uuid=new.scan_apc_ups_uuid;
INSERT INTO history.scan_apc_upses
(scan_apc_ups_uuid,
scan_apc_ups_ups_uuid,
scan_apc_ups_serial_number,
scan_apc_ups_name,
scan_apc_ups_ip,
@ -69,30 +68,29 @@ BEGIN
scan_apc_ups_last_transfer_reason,
scan_apc_ups_manufactured_date,
scan_apc_ups_model,
scan_apc_ups_temperature_units,
scan_apc_ups_nmc_firmware_version,
scan_apc_ups_nmc_serial_number,
scan_apc_ups_nmc_mac_address,
modified_date)
VALUES
(history_scan_apc_ups.scan_apc_ups_uuid,
history_scan_apc_ups.scan_apc_ups_serial_number,
history_scan_apc_ups.scan_apc_ups_name,
history_scan_apc_ups.scan_apc_ups_ip,
history_scan_apc_ups.scan_apc_ups_ac_restore_delay,
history_scan_apc_ups.scan_apc_ups_shutdown_delay,
history_scan_apc_ups.scan_apc_ups_firmware_version,
history_scan_apc_ups.scan_apc_ups_health,
history_scan_apc_ups.scan_apc_ups_high_transfer_voltage,
history_scan_apc_ups.scan_apc_ups_low_transfer_voltage,
history_scan_apc_ups.scan_apc_ups_last_transfer_reason,
history_scan_apc_ups.scan_apc_ups_manufactured_date,
history_scan_apc_ups.scan_apc_ups_model,
history_scan_apc_ups.scan_apc_ups_temperature_units,
history_scan_apc_ups.scan_apc_ups_nmc_firmware_version,
history_scan_apc_ups.scan_apc_ups_nmc_serial_number,
history_scan_apc_ups.scan_apc_ups_nmc_mac_address,
history_scan_apc_ups.modified_date);
(history_scan_apc_upses.scan_apc_ups_uuid,
history_scan_apc_upses.scan_apc_ups_ups_uuid,
history_scan_apc_upses.scan_apc_ups_serial_number,
history_scan_apc_upses.scan_apc_ups_name,
history_scan_apc_upses.scan_apc_ups_ip,
history_scan_apc_upses.scan_apc_ups_ac_restore_delay,
history_scan_apc_upses.scan_apc_ups_shutdown_delay,
history_scan_apc_upses.scan_apc_ups_firmware_version,
history_scan_apc_upses.scan_apc_ups_health,
history_scan_apc_upses.scan_apc_ups_high_transfer_voltage,
history_scan_apc_upses.scan_apc_ups_low_transfer_voltage,
history_scan_apc_upses.scan_apc_ups_last_transfer_reason,
history_scan_apc_upses.scan_apc_ups_manufactured_date,
history_scan_apc_upses.scan_apc_ups_model,
history_scan_apc_upses.scan_apc_ups_nmc_firmware_version,
history_scan_apc_upses.scan_apc_ups_nmc_serial_number,
history_scan_apc_upses.scan_apc_ups_nmc_mac_address,
history_scan_apc_upses.modified_date);
RETURN NULL;
END;
$$
@ -109,7 +107,7 @@ CREATE TABLE scan_apc_ups_batteries (
scan_apc_ups_battery_uuid uuid not null primary key,
scan_apc_ups_battery_scan_apc_ups_uuid uuid not null,
scan_apc_ups_battery_number numeric not null,
scan_apc_ups_battery_replacement_date text not null,
scan_apc_ups_battery_next_replacement_date text not null,
scan_apc_ups_battery_health numeric not null,
scan_apc_ups_battery_model text not null,
scan_apc_ups_battery_percentage_charge numeric not null,
@ -122,14 +120,14 @@ CREATE TABLE scan_apc_ups_batteries (
FOREIGN KEY(scan_apc_ups_battery_scan_apc_ups_uuid) REFERENCES scan_apc_upses(scan_apc_ups_uuid)
);
ALTER TABLE scan_apc_ups_battery OWNER TO admin;
ALTER TABLE scan_apc_ups_batteries OWNER TO admin;
CREATE TABLE history.scan_apc_ups_batteries (
history_id bigserial,
scan_apc_ups_battery_uuid uuid,
scan_apc_ups_battery_scan_apc_ups_uuid uuid,
scan_apc_ups_battery_number numeric,
scan_apc_ups_battery_replacement_date text,
scan_apc_ups_battery_next_replacement_date text,
scan_apc_ups_battery_health numeric,
scan_apc_ups_battery_model text,
scan_apc_ups_battery_percentage_charge numeric,
@ -152,7 +150,7 @@ BEGIN
(scan_apc_ups_battery_uuid,
scan_apc_ups_battery_scan_apc_ups_uuid,
scan_apc_ups_battery_number,
scan_apc_ups_battery_replacement_date,
scan_apc_ups_battery_next_replacement_date,
scan_apc_ups_battery_health,
scan_apc_ups_battery_model,
scan_apc_ups_battery_percentage_charge,
@ -163,19 +161,19 @@ BEGIN
scan_apc_ups_battery_voltage,
modified_date)
VALUES
(history_scan_apc_ups_battery.scan_apc_ups_battery_uuid,
history_scan_apc_ups_battery.scan_apc_ups_battery_scan_apc_ups_uuid,
history_scan_apc_ups_battery.scan_apc_ups_battery_number,
history_scan_apc_ups_battery.scan_apc_ups_battery_replacement_date,
history_scan_apc_ups_battery.scan_apc_ups_battery_health,
history_scan_apc_ups_battery.scan_apc_ups_battery_model,
history_scan_apc_ups_battery.scan_apc_ups_battery_percentage_charge,
history_scan_apc_ups_battery.scan_apc_ups_battery_last_replacement_date,
history_scan_apc_ups_battery.scan_apc_ups_battery_state,
history_scan_apc_ups_battery.scan_apc_ups_battery_temperature,
history_scan_apc_ups_battery.scan_apc_ups_battery_alarm_temperature,
history_scan_apc_ups_battery.scan_apc_ups_battery_voltage,
history_scan_apc_ups_battery.modified_date);
(history_scan_apc_ups_batteries.scan_apc_ups_battery_uuid,
history_scan_apc_ups_batteries.scan_apc_ups_battery_scan_apc_ups_uuid,
history_scan_apc_ups_batteries.scan_apc_ups_battery_number,
history_scan_apc_ups_batteries.scan_apc_ups_battery_next_replacement_date,
history_scan_apc_ups_batteries.scan_apc_ups_battery_health,
history_scan_apc_ups_batteries.scan_apc_ups_battery_model,
history_scan_apc_ups_batteries.scan_apc_ups_battery_percentage_charge,
history_scan_apc_ups_batteries.scan_apc_ups_battery_last_replacement_date,
history_scan_apc_ups_batteries.scan_apc_ups_battery_state,
history_scan_apc_ups_batteries.scan_apc_ups_battery_temperature,
history_scan_apc_ups_batteries.scan_apc_ups_battery_alarm_temperature,
history_scan_apc_ups_batteries.scan_apc_ups_battery_voltage,
history_scan_apc_ups_batteries.modified_date);
RETURN NULL;
END;
$$
@ -210,7 +208,7 @@ CREATE TABLE history.scan_apc_ups_input (
scan_apc_ups_input_sensitivity numeric,
scan_apc_ups_input_voltage numeric,
scan_apc_ups_input_1m_maximum_input_voltage numeric,
scan_apc_ups_input_1m_minimum_input_voltage numeric
scan_apc_ups_input_1m_minimum_input_voltage numeric,
modified_date timestamp with time zone not null
);
ALTER TABLE history.scan_apc_ups_input OWNER TO admin;

@ -48,33 +48,154 @@ NOTE: All string keys MUST be prefixed with the agent name! ie: 'scan_apc_ups_lo
- #!variable!health!#
- #!variable!last_transfer_reason!#
</key>
<key name="scan_apc_ups_message_0003">A new UPS battery has been found;
-=] In UPS: [#!variable!ups_name!#]
- Battery Number: ........... [#!variable!battery_number!#]
- Model Number: ............. [#!variable!model!#]
- Install Date: ............. [#!variable!install_date!#] (yyyy/mm/dd)
- Estimated Replacement Date: [#!variable!replacement_date!#] (yyyy/mm/dd)
- Current Charge Percentage: [#!variable!charge_percentage!#]
- Health: ................... [#!variable!health!#]
- State: .................... [#!variable!state!#]
- Temperature: .............. [#!variable!temperature!#]°C (alarms above: [#!variable!alarm_temperature!#]°C)
- Voltage: .................. [#!variable!battery_voltage!#] vDC
</key>
<key name="scan_apc_ups_message_0004">
-=] Input power to: [#!variable!ups_name!#]
- Last minute minimum / maximum voltage: [#!variable!1m_minimum_input_voltage!#] / [#!variable!1m_maximum_input_voltage!#]
- Input sensitivity: ................... [#!variable!input_sensitivity!#]
- Input frequence: ..................... [#!variable!input_frequency!#]
</key>
<key name="scan_apc_ups_message_0005">
-=] Output power from: [#!variable!ups_name!#]
- #!variable!battery_health!#
- #!variable!battery_state!#
- #!variable!say_time_on_batteries!#
- Delay between shutdown command received and actual shut down: [#!variable!shutdown_delay!#] second(s).
- #!variable!input_sensitivity!#
-=] Current Sensor Values:
- Battery Temperature: [#!variable!battery_temperature!#]°C (alarms at: [#!variable!battery_alarm_temperature!#]°C)
- Battery Voltage: [#!variable!battery_voltage!#] vDC
- Input Power Frequency: [#!variable!input_frequency!#] Hz
- Input Power Voltage: [#!variable!input_voltage!#] vAC
- In the last 60 seconds, the input voltage ranged from: [#!variable!input_1m_minimum_input_voltage!#] to: [#!variable!input_1m_maximum_input_voltage!#] vAC.
- Estimated Runtime: [#!variable!say_estimated_runtime!#]
- Output Load Percentage: [#!variable!output_load_percentage!#] %
- Output Power Frequency: [#!variable!output_frequency!#] Hz
- Output Power Voltage: [#!variable!output_voltage!#] vAC
- Lifetime Power Output: [#!variable!output_total_output!#] kWh
- Voltage: ............. [#!variable!voltage!#]
- Lifetime Power Output: [#!variable!total_output!#] kWh
- Time on batteries: ... [#!variable!time_on_batteries!#]
- Load percentage: ..... [#!variable!load_percentage!#]
</key>
<key name="scan_apc_ups_message_0006">The UPS is not running on batteries.</key>
<key name="scan_apc_ups_message_0007">The UPS has been running on batteries for: [#!variable!output_time_on_batteries!#]</key>
<key name="scan_apc_ups_message_0008">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#]'s estimated replacement date has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#] (yyyy/mm/dd).</key>
<key name="scan_apc_ups_message_0009">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] health has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_message_0010">
The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] has failed! The health changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].
- Note: The battery will need to be replaced. Please order an APC brand: [#!variable!battery_model!#] battery.
</key>
<key name="scan_apc_ups_message_0011">
The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] has been replaced. The health value changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].
- Note: The battery appears to have been replaced with a: [#!variable!battery_model!#] model battery.
</key>
<key name="scan_apc_ups_message_0012">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] model has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_message_0013">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] has finished charging. The charge percentage changed from: [#!variable!old_value!#%] to: [#!variable!new_value!#%].</key>
<key name="scan_apc_ups_message_0014">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] has charged to its "minimum good" charge percentage of: [#!variable!low_charge_clear!#%]. The charge level changed from: [#!variable!old_value!#%] to: [#!variable!new_value!#%].</key>
<key name="scan_apc_ups_message_0015">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] is discharging. The charge percent dropped from: [#!variable!old_value!#%] to: [#!variable!new_value!#%].</key>
<key name="scan_apc_ups_message_0016">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] has discharged below the warning threshold of: [#!variable!low_charge_alert!#]. The charge percent dropped from: [#!variable!old_value!#%] to: [#!variable!new_value!#%].</key>
<key name="scan_apc_ups_message_0017">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#]'s last replacement date has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#] (yyyy/mm/dd). This is most likely due to an administrator replacing the battery pack in the UPS.</key>
<key name="scan_apc_ups_message_0018">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] has entered a warning state! The status changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_message_0019">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] has recovered from a warning state. The status changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_message_0020">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] temperature has changed from: [#!variable!old_value!#°C] to: [#!variable!new_value!#°C].</key>
<key name="scan_apc_ups_message_0021">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] alarm temperature has changed from: [#!variable!old_value!#°C] to: [#!variable!new_value!#°C].</key>
<key name="scan_apc_ups_message_0022">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] voltage has changed from: [#!variable!old_value!# vDC] to: [#!variable!new_value!# vDC].</key>
<key name="scan_apc_ups_message_0023">The UPS: [#!variable!ups_name!#] battery number: [#!variable!battery_number!#] temperature has jumped: [#!variable!difference!#°C] in: [#!variable!time_span!#] seconds! The temperature rose from: [#!variable!old_value!#°C] to: [#!variable!new_value!#°C].</key>
<!-- Units -->
<key name="scan_apc_ups_unit_0001">Unknown</key>
<!-- TODO: Entries below should have been messages... Rework this later. -->
<!-- Warnings -->
<key name="scan_apc_ups_warning_0001">
-=] The temperature of: [#!variable!ups_name!#]'s, battery: [#!variable!battery_number!#] is now critically high!
- Current temperature: .................. [#!variable!temperature!#°C]
- Warning/critical threshold temps: ..... [#!variable!warning_temp!#°C]/[#!variable!critical_temp!#°C]
- Clear warning/critical threshold temps: [#!variable!clear_critical_temp!#°C]/[#!variable!clear_warning_temp!#°C]
Warning: If the UPS battery is the only high temperature, it could be a sign that the battery is failing. This can lead to battery swelling which could cause the battery to get stuck in the UPS. If this is the only high temperature, it is strongly advised that you check the battery is not swelling as soon as possible.
</key>
<key name="scan_apc_ups_warning_0002">
-=] The temperature of: [#!variable!ups_name!#]'s battery: [#!variable!battery_number!#] has dropped and is no longer critically high.
- Current temperature: .................. [#!variable!temperature!#°C]
- Warning/critical threshold temps: ..... [#!variable!warning_temp!#°C]/[#!variable!critical_temp!#°C]
- Clear warning/critical threshold temps: [#!variable!clear_critical_temp!#°C]/[#!variable!clear_warning_temp!#°C]
</key>
<key name="scan_apc_ups_warning_0003">
-=] The temperature of: [#!variable!ups_name!#]'s, battery: [#!variable!battery_number!#] is above the warning temperature threshold. It is still under maximum allowed.
- Current temperature: .................. [#!variable!temperature!#°C]
- Warning/critical threshold temps: ..... [#!variable!warning_temp!#°C]/[#!variable!critical_temp!#°C]
- Clear warning/critical threshold temps: [#!variable!clear_critical_temp!#°C]/[#!variable!clear_warning_temp!#°C]
Warning: If the UPS battery is the only high temperature, it could be a sign that the battery is failing. This can lead to battery swelling which could cause the battery to get stuck in the UPS. If this is the only high temperature, it is strongly advised that you check the battery is not swelling as soon as possible.
</key>
<key name="scan_apc_ups_warning_0004">
-=] The temperature of: [#!variable!ups_name!#]'s battery: [#!variable!battery_number!#] has dropped back down to nominal levels.
- Current temperature: .................. [#!variable!temperature!#°C]
- Warning/critical threshold temps: ..... [#!variable!warning_temp!#°C]/[#!variable!critical_temp!#°C]
- Clear warning/critical threshold temps: [#!variable!clear_critical_temp!#°C]/[#!variable!clear_warning_temp!#°C]
</key>
<key name="scan_apc_ups_warning_0005">The UPS: [#!variable!old_ups_name!#] has been renamed to: [#!variable!new_ups_name!#]</key>
<key name="scan_apc_ups_warning_0006">The UPS: [#!variable!ups_name!#]'s serial number has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#]. Was the UPS replaced?</key>
<key name="scan_apc_ups_warning_0007">The UPS: [#!variable!ups_name!#]'s IP address has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_warning_0008">The UPS: [#!variable!ups_name!#]'s model has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#]. Was the UPS replaced?</key>
<key name="scan_apc_ups_warning_0009">The UPS: [#!variable!ups_name!#]'s start time after input power is restored has changed from: [#!variable!old_value!#s] to: [#!variable!new_value!#s]. This controls how long the UPS will wait after the input power has returned until it starts providing output power.</key>
<key name="scan_apc_ups_warning_0010">The UPS: [#!variable!ups_name!#]'s shutdown delay time has changed: from: [#!variable!old_value!#s] to [#!variable!new_value!#s]. This controls how long the UPS will wait after being asked to power down before actually disabling its output power.</key>
<key name="scan_apc_ups_warning_0011">The UPS: [#!variable!ups_name!#]'s firmware has been updated from: [#!variable!old_value!#] to: [#!variable!new_value!#]. The firmware is software inside the UPS that controls how the UPS operates and how users interact with it. Typically a firmware is upgraded by an administrator to fix bugs or add new functionality.</key>
<key name="scan_apc_ups_warning_0012">The UPS: [#!variable!ups_name!#]'s health status has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_warning_0013">The UPS: [#!variable!ups_name!#]'s low-voltage transfer voltage has increased from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC]. An administrator may have made this change in order to help protect more sensitive down-stream equipment from low input voltages. This will likely shorten the life of the UPSes as the UPS will switch to batteries earlier on low-input power.</key>
<key name="scan_apc_ups_warning_0014">The UPS: [#!variable!ups_name!#]'s low-voltage transfer voltage has decreased from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC]. An administrator may have made this change in order to reduce how often the UPS switches to batteries. This may be done in cases where input power is often low and the down-stream equipment is known to be able to handle the lower voltage without issue. This change would help extend the life of the batteries.</key>
<key name="scan_apc_ups_warning_0015">The UPS: [#!variable!ups_name!#]'s last transfer to batteries reason has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_warning_0016">The UPS: [#!variable!ups_name!#]'s manufacture data has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#]. Was the UPS replaced?</key>
<key name="scan_apc_ups_warning_0017">The UPS: [#!variable!ups_name!#]'s network interface's firmware has been updated from version: [#!variable!old_value!#] to: [#!variable!new_value!#]. The firmware is software inside the UPS's network interface card that controls how the card operates and how users interact with it. Typically a firmware is upgraded by an administrator to fix bugs or add new functionality.</key>
<key name="scan_apc_ups_warning_0018">The UPS: [#!variable!ups_name!#]'s network interface's serial number has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#]. Was the network card replaced?</key>
<key name="scan_apc_ups_warning_0019">The UPS: [#!variable!ups_name!#]'s network interface's MAC address has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#]. Was the network card replaced?</key>
<key name="scan_apc_ups_warning_0020">The input sensitivity for the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_warning_0021">The UPS: [#!variable!ups_name!#] has input power again. The input voltage is now: [#!variable!new_value!# vAC].</key>
<key name="scan_apc_ups_warning_0022">The input voltage for the UPS: [#!variable!ups_name!#] has gone above the high-voltage transfer level! The current input value rose from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC]. The high alert voltage threshold is: [#!variable!high_transfer_voltage!# vAC].</key>
<key name="scan_apc_ups_warning_0023">The input voltage for the UPS: [#!variable!ups_name!#] has risen back above the low-voltage transfer level and is operating normally again. Rose from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC]. The low-voltage clear voltage threshold is: [#!variable!clear_low_transfer!# vAC]</key>
<key name="scan_apc_ups_warning_0024">The input voltage for the UPS: [#!variable!ups_name!#] has risen from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC].</key>
<key name="scan_apc_ups_warning_0025">The input voltage for the UPS: [#!variable!ups_name!#] has dropped from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC].</key>
<key name="scan_apc_ups_warning_0026">The UPS: [#!variable!ups_name!#] has lost input power! The input voltage dropped from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC].</key>
<key name="scan_apc_ups_warning_0027">The input voltage for the UPS: [#!variable!ups_name!#] has dropped below the low-voltage transfer level! The voltage dropped from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC]. The low-voltage transfer voltage is: [#!variable!low_transfer_voltage!#].</key>
<key name="scan_apc_ups_warning_0028">The input voltage for the UPS: [#!variable!ups_name!#] has dropped back down below the high-voltage transfer level and is operating normally again. The voltage changed from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC]. The clear high-voltage threshold is: [#!variable!clear_high_transfer!#].</key>
<key name="scan_apc_ups_warning_0029">The highest input voltage seen in the last 60 seconds for the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC].</key>
<key name="scan_apc_ups_warning_0030">The lowest input voltage seen in the last 60 seconds for the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC].</key>
<key name="scan_apc_ups_warning_0031">The load percentage on the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!#%] to [#!variable!new_value!#%].</key>
<key name="scan_apc_ups_warning_0032">The load percentage on the UPS: [#!variable!ups_name!#] has risen above the high-load threashold of: [#!variable!high_load!#]. It changed from: [#!variable!old_value!#%] to [#!variable!new_value!#%]. With a high load on the UPS, the effective hold up time will be reduced, meaning that if power is lost, the UPS batteries will drain quickly, possibly faster than a graceful shutdown can be performed. It's advised to reduce load, if possible.</key>
<key name="scan_apc_ups_warning_0033">The load percentage on the UPS: [#!variable!ups_name!#] has fallen below the high-load clear threashold of: [#!variable!high_clear!#]. It changed from: [#!variable!old_value!#%] to [#!variable!new_value!#%].</key>
<key name="scan_apc_ups_warning_0034">The time on batteries for the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_warning_0035">The UPS: [#!variable!ups_name!#] has returned to running on mains power. The time on batteries has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_warning_0036">The UPS: [#!variable!ups_name!#] is now running on batteries. Its time on batteries has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].</key>
<key name="scan_apc_ups_warning_0037">The estimated hold-up time for the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!#] to: [#!variable!new_value!#]. This is an *estimate* of how long the UPS can provide power should the input power be lost at the current load level. An increase in the average load will shorten the actual hold-up time.</key>
<key name="scan_apc_ups_warning_0038">
-=] The estimated hold-up time for the UPS: [#!variable!ups_name!#] is low!
If power is lost, the UPSes may run out of power faster than the Anvil! can shed load and/or gracefully shut down the hosted server. If at all possible, please remove non-critical devices from this UPS. If not possible, please add extended runtime batteries to the UPS, or replace the UPS with higher capacity versions (ideally with extended runtime battery support).
- The estimated hold-up time changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].
- This alert triggers below: ............. [#!variable!low_threshold!#]
- This alert clears above: ............... [#!variable!clear_threshold!#]
</key>
<key name="scan_apc_ups_warning_0039">
-=] The estimated hold-up time for the UPS: [#!variable!ups_name!#] is now ok.
The estimated holdup time of this UPS is back up to a reasonable level. In a power loss event, the chances of successful load shed and/or clean shut down are reasonably high.
- The estimated hold-up time changed from: [#!variable!old_value!#] to: [#!variable!new_value!#].
- This alert triggers below: ............. [#!variable!low_threshold!#]
- This alert clears above: ............... [#!variable!clear_threshold!#]
</key>
<key name="scan_apc_ups_warning_0040">The output frequency from the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!# Hz] to: [#!variable!new_value!# Hz].</key>
<key name="scan_apc_ups_warning_0041">The output voltage from the UPS: [#!variable!ups_name!#] has changed from: [#!variable!old_value!# vAC] to: [#!variable!new_value!# vAC].</key>
<key name="scan_apc_ups_warning_0042">The total lifetime power output from the UPS: [#!variable!ups_name!#] has increased from: [#!variable!old_value!# kWh] to: [#!variable!new_value!# kWh].</key>
<key name="scan_apc_ups_warning_0043">A new battery the UPS: [#!variable!ups_name!#] has increased from: [#!variable!old_value!# kWh] to: [#!variable!new_value!# kWh].</key>
<!-- The UPS reports states as integers. These are used to translate those states into
strings that a human would understand. If we lose contact with the UPS entirely, we will
set this to '0'. See the MIB for OID .1.3.6.1.4.1.318.1.1.1.4.1.1.0 -->

@ -1649,8 +1649,8 @@ CREATE TABLE power (
power_uuid uuid primary key,
power_ups_uuid uuid not null, -- This is the 'upses' -> 'ups_uuid' of the UPS. This is used to map what UPSes are powering a given node.
power_on_battery boolean not null, -- TRUE == use "time_remaining" to determine if graceful power off is needed. FALSE == power loss NOT imminent, do not power off node.
power_seconds_left numeric, -- Should always be set, but not required *EXCEPT* when 'power_on_battery' is TRUE.
power_charge_percentage numeric, -- Percentage charge in the UPS. Used to determine when the dashboard should boot the node after AC restore
power_seconds_left numeric not null, -- Should always be set, but not required *EXCEPT* when 'power_on_battery' is TRUE.
power_charge_percentage numeric not null, -- Percentage charge in the UPS. Used to determine when the dashboard should boot the node after AC restore
modified_date timestamp with time zone not null,
FOREIGN KEY(power_ups_uuid) REFERENCES upses(ups_uuid)

@ -280,6 +280,7 @@ The error was:
<key name="header_0038">IFN link #!variable!number!#</key>
<key name="header_0039">New Hostname</key>
<key name="header_0040">#!string!brand_0006!# Description</key>
<key name="header_0041">Scan Agent</key>
<!-- Strings used by jobs -->
<key name="job_0001">Configure Network</key>
@ -1776,10 +1777,10 @@ Here we will inject 't_0006', which injects 't_0001' which has a variable: [#!st
expansion of the list. Please do NOT remove any entries as they are linked by the
database. When translating, DO NOT CHANGE 'name' or 'agent'! The 'brand' key can
be changed just fine though. -->
<key name="ups_0001" agent="scan_ups_apc" brand="APC"><![CDATA[APC (by Schneider) Networked UPS - <a href="https://www.apc.com/shop/ca/en/categories/power/uninterruptible-power-supply-ups-/network-and-server/N-15e4jmd" target="_new">Link</a>.]]></key>
<key name="ups_0002" agent="scan_ups_eaton" brand="Eaton"><![CDATA[Eaton Networked UPS - <a href="https://powerquality.eaton.com/Products-services/Backup-Power-UPS/default.asp" target="_new">Link</a>.]]></key>
<key name="ups_0003" agent="scan_ups_tripplite" brand="TrippLite"><![CDATA[TrippLite Networked UPS - <a href="https://www.tripplite.com/products/ups-battery-backup~11" target="_new">Link</a>.]]></key>
<key name="ups_0004" agent="scan_ups_cyberpower" brand="Cyberpower"><![CDATA[Cyberpower Networked UPS - <a href="https://www.cyberpowersystems.com/products/ups/" target="_new">Link</a>.]]></key>
<key name="ups_0001" agent="scan-apc-ups" brand="APC"><![CDATA[APC (by Schneider) Networked UPS - <a href="https://www.apc.com/shop/ca/en/categories/power/uninterruptible-power-supply-ups-/network-and-server/N-15e4jmd" target="_new">Link</a>.]]></key>
<key name="ups_0002" agent="scan-eaton-ups" brand="Eaton"><![CDATA[Eaton Networked UPS - <a href="https://powerquality.eaton.com/Products-services/Backup-Power-UPS/default.asp" target="_new">Link</a>.]]></key>
<key name="ups_0003" agent="scan-tripplite-ups" brand="TrippLite"><![CDATA[TrippLite Networked UPS - <a href="https://www.tripplite.com/products/ups-battery-backup~11" target="_new">Link</a>.]]></key>
<key name="ups_0004" agent="scan-cyberpower-ups" brand="Cyberpower"><![CDATA[Cyberpower Networked UPS - <a href="https://www.cyberpowersystems.com/products/ups/" target="_new">Link</a>.]]></key>
<!-- Warnings -->
<key name="warning_0001">[ Warning ] - The IP address will change. You will need to reconnect after applying these changes.</key>

@ -427,3 +427,19 @@ sub wait_until_configured
return(0);
}
=pod
"I'm sorry, but I don't want to be an emperor. That's not my business. I don't want to rule or conquer anyone. I should like to help everyone if possible - Jew, Gentile - black man - white.
We all want to help one another. Human beings are like that. We want to live by each other's happiness - not by each other's misery. We don't want to hate and despise one another. In this world there's room for everyone and the good earth is rich and can provide for everyone.
The way of life can be free and beautiful, but we have lost the way. Greed has poisoned men's souls - has barricaded the world with hate - has goose-stepped us into misery and bloodshed. We have developed speed, but we have shut ourselves in. Machinery that gives abundance has left us in want. Our knowledge has made us cynical; our cleverness, hard and unkind. We think too much and feel too little. More than machinery we need humanity. More than cleverness, we need kindness and gentleness. Without these qualities, life will be violent and all will be lost.
The aeroplane and the radio have brought us closer together. The very nature of these inventions cries out for the goodness in man - cries for universal brotherhood - for the unity of us all. Even now my voice is reaching millions throughout the world - millions of despairing men, women, and little children - victims of a system that makes men torture and imprison innocent people. To those who can hear me, I say: 'Do not despair.' The misery that is now upon us is but the passing of greed - the bitterness of men who fear the way of human progress. The hate of men will pass, and dictators die, and the power they took from the people will return to the people. And so long as men die, liberty will never perish.
Soldiers! Don't give yourselves to brutes - men who despise you and enslave you - who regiment your lives - tell you what to do - what to think and what to feel! Who drill you - diet you - treat you like cattle, use you as cannon fodder. Don't give yourselves to these unnatural men - machine men with machine minds and machine hearts! You are not machines! You are not cattle! You are men! You have the love of humanity in your hearts. You don't hate, only the unloved hate - the unloved and the unnatural!
Soldiers! Don't fight for slavery! Fight for liberty! In the seventeenth chapter of St Luke, it is written the kingdom of God is within man not one man nor a group of men, but in all men! In you! You, the people, have the power - the power to create machines. The power to create happiness! You, the people, have the power to make this life free and beautiful - to make this life a wonderful adventure. Then in the name of democracy - let us use that power - let us all unite. Let us fight for a new world - a decent world that will give men a chance to work - that will give youth a future and old age a security.
By the promise of these things, brutes have risen to power. But they lie! They do not fulfil that promise. They never will! Dictators free themselves but they enslave the people. Now let us fight to fulfil that promise! Let us fight to free the world - to do away with national barriers - to do away with greed, with hate and intolerance. Let us fight for a world of reason - a world where science and progress will lead to all men's happiness. Soldiers, in the name of democracy, let us unite!"
=pod

@ -1337,8 +1337,6 @@ sub load_packages
"colord.x86_64",
"coreutils-common.x86_64",
"coreutils.x86_64",
"corosync.x86_64",
"corosynclib.x86_64",
"cpio.x86_64",
"cpp.x86_64",
"cracklib-dicts.x86_64",
@ -2447,6 +2445,12 @@ sub load_packages
],
};
# These packages can't be downloaded on RHEL Striker dashboads as they usually are not entitled to
$anvil->data->{ha_packages} = [
"corosync.x86_64",
"corosynclib.x86_64",
];
my ($os_type, $os_arch) = $anvil->Get->os_type();
if ($os_type eq "rhel8")
{

@ -33,370 +33,6 @@ print "Connecting to the database(s);\n";
$anvil->Database->connect({debug => 3});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, secure => 0, key => "log_0132"});
my $cib = '<cib crm_feature_set="3.3.0" validate-with="pacemaker-3.2" epoch="598" num_updates="3" admin_epoch="0" cib-last-written="Mon Oct 12 08:01:01 2020" update-origin="mk-a02n02" update-client="cibadmin" update-user="root" have-quorum="1" dc-uuid="2">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
<nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="2.0.3-5.el8_2.1-4b1f869f0f"/>
<nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
<nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="mk-anvil-02"/>
<nvpair id="cib-bootstrap-options-stonith-max-attempts" name="stonith-max-attempts" value="INFINITY"/>
<nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="true"/>
<nvpair id="cib-bootstrap-options-maintenance-mode" name="maintenance-mode" value="false"/>
<nvpair id="cib-bootstrap-options-last-lrm-refresh" name="last-lrm-refresh" value="1602294579"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="1" uname="mk-a02n01">
<instance_attributes id="nodes-1">
<nvpair id="nodes-1-maintenance" name="maintenance" value="on"/>
</instance_attributes>
</node>
<node id="2" uname="mk-a02n02">
<instance_attributes id="nodes-2">
<nvpair id="nodes-2-maintenance" name="maintenance" value="on"/>
</instance_attributes>
</node>
</nodes>
<resources>
<primitive class="stonith" id="ipmilan_node1" type="fence_ipmilan">
<instance_attributes id="ipmilan_node1-instance_attributes">
<nvpair id="ipmilan_node1-instance_attributes-ipaddr" name="ipaddr" value="10.201.13.1"/>
<nvpair id="ipmilan_node1-instance_attributes-password" name="password" value="another secret p"/>
<nvpair id="ipmilan_node1-instance_attributes-pcmk_host_list" name="pcmk_host_list" value="mk-a02n01"/>
<nvpair id="ipmilan_node1-instance_attributes-username" name="username" value="admin"/>
</instance_attributes>
<operations>
<op id="ipmilan_node1-monitor-interval-60" interval="60" name="monitor"/>
</operations>
</primitive>
<primitive class="stonith" id="apc_snmp_node1_mk-pdu01" type="fence_apc_snmp">
<instance_attributes id="apc_snmp_node1_mk-pdu01-instance_attributes">
<nvpair id="apc_snmp_node1_mk-pdu01-instance_attributes-ip" name="ip" value="10.201.2.3"/>
<nvpair id="apc_snmp_node1_mk-pdu01-instance_attributes-pcmk_host_list" name="pcmk_host_list" value="mk-a02n01"/>
<nvpair id="apc_snmp_node1_mk-pdu01-instance_attributes-pcmk_off_action" name="pcmk_off_action" value="reboot"/>
<nvpair id="apc_snmp_node1_mk-pdu01-instance_attributes-port" name="port" value="3"/>
</instance_attributes>
<operations>
<op id="apc_snmp_node1_mk-pdu01-monitor-interval-60" interval="60" name="monitor"/>
</operations>
</primitive>
<primitive class="stonith" id="apc_snmp_node1_mk-pdu02" type="fence_apc_snmp">
<instance_attributes id="apc_snmp_node1_mk-pdu02-instance_attributes">
<nvpair id="apc_snmp_node1_mk-pdu02-instance_attributes-ip" name="ip" value="10.201.2.4"/>
<nvpair id="apc_snmp_node1_mk-pdu02-instance_attributes-pcmk_host_list" name="pcmk_host_list" value="mk-a02n01"/>
<nvpair id="apc_snmp_node1_mk-pdu02-instance_attributes-pcmk_off_action" name="pcmk_off_action" value="reboot"/>
<nvpair id="apc_snmp_node1_mk-pdu02-instance_attributes-port" name="port" value="3"/>
</instance_attributes>
<operations>
<op id="apc_snmp_node1_mk-pdu02-monitor-interval-60" interval="60" name="monitor"/>
</operations>
</primitive>
<primitive class="stonith" id="ipmilan_node2" type="fence_ipmilan">
<instance_attributes id="ipmilan_node2-instance_attributes">
<nvpair id="ipmilan_node2-instance_attributes-ipaddr" name="ipaddr" value="10.201.13.2"/>
<nvpair id="ipmilan_node2-instance_attributes-password" name="password" value="another secret p"/>
<nvpair id="ipmilan_node2-instance_attributes-pcmk_host_list" name="pcmk_host_list" value="mk-a02n02"/>
<nvpair id="ipmilan_node2-instance_attributes-username" name="username" value="admin"/>
</instance_attributes>
<operations>
<op id="ipmilan_node2-monitor-interval-60" interval="60" name="monitor"/>
</operations>
</primitive>
<primitive class="stonith" id="apc_snmp_node2_mk-pdu01" type="fence_apc_snmp">
<instance_attributes id="apc_snmp_node2_mk-pdu01-instance_attributes">
<nvpair id="apc_snmp_node2_mk-pdu01-instance_attributes-ip" name="ip" value="10.201.2.3"/>
<nvpair id="apc_snmp_node2_mk-pdu01-instance_attributes-pcmk_host_list" name="pcmk_host_list" value="mk-a02n02"/>
<nvpair id="apc_snmp_node2_mk-pdu01-instance_attributes-pcmk_off_action" name="pcmk_off_action" value="reboot"/>
<nvpair id="apc_snmp_node2_mk-pdu01-instance_attributes-port" name="port" value="4"/>
</instance_attributes>
<operations>
<op id="apc_snmp_node2_mk-pdu01-monitor-interval-60" interval="60" name="monitor"/>
</operations>
</primitive>
<primitive class="stonith" id="apc_snmp_node2_mk-pdu02" type="fence_apc_snmp">
<instance_attributes id="apc_snmp_node2_mk-pdu02-instance_attributes">
<nvpair id="apc_snmp_node2_mk-pdu02-instance_attributes-ip" name="ip" value="10.201.2.4"/>
<nvpair id="apc_snmp_node2_mk-pdu02-instance_attributes-pcmk_host_list" name="pcmk_host_list" value="mk-a02n02"/>
<nvpair id="apc_snmp_node2_mk-pdu02-instance_attributes-pcmk_off_action" name="pcmk_off_action" value="reboot"/>
<nvpair id="apc_snmp_node2_mk-pdu02-instance_attributes-port" name="port" value="4"/>
</instance_attributes>
<operations>
<op id="apc_snmp_node2_mk-pdu02-monitor-interval-60" interval="60" name="monitor"/>
</operations>
</primitive>
<primitive class="ocf" id="srv07-el6" provider="alteeve" type="server">
<instance_attributes id="srv07-el6-instance_attributes">
<nvpair id="srv07-el6-instance_attributes-name" name="name" value="srv07-el6"/>
</instance_attributes>
<meta_attributes id="srv07-el6-meta_attributes">
<nvpair id="srv07-el6-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv07-el6-meta_attributes-migrate_to" name="migrate_to" value="INFINITY"/>
<nvpair id="srv07-el6-meta_attributes-stop" name="stop" value="INFINITY"/>
<nvpair id="srv07-el6-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv07-el6-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv07-el6-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv07-el6-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv07-el6-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv07-el6-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv07-el6-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
<primitive class="ocf" id="srv01-sql" provider="alteeve" type="server">
<instance_attributes id="srv01-sql-instance_attributes">
<nvpair id="srv01-sql-instance_attributes-name" name="name" value="srv01-sql"/>
</instance_attributes>
<meta_attributes id="srv01-sql-meta_attributes">
<nvpair id="srv01-sql-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv01-sql-meta_attributes-migrate_to" name="migrate_to" value="INFINITY"/>
<nvpair id="srv01-sql-meta_attributes-stop" name="stop" value="INFINITY"/>
<nvpair id="srv01-sql-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv01-sql-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv01-sql-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv01-sql-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv01-sql-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv01-sql-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv01-sql-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
<primitive class="ocf" id="srv02-lab1" provider="alteeve" type="server">
<instance_attributes id="srv02-lab1-instance_attributes">
<nvpair id="srv02-lab1-instance_attributes-name" name="name" value="srv02-lab1"/>
</instance_attributes>
<meta_attributes id="srv02-lab1-meta_attributes">
<nvpair id="srv02-lab1-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv02-lab1-meta_attributes-migrate_to" name="migrate_to" value="INFINITY"/>
<nvpair id="srv02-lab1-meta_attributes-stop" name="stop" value="INFINITY"/>
<nvpair id="srv02-lab1-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv02-lab1-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv02-lab1-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv02-lab1-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv02-lab1-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv02-lab1-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv02-lab1-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
<primitive class="ocf" id="srv08-m2-psql" provider="alteeve" type="server">
<instance_attributes id="srv08-m2-psql-instance_attributes">
<nvpair id="srv08-m2-psql-instance_attributes-name" name="name" value="srv08-m2-psql"/>
</instance_attributes>
<meta_attributes id="srv08-m2-psql-meta_attributes">
<nvpair id="srv08-m2-psql-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv08-m2-psql-meta_attributes-migrate_to" name="migrate_to" value="INFINITY"/>
<nvpair id="srv08-m2-psql-meta_attributes-stop" name="stop" value="INFINITY"/>
<nvpair id="srv08-m2-psql-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv08-m2-psql-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv08-m2-psql-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv08-m2-psql-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv08-m2-psql-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv08-m2-psql-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv08-m2-psql-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
<primitive class="ocf" id="srv03-lab2" provider="alteeve" type="server">
<instance_attributes id="srv03-lab2-instance_attributes">
<nvpair id="srv03-lab2-instance_attributes-name" name="name" value="srv03-lab2"/>
</instance_attributes>
<meta_attributes id="srv03-lab2-meta_attributes">
<nvpair id="srv03-lab2-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv03-lab2-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv03-lab2-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv03-lab2-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv03-lab2-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv03-lab2-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv03-lab2-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv03-lab2-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
<primitive class="ocf" id="srv04-lab3" provider="alteeve" type="server">
<instance_attributes id="srv04-lab3-instance_attributes">
<nvpair id="srv04-lab3-instance_attributes-name" name="name" value="srv04-lab3"/>
</instance_attributes>
<meta_attributes id="srv04-lab3-meta_attributes">
<nvpair id="srv04-lab3-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv04-lab3-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv04-lab3-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv04-lab3-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv04-lab3-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv04-lab3-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv04-lab3-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv04-lab3-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
<primitive class="ocf" id="srv05-lab4" provider="alteeve" type="server">
<instance_attributes id="srv05-lab4-instance_attributes">
<nvpair id="srv05-lab4-instance_attributes-name" name="name" value="srv05-lab4"/>
</instance_attributes>
<meta_attributes id="srv05-lab4-meta_attributes">
<nvpair id="srv05-lab4-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv05-lab4-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv05-lab4-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv05-lab4-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv05-lab4-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv05-lab4-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv05-lab4-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv05-lab4-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
<primitive class="ocf" id="srv06-lab5" provider="alteeve" type="server">
<instance_attributes id="srv06-lab5-instance_attributes">
<nvpair id="srv06-lab5-instance_attributes-name" name="name" value="srv06-lab5"/>
</instance_attributes>
<meta_attributes id="srv06-lab5-meta_attributes">
<nvpair id="srv06-lab5-meta_attributes-allow-migrate" name="allow-migrate" value="true"/>
<nvpair id="srv06-lab5-meta_attributes-target-role" name="target-role" value="Stopped"/>
</meta_attributes>
<operations>
<op id="srv06-lab5-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="600"/>
<op id="srv06-lab5-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="INFINITY"/>
<op id="srv06-lab5-monitor-interval-60" interval="60" name="monitor"/>
<op id="srv06-lab5-notify-interval-0s" interval="0s" name="notify" timeout="20"/>
<op id="srv06-lab5-start-interval-0s" interval="0s" name="start" on-fail="block" timeout="INFINITY"/>
<op id="srv06-lab5-stop-interval-0s" interval="0s" name="stop" on-fail="block" timeout="INFINITY"/>
</operations>
</primitive>
</resources>
<constraints>
<rsc_location id="location-srv07-el6-mk-a02n01-200" node="mk-a02n01" rsc="srv07-el6" score="200"/>
<rsc_location id="location-srv07-el6-mk-a02n02-100" node="mk-a02n02" rsc="srv07-el6" score="100"/>
<rsc_location id="location-srv01-sql-mk-a02n01-200" node="mk-a02n01" rsc="srv01-sql" score="200"/>
<rsc_location id="location-srv01-sql-mk-a02n02-100" node="mk-a02n02" rsc="srv01-sql" score="100"/>
<rsc_location id="location-srv02-lab1-mk-a02n01-200" node="mk-a02n01" rsc="srv02-lab1" score="200"/>
<rsc_location id="location-srv02-lab1-mk-a02n02-100" node="mk-a02n02" rsc="srv02-lab1" score="100"/>
<rsc_location id="location-srv08-m2-psql-mk-a02n01-200" node="mk-a02n01" rsc="srv08-m2-psql" score="200"/>
<rsc_location id="location-srv08-m2-psql-mk-a02n02-100" node="mk-a02n02" rsc="srv08-m2-psql" score="100"/>
<rsc_location id="location-srv03-lab2-mk-a02n01-200" node="mk-a02n01" rsc="srv03-lab2" score="200"/>
<rsc_location id="location-srv03-lab2-mk-a02n02-100" node="mk-a02n02" rsc="srv03-lab2" score="100"/>
<rsc_location id="location-srv04-lab3-mk-a02n01-200" node="mk-a02n01" rsc="srv04-lab3" score="200"/>
<rsc_location id="location-srv04-lab3-mk-a02n02-100" node="mk-a02n02" rsc="srv04-lab3" score="100"/>
<rsc_location id="location-srv05-lab4-mk-a02n01-200" node="mk-a02n01" rsc="srv05-lab4" score="200"/>
<rsc_location id="location-srv05-lab4-mk-a02n02-100" node="mk-a02n02" rsc="srv05-lab4" score="100"/>
<rsc_location id="location-srv06-lab5-mk-a02n01-200" node="mk-a02n01" rsc="srv06-lab5" score="200"/>
<rsc_location id="location-srv06-lab5-mk-a02n02-100" node="mk-a02n02" rsc="srv06-lab5" score="100"/>
</constraints>
<fencing-topology>
<fencing-level devices="ipmilan_node1" id="fl-mk-a02n01-1" index="1" target="mk-a02n01"/>
<fencing-level devices="apc_snmp_node1_mk-pdu01,apc_snmp_node1_mk-pdu02" id="fl-mk-a02n01-2" index="2" target="mk-a02n01"/>
<fencing-level devices="ipmilan_node2" id="fl-mk-a02n02-1" index="1" target="mk-a02n02"/>
<fencing-level devices="apc_snmp_node2_mk-pdu01,apc_snmp_node2_mk-pdu02" id="fl-mk-a02n02-2" index="2" target="mk-a02n02"/>
</fencing-topology>
</configuration>
<status>
<node_state id="2" uname="mk-a02n02" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
<lrm id="2">
<lrm_resources>
<lrm_resource id="ipmilan_node1" type="fence_ipmilan" class="stonith">
<lrm_rsc_op id="ipmilan_node1_last_0" operation_key="ipmilan_node1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="15:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;15:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="5" rc-code="7" op-status="0" interval="0" last-rc-change="1602502371" last-run="1602502371" exec-time="2" queue-time="0" op-digest="230c3c46a7f39ff7a5ff7f1b8aa9f17d" op-secure-params=" password passwd " op-secure-digest="a8bb97c4c1cae8f90e445a0ce85ecc19"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node1_mk-pdu01" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node1_mk-pdu01_last_0" operation_key="apc_snmp_node1_mk-pdu01_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="31:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:0;31:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="58" rc-code="0" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="648" queue-time="0" op-digest="6b6191eeb61cd595ab0a26ec9762f8aa" op-secure-params=" password passwd " op-secure-digest="1dc851b0efa605b4ec3f03e3a3ba62f7"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node1_mk-pdu02" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node1_mk-pdu02_last_0" operation_key="apc_snmp_node1_mk-pdu02_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="17:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;17:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="13" rc-code="7" op-status="0" interval="0" last-rc-change="1602502372" last-run="1602502372" exec-time="0" queue-time="0" op-digest="f4b11aca778aa58d81b7fa096bfe3fb4" op-secure-params=" password passwd " op-secure-digest="78517effd4af72191ac2c0b9d8567fcd"/>
</lrm_resource>
<lrm_resource id="ipmilan_node2" type="fence_ipmilan" class="stonith">
<lrm_rsc_op id="ipmilan_node2_last_0" operation_key="ipmilan_node2_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="35:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:0;35:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="59" rc-code="0" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="144" queue-time="0" op-digest="e759a456df902485096d4a48725ed81c" op-secure-params=" password passwd " op-secure-digest="47989163387c397e63fa3acdbec0d274"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node2_mk-pdu01" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node2_mk-pdu01_last_0" operation_key="apc_snmp_node2_mk-pdu01_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="19:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;19:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="21" rc-code="7" op-status="0" interval="0" last-rc-change="1602502372" last-run="1602502372" exec-time="0" queue-time="0" op-digest="3d4af69481cb01c8c8f0f8af95940b99" op-secure-params=" password passwd " op-secure-digest="fd2959d25b0a20f6d1bc630f7565fd78"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node2_mk-pdu02" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node2_mk-pdu02_last_0" operation_key="apc_snmp_node2_mk-pdu02_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="39:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:0;39:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="60" rc-code="0" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="620" queue-time="0" op-digest="7787bf20740a07e14145707988b18000" op-secure-params=" password passwd " op-secure-digest="11d1e757682ff46234d9816e06534953"/>
</lrm_resource>
<lrm_resource id="srv07-el6" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv07-el6_last_0" operation_key="srv07-el6_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="21:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;21:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="29" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1448" queue-time="0" op-digest="41dcb3443c331f2fe7ae92962905159f"/>
</lrm_resource>
<lrm_resource id="srv01-sql" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv01-sql_last_0" operation_key="srv01-sql_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="22:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;22:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="33" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1444" queue-time="0" op-digest="7acff34e45470837bd51c6d670b9878b"/>
</lrm_resource>
<lrm_resource id="srv02-lab1" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv02-lab1_last_0" operation_key="srv02-lab1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="23:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;23:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="37" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1448" queue-time="0" op-digest="c7a4471d0df53d7aab5392a1ba7d67e1"/>
</lrm_resource>
<lrm_resource id="srv08-m2-psql" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv08-m2-psql_last_0" operation_key="srv08-m2-psql_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="24:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;24:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="41" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1444" queue-time="0" op-digest="79b65e1a3736d1835da977ef2dee200d"/>
</lrm_resource>
<lrm_resource id="srv03-lab2" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv03-lab2_last_0" operation_key="srv03-lab2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="25:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;25:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="45" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1449" queue-time="0" op-digest="c193be9678d079bb7eb92e0bdefb2c9f"/>
</lrm_resource>
<lrm_resource id="srv04-lab3" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv04-lab3_last_0" operation_key="srv04-lab3_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="26:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;26:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="49" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1447" queue-time="0" op-digest="cb2426b2050bd79e2d7ca6ef986f4323"/>
</lrm_resource>
<lrm_resource id="srv05-lab4" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv05-lab4_last_0" operation_key="srv05-lab4_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="27:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;27:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="53" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1448" queue-time="0" op-digest="c738571d2348f506b23eda5a19a9b2ec"/>
</lrm_resource>
<lrm_resource id="srv06-lab5" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv06-lab5_last_0" operation_key="srv06-lab5_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="28:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;28:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n02" call-id="57" rc-code="7" op-status="0" interval="0" last-rc-change="1602502375" last-run="1602502375" exec-time="1480" queue-time="0" op-digest="750371be716fd8e695d423bf33be9d04"/>
</lrm_resource>
</lrm_resources>
</lrm>
</node_state>
<node_state id="1" uname="mk-a02n01" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
<lrm id="1">
<lrm_resources>
<lrm_resource id="ipmilan_node1" type="fence_ipmilan" class="stonith">
<lrm_rsc_op id="ipmilan_node1_last_0" operation_key="ipmilan_node1_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="29:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:0;29:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="58" rc-code="0" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="156" queue-time="0" op-digest="230c3c46a7f39ff7a5ff7f1b8aa9f17d" op-secure-params=" password passwd " op-secure-digest="a8bb97c4c1cae8f90e445a0ce85ecc19"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node1_mk-pdu01" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node1_mk-pdu01_last_0" operation_key="apc_snmp_node1_mk-pdu01_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="2:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;2:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="9" rc-code="7" op-status="0" interval="0" last-rc-change="1602502372" last-run="1602502372" exec-time="0" queue-time="0" op-digest="6b6191eeb61cd595ab0a26ec9762f8aa" op-secure-params=" password passwd " op-secure-digest="1dc851b0efa605b4ec3f03e3a3ba62f7"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node1_mk-pdu02" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node1_mk-pdu02_last_0" operation_key="apc_snmp_node1_mk-pdu02_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="33:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:0;33:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="59" rc-code="0" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="622" queue-time="0" op-digest="f4b11aca778aa58d81b7fa096bfe3fb4" op-secure-params=" password passwd " op-secure-digest="78517effd4af72191ac2c0b9d8567fcd"/>
</lrm_resource>
<lrm_resource id="ipmilan_node2" type="fence_ipmilan" class="stonith">
<lrm_rsc_op id="ipmilan_node2_last_0" operation_key="ipmilan_node2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="4:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;4:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="17" rc-code="7" op-status="0" interval="0" last-rc-change="1602502372" last-run="1602502372" exec-time="0" queue-time="0" op-digest="e759a456df902485096d4a48725ed81c" op-secure-params=" password passwd " op-secure-digest="47989163387c397e63fa3acdbec0d274"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node2_mk-pdu01" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node2_mk-pdu01_last_0" operation_key="apc_snmp_node2_mk-pdu01_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="37:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:0;37:0:0:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="60" rc-code="0" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="633" queue-time="0" op-digest="3d4af69481cb01c8c8f0f8af95940b99" op-secure-params=" password passwd " op-secure-digest="fd2959d25b0a20f6d1bc630f7565fd78"/>
</lrm_resource>
<lrm_resource id="apc_snmp_node2_mk-pdu02" type="fence_apc_snmp" class="stonith">
<lrm_rsc_op id="apc_snmp_node2_mk-pdu02_last_0" operation_key="apc_snmp_node2_mk-pdu02_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="6:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;6:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="25" rc-code="7" op-status="0" interval="0" last-rc-change="1602502372" last-run="1602502372" exec-time="0" queue-time="0" op-digest="7787bf20740a07e14145707988b18000" op-secure-params=" password passwd " op-secure-digest="11d1e757682ff46234d9816e06534953"/>
</lrm_resource>
<lrm_resource id="srv07-el6" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv07-el6_last_0" operation_key="srv07-el6_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="7:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;7:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="29" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1466" queue-time="0" op-digest="41dcb3443c331f2fe7ae92962905159f"/>
</lrm_resource>
<lrm_resource id="srv01-sql" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv01-sql_last_0" operation_key="srv01-sql_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="8:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;8:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="33" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1427" queue-time="0" op-digest="7acff34e45470837bd51c6d670b9878b"/>
</lrm_resource>
<lrm_resource id="srv02-lab1" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv02-lab1_last_0" operation_key="srv02-lab1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="9:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;9:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="37" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1398" queue-time="0" op-digest="c7a4471d0df53d7aab5392a1ba7d67e1"/>
</lrm_resource>
<lrm_resource id="srv08-m2-psql" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv08-m2-psql_last_0" operation_key="srv08-m2-psql_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="10:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;10:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="41" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1366" queue-time="0" op-digest="79b65e1a3736d1835da977ef2dee200d"/>
</lrm_resource>
<lrm_resource id="srv03-lab2" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv03-lab2_last_0" operation_key="srv03-lab2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="11:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;11:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="45" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1369" queue-time="0" op-digest="c193be9678d079bb7eb92e0bdefb2c9f"/>
</lrm_resource>
<lrm_resource id="srv04-lab3" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv04-lab3_last_0" operation_key="srv04-lab3_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="12:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;12:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="49" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1364" queue-time="0" op-digest="cb2426b2050bd79e2d7ca6ef986f4323"/>
</lrm_resource>
<lrm_resource id="srv05-lab4" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv05-lab4_last_0" operation_key="srv05-lab4_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="13:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;13:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="53" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1458" queue-time="0" op-digest="c738571d2348f506b23eda5a19a9b2ec"/>
</lrm_resource>
<lrm_resource id="srv06-lab5" type="server" class="ocf" provider="alteeve">
<lrm_rsc_op id="srv06-lab5_last_0" operation_key="srv06-lab5_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.3.0" transition-key="14:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" transition-magic="0:7;14:0:7:2b9d6b7e-5be6-467d-a3bd-f42e3b7718c7" exit-reason="" on_node="mk-a02n01" call-id="57" rc-code="7" op-status="0" interval="0" last-rc-change="1602502380" last-run="1602502380" exec-time="1415" queue-time="0" op-digest="750371be716fd8e695d423bf33be9d04"/>
</lrm_resource>
</lrm_resources>
</lrm>
</node_state>
</status>
</cib>
';
$anvil->Cluster->parse_cib({debug => 2, cib => $cib});
my $old_date = "2016/02/25";
my $new_date = $anvil->Convert->format_mmddyy_to_yymmdd({date => "2016/02/25"})
print "The old date: [".$old_date."] -> [".$new_date."]\n";

Loading…
Cancel
Save