diff --git a/Anvil/Tools/Database.pm b/Anvil/Tools/Database.pm index f0013bd2..f627a5fc 100644 --- a/Anvil/Tools/Database.pm +++ b/Anvil/Tools/Database.pm @@ -16689,10 +16689,11 @@ sub _age_out_data my $to_clean = {}; # Power, temperatures, ip addresses and variables - $to_clean->{table}{temperature}{child_table}{temperature}{uuid_column} = "temperature_uuid"; - $to_clean->{table}{power}{child_table}{power}{uuid_column} = "power_uuid"; - $to_clean->{table}{ip_addresses}{child_table}{ip_addresses}{uuid_column} = "ip_address_uuid"; - $to_clean->{table}{variables}{child_table}{variables}{uuid_column} = "variable_uuid"; + $to_clean->{table}{temperature}{child_table}{temperature}{uuid_column} = "temperature_uuid"; + $to_clean->{table}{power}{child_table}{power}{uuid_column} = "power_uuid"; + $to_clean->{table}{ip_addresses}{child_table}{ip_addresses}{uuid_column} = "ip_address_uuid"; + $to_clean->{table}{variables}{child_table}{variables}{uuid_column} = "variable_uuid"; + $to_clean->{table}{network_interfaces}{child_table}{network_interfaces}{uuid_column} = "network_interface_uuid"; # scan_apc_pdu $to_clean->{table}{scan_apc_pdus}{child_table}{scan_apc_pdu_phases}{uuid_column} = "scan_apc_pdu_phase_uuid"; diff --git a/notes b/notes index f4e94ab5..3d21efb0 100644 --- a/notes +++ b/notes @@ -1,3 +1,29 @@ +# Configure APC PDUs and UPSes +tcpip -i 10.201.2.3 -s 255.255.0.0 -g 10.201.255.254 +web -h enable +web -s enable +snmp -S enable -c1 private -a1 writeplus +snmp -S enable -c2 public -a2 writeplus + +Anvil! to Anvil! live migration; +1. Create LVs +2. Make sure /etc/hosts is populated +3. If DR is used, disconnect first to stay within the max-peers=3 +3. Update dbrd config, A:1 -> A:2, A:1 -> B:1, B:1 -> B:2 (if both online and UpToDate, otherwise both from UpToDate) +4. Create drbd md on new Anvil! +5. drbdadm adjust on old nodes. +6. Wait for DRBD resource to sync to node 1 (it can sync to node 2 later) +7. Copy server's XML to new cluster +8. pcs resource unmanage srv01-cs8 +9. Allow dual primary between A1:B1 (or A2:B1) - +[root@an-a01n01 ~]# pcs resource disable srv01-cs8 +Warning: 'srv01-cs8' is unmanaged +[root@an-a01n01 ~]# pcs resource manage srv01-cs8 +[root@an-a01n01 ~]# pcs resource delete srv01-cs8 +Deleting Resource - srv01-cs8 +10. + + TODO: - Remove this; (step 2) "This is the user name that you will log into Striker as and the name of the user that owns the database" - Being set to the gateway, not the default DNS - "This is the domain name server(s) to use when resolving domain names. You can specify 2 or more, separated by commas." diff --git a/scancore-agents/scan-network/scan-network b/scancore-agents/scan-network/scan-network index 78c5a2f2..77433a89 100755 --- a/scancore-agents/scan-network/scan-network +++ b/scancore-agents/scan-network/scan-network @@ -798,18 +798,303 @@ sub read_last_scan return(0); } -# There is a bug somewhere where interfaces and ip addresses are periodically being added twice per host. -# This checks for / cleans those up. Remove this when the core issue is resolved. +# There is a bug somewhere where interfaces, bridges and ip addresses are periodically being added twice per +# host. This checks for / cleans those up. Remove this when the core issue is resolved. sub clear_duplicates { my ($anvil) = @_; + # Look for duplicate bridges. my $query = " +SELECT + bridge_uuid, + bridge_name, + bridge_id, + bridge_mac_address +FROM + bridges +WHERE + bridge_host_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)." +ORDER BY + bridge_name ASC, + bridge_id DESC +;"; + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0124", variables => { query => $query }}); + my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__}); + my $count = @{$results}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + results => $results, + count => $count, + }}); + foreach my $row (@{$results}) + { + my $bridge_uuid = $row->[0]; + my $bridge_name = $row->[1]; + my $bridge_id = $row->[2]; + my $bridge_mac_address = $row->[3]; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + bridge_uuid => $bridge_uuid, + bridge_name => $bridge_name, + bridge_id => $bridge_id, + bridge_mac_address => $bridge_mac_address, + }}); + + if (not exists $anvil->data->{duplicate_bridges}{seen}{$bridge_name}) + { + $anvil->data->{duplicate_bridges}{seen}{$bridge_name} = []; + } + push @{$anvil->data->{duplicate_bridges}{seen}{$bridge_name}}, $bridge_uuid; + + $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_name} = $bridge_name; + $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_mac_address} = $bridge_mac_address; + $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_id} = $bridge_id; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "duplicate_bridges::bridge_uuid::${bridge_uuid}::bridge_name" => $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_name}, + "duplicate_bridges::bridge_uuid::${bridge_uuid}::bridge_id" => $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_id}, + "duplicate_bridges::bridge_uuid::${bridge_uuid}::bridge_mac_address" => $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_mac_address}, + }}); + + $anvil->data->{deleted_bridges}{$bridge_uuid} = 0; + } + foreach my $bridge_name (sort {$a cmp $b} keys %{$anvil->data->{duplicate_bridges}{seen}}) + { + my $count = @{$anvil->data->{duplicate_bridges}{seen}{$bridge_name}}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 's1:bridge_name' => $bridge_name, + 's2:count' => $count, + }}); + + if ($count > 1) + { + # Duplicate! Is one of them marked as DELETED? + foreach my $bridge_uuid (@{$anvil->data->{duplicate_bridges}{seen}{$bridge_name}}) + { + # Is this one deleted? + my $bridge_mac_address = $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_mac_address}; + my $bridge_id = $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_id}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + bridge_uuid => $bridge_uuid, + bridge_mac_address => $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_mac_address}, + bridge_id => $anvil->data->{duplicate_bridges}{bridge_uuid}{$bridge_uuid}{bridge_id}, + }}); + if ($bridge_id eq "DELETED") + { + # Take this one out. + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0685", variables => { + name => $bridge_name, + uuid => $bridge_uuid, + }}); + + my $queries = []; + push @{$queries}, "DELETE FROM history.network_interfaces WHERE network_interface_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM network_interfaces WHERE network_interface_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM history.bondss WHERE bond_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM bondss WHERE bond_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM history.bridges WHERE bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM bridges WHERE bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + + # Write it out. + $anvil->Database->write({debug => 2, query => $queries, source => $THIS_FILE, line => __LINE__}); + + $count--; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { count => $count }}); + + $anvil->data->{deleted_bridges}{$bridge_uuid} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "deleted_bridges::${bridge_uuid}" => $anvil->data->{deleted_bridges}{$bridge_uuid}, + }}); + } + last if $count == 1; + } + + # If count is still > 1, we need to arbitrarily delete an interface. + if ($count > 1) + { + foreach my $bridge_uuid (@{$anvil->data->{duplicate_bridges}{seen}{$bridge_name}}) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0685", variables => { + name => $bridge_name, + uuid => $bridge_uuid, + }}); + + my $queries = []; + push @{$queries}, "DELETE FROM history.network_interfaces WHERE network_interface_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM network_interfaces WHERE network_interface_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM history.bondss WHERE bond_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM bondss WHERE bond_bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM history.bridges WHERE bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + push @{$queries}, "DELETE FROM bridges WHERE bridge_uuid = ".$anvil->Database->quote($bridge_uuid).";"; + + # Write it out. + $anvil->Database->write({debug => 2, query => $queries, source => $THIS_FILE, line => __LINE__}); + + $count--; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { count => $count }}); + + $anvil->data->{deleted_bridges}{$bridge_uuid} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "deleted_bridges::${bridge_uuid}" => $anvil->data->{deleted_bridges}{$bridge_uuid}, + }}); + } + last if $count == 1; + } + } + } + delete $anvil->data->{duplicate_bridges}; + + # Load the bridges again. + $anvil->Database->get_bridges({include_deleted => 1}); + + # Look for duplicate bonds. + $query = " +SELECT + bond_uuid, + bond_name, + bond_operational, + bond_mac_address, + bond_bridge_uuid +FROM + bonds +WHERE + bond_host_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)." +ORDER BY + bond_name ASC, + bond_operational DESC +;"; + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0124", variables => { query => $query }}); + $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__}); + $count = @{$results}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + results => $results, + count => $count, + }}); + foreach my $row (@{$results}) + { + my $bond_uuid = $row->[0]; + my $bond_name = $row->[1]; + my $bond_operational = $row->[2]; + my $bond_mac_address = $row->[3]; + my $bond_bridge_uuid = defined $row->[4] ? $row->[4] : ""; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + bond_uuid => $bond_uuid, + bond_name => $bond_name, + bond_operational => $bond_operational, + bond_mac_address => $bond_mac_address, + bond_bridge_uuid => $bond_bridge_uuid, + }}); + + if (not exists $anvil->data->{duplicate_bonds}{seen}{$bond_name}) + { + $anvil->data->{duplicate_bonds}{seen}{$bond_name} = []; + } + push @{$anvil->data->{duplicate_bonds}{seen}{$bond_name}}, $bond_uuid; + + $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_name} = $bond_name; + $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_mac_address} = $bond_mac_address; + $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_operational} = $bond_operational; + $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_bridge_uuid} = $bond_bridge_uuid; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "duplicate_bonds::bond_uuid::${bond_uuid}::bond_name" => $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_name}, + "duplicate_bonds::bond_uuid::${bond_uuid}::bond_operational" => $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_operational}, + "duplicate_bonds::bond_uuid::${bond_uuid}::bond_mac_address" => $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_mac_address}, + "duplicate_bonds::bond_uuid::${bond_uuid}::bond_bridge_uuid" => $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_bridge_uuid}, + }}); + + $anvil->data->{deleted_bonds}{$bond_uuid} = 0; + } + foreach my $bond_name (sort {$a cmp $b} keys %{$anvil->data->{duplicate_bonds}{seen}}) + { + my $count = @{$anvil->data->{duplicate_bonds}{seen}{$bond_name}}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 's1:bond_name' => $bond_name, + 's2:count' => $count, + }}); + + if ($count > 1) + { + # Duplicate! Is one of them marked as DELETED? + foreach my $bond_uuid (@{$anvil->data->{duplicate_bonds}{seen}{$bond_name}}) + { + # Is this one deleted? + my $bond_mac_address = $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_mac_address}; + my $bond_operational = $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_operational}; + my $bond_bridge_uuid = $anvil->data->{duplicate_bonds}{bond_uuid}{$bond_uuid}{bond_bridge_uuid}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + bond_uuid => $bond_uuid, + bond_mac_address => $bond_mac_address, + bond_operational => $bond_operational, + bond_bridge_uuid => $bond_bridge_uuid, + }}); + if ((($bond_bridge_uuid) && ($anvil->data->{deleted_bridges}{$bond_bridge_uuid})) or ($bond_operational eq "DELETED")) + { + # Take this one out. + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0685", variables => { + name => $bond_name, + uuid => $bond_uuid, + }}); + + my $queries = []; + push @{$queries}, "DELETE FROM history.network_interfaces WHERE network_interface_bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + push @{$queries}, "DELETE FROM network_interfaces WHERE network_interface_bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + push @{$queries}, "DELETE FROM history.bonds WHERE bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + push @{$queries}, "DELETE FROM bonds WHERE bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + + # Write it out. + $anvil->Database->write({debug => 2, query => $queries, source => $THIS_FILE, line => __LINE__}); + + $count--; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { count => $count }}); + + $anvil->data->{deleted_bonds}{$bond_uuid} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "deleted_bonds::${bond_uuid}" => $anvil->data->{deleted_bonds}{$bond_uuid}, + }}); + } + } + + # If count is still > 1, we need to arbitrarily delete an interface. + if ($count > 1) + { + foreach my $bond_uuid (@{$anvil->data->{duplicate_bonds}{seen}{$bond_name}}) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0685", variables => { + name => $bond_name, + uuid => $bond_uuid, + }}); + + my $queries = []; + push @{$queries}, "DELETE FROM history.network_interfaces WHERE network_interface_bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + push @{$queries}, "DELETE FROM network_interfaces WHERE network_interface_bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + push @{$queries}, "DELETE FROM history.bonds WHERE bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + push @{$queries}, "DELETE FROM bonds WHERE bond_uuid = ".$anvil->Database->quote($bond_uuid).";"; + + # Write it out. + $anvil->Database->write({debug => 2, query => $queries, source => $THIS_FILE, line => __LINE__}); + + $count--; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { count => $count }}); + + $anvil->data->{deleted_bonds}{$bond_uuid} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "deleted_bonds::${bond_uuid}" => $anvil->data->{deleted_bonds}{$bond_uuid}, + }}); + } + last if $count == 1; + } + } + } + delete $anvil->data->{duplicate_bonds}; + + + # Look for duplicate network interfaces + $query = " SELECT network_interface_uuid, network_interface_name, network_interface_mac_address, - network_interface_operational + network_interface_operational, + network_interface_bond_uuid, + network_interface_bridge_uuid FROM network_interfaces WHERE @@ -817,23 +1102,27 @@ WHERE ORDER BY network_interface_name ASC;"; $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0124", variables => { query => $query }}); - my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__}); - my $count = @{$results}; + $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__}); + $count = @{$results}; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { results => $results, count => $count, }}); foreach my $row (@{$results}) { - my $network_interface_uuid = $row->[0]; - my $network_interface_name = $row->[1]; - my $network_interface_mac_address = $row->[2]; - my $network_interface_operational = $row->[3]; + my $network_interface_uuid = $row->[0]; + my $network_interface_name = $row->[1]; + my $network_interface_mac_address = $row->[2]; + my $network_interface_operational = $row->[3]; + my $network_interface_bond_uuid = defined $row->[4] ? $row->[4] : ""; + my $network_interface_bridge_uuid = defined $row->[5] ? $row->[5] : ""; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { network_interface_uuid => $network_interface_uuid, network_interface_name => $network_interface_name, network_interface_mac_address => $network_interface_mac_address, network_interface_operational => $network_interface_operational, + network_interface_bond_uuid => $network_interface_bond_uuid, + network_interface_bridge_uuid => $network_interface_bridge_uuid, }}); if (not exists $anvil->data->{duplicate_nics}{seen}{$network_interface_name}) @@ -845,10 +1134,14 @@ ORDER BY $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_name} = $network_interface_name; $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_mac_address} = $network_interface_mac_address; $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_operational} = $network_interface_operational; + $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_bond_uuid} = $network_interface_bond_uuid; + $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_bridge_uuid} = $network_interface_bridge_uuid; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "duplicate_nics::network_interface_uuid::${network_interface_uuid}::network_interface_name" => $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_name}, "duplicate_nics::network_interface_uuid::${network_interface_uuid}::network_interface_mac_address" => $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_mac_address}, "duplicate_nics::network_interface_uuid::${network_interface_uuid}::network_interface_operational" => $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_operational}, + "duplicate_nics::network_interface_uuid::${network_interface_uuid}::network_interface_bond_uuid" => $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_bond_uuid}, + "duplicate_nics::network_interface_uuid::${network_interface_uuid}::network_interface_bridge_uuid" => $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_bridge_uuid}, }}); } foreach my $network_interface_name (sort {$a cmp $b} keys %{$anvil->data->{duplicate_nics}{seen}}) @@ -867,12 +1160,18 @@ ORDER BY # Is this one deleted? my $network_interface_mac_address = $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_mac_address}; my $network_interface_operational = $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_operational}; + my $network_interface_bond_uuid = $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_bond_uuid}; + my $network_interface_bridge_uuid = $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_bridge_uuid}; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { network_interface_uuid => $network_interface_uuid, - network_interface_mac_address => $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_mac_address}, - network_interface_operational => $anvil->data->{duplicate_nics}{network_interface_uuid}{$network_interface_uuid}{network_interface_operational}, + network_interface_mac_address => $network_interface_mac_address, + network_interface_operational => $network_interface_operational, + network_interface_bond_uuid => $network_interface_bond_uuid, + network_interface_bridge_uuid => $network_interface_bridge_uuid, }}); - if ($network_interface_operational eq "DELETED") + if ((($network_interface_bond_uuid) && ($anvil->data->{deleted_bonds}{$network_interface_bond_uuid})) or + (($network_interface_bridge_uuid) && ($anvil->data->{deleted_bridges}{$network_interface_bridge_uuid})) or + ($network_interface_operational eq "DELETED")) { # Take this one out. $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0647", variables => { @@ -887,7 +1186,6 @@ ORDER BY $count--; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { count => $count }}); } - last if $count == 1; } # If count is still > 1, we need to arbitrarily delete an interface. @@ -901,6 +1199,7 @@ ORDER BY }}); my $query = "DELETE FROM network_interfaces WHERE network_interface_uuid = ".$anvil->Database->quote($network_interface_uuid).";"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { query => $query }}); $anvil->Database->write({query => $query, source => $THIS_FILE, line => __LINE__}); $count--; @@ -1004,6 +1303,7 @@ ORDER BY }}); my $query = "DELETE FROM ip_addresses WHERE ip_address_uuid = ".$anvil->Database->quote($ip_address_uuid).";"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { query => $query }}); $anvil->Database->write({query => $query, source => $THIS_FILE, line => __LINE__}); $count--; @@ -1014,6 +1314,7 @@ ORDER BY } } + return(0); } diff --git a/share/words.xml b/share/words.xml index f06540d2..e7c122e3 100644 --- a/share/words.xml +++ b/share/words.xml @@ -2075,6 +2075,8 @@ The file: [#!variable!file!#] needs to be updated. The difference is: Testing that our short host name resolves to one of our IP prior to starting the cluster. Changing the ownership of: [#!variable!file!#] to be owned by: [#!variable!user!#:#!variable!user!#]. Enabling 'ping' for all users. + The network interface: [#!variable!nic!#] on the host: [#!variable!host!#] is recorded in the 'history.network_interfaces' table, but has not corresponding entry in the public table. Removing it. + [ Note ] - The network bridge: [#!variable!name!#] with 'bridge_uuid': [#!variable!uuid!#] is a duplicate, removing it from the database(s). The host name: [#!variable!target!#] does not resolve to an IP address.