diff --git a/Anvil/Tools/System.pm b/Anvil/Tools/System.pm index 321ffda5..9b0f53ef 100644 --- a/Anvil/Tools/System.pm +++ b/Anvil/Tools/System.pm @@ -1663,7 +1663,7 @@ sub configure_ipmi # Is this host in an Anvil!? $anvil->Database->get_hosts(); $anvil->Database->get_anvils(); - + my $anvil_uuid = ""; my $host_uuid = $anvil->Get->host_uuid; if ((exists $anvil->data->{hosts}{host_uuid}{$host_uuid}) && ($anvil->data->{hosts}{host_uuid}{$host_uuid}{anvil_uuid})) @@ -1679,9 +1679,29 @@ sub configure_ipmi return(0); } - # Look for a job for 'anvil-join-anvil' for this host. With it, we'll figure out the password and - # which machine we are. - my $query = " + # Look for a match in the anvils table for this host uuid. + my $machine = ""; + if ($anvil->data->{anvils}{anvil_uuid}{$anvil_uuid}{anvil_node1_host_uuid} eq $host_uuid) + { + $machine = "node1"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { machine => $machine }}); + } + elsif ($anvil->data->{anvils}{anvil_uuid}{$anvil_uuid}{anvil_node2_host_uuid} eq $host_uuid) + { + $machine = "node2"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { machine => $machine }}); + } + elsif ($anvil->data->{anvils}{anvil_uuid}{$anvil_uuid}{anvil_dr1_host_uuid} eq $host_uuid) + { + $machine = "dr1"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { machine => $machine }}); + } + + if (not $machine) + { + # Look for a job for 'anvil-join-anvil' for this host. With it, we'll figure out the password + # and which machine we are. + my $query = " SELECT job_uuid, job_data @@ -1695,36 +1715,37 @@ ORDER BY modified_date DESC LIMIT 1 ;"; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { 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 => $debug, list => { - results => $results, - count => $count, - }}); - my $job_uuid = defined $results->[0]->[0] ? $results->[0]->[0] : ""; - my $job_data = defined $results->[0]->[1] ? $results->[0]->[1] : ""; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { - job_uuid => $job_uuid, - job_data => $anvil->Log->is_secure($job_data), - }}); - if (not $job_uuid) - { - # Unable to proceed. - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, priority => "err", key => "log_0501"}); - return(0); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { 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 => $debug, list => { + results => $results, + count => $count, + }}); + my $job_uuid = defined $results->[0]->[0] ? $results->[0]->[0] : ""; + my $job_data = defined $results->[0]->[1] ? $results->[0]->[1] : ""; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { + job_uuid => $job_uuid, + job_data => $anvil->Log->is_secure($job_data), + }}); + if (not $job_uuid) + { + # Unable to proceed. + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, priority => "err", key => "log_0501"}); + return(0); + } + + ($machine, $manifest_uuid, $anvil_uuid) = ($job_data =~ /as_machine=(.*?),manifest_uuid=(.*?),anvil_uuid=(.*?)$/); + $machine = "" if not defined $machine; + $manifest_uuid = "" if not defined $manifest_uuid; + $anvil_uuid = "" if not defined $anvil_uuid; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { + machine => $machine, + manifest_uuid => $manifest_uuid, + anvil_uuid => $anvil_uuid, + }}); } - (my $machine, $manifest_uuid, $anvil_uuid) = ($job_data =~ /as_machine=(.*?),manifest_uuid=(.*?),anvil_uuid=(.*?)$/); - $machine = "" if not defined $machine; - $manifest_uuid = "" if not defined $manifest_uuid; - $anvil_uuid = "" if not defined $anvil_uuid; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { - machine => $machine, - manifest_uuid => $manifest_uuid, - anvil_uuid => $anvil_uuid, - }}); - # Load the manifest. my $problem = $anvil->Striker->load_manifest({debug => $debug, manifest_uuid => $manifest_uuid}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { problem => $problem }}); diff --git a/scancore-agents/scan-drbd/scan-drbd.xml b/scancore-agents/scan-drbd/scan-drbd.xml index 364acca2..a2c5e532 100644 --- a/scancore-agents/scan-drbd/scan-drbd.xml +++ b/scancore-agents/scan-drbd/scan-drbd.xml @@ -120,52 +120,16 @@ Note: Node peers should always use protocol C and fencing set to 'resource-and-s Protocol A is suitable for DR hosts with higher latency connections, but the DR host will be allowed to fall slightly behind the nodes. Protocol C ensures that the DR host is never behind, but could hurt storage performance. - -The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] connection state to: [#!variable!peer_name!#] has changed from: [#!variable!old_connection_state!#] to: [#!variable!new_connection_state!#]. - -======== -#!variable!old_connection_state!# - #!variable!old_connection_state_explain!# -#!variable!new_connection_state!# - #!variable!new_connection_state_explain!# -======== - - -The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] local disk state relative to: [#!variable!peer_name!#] has changed from: [#!variable!old_local_disk_state!#] to: [#!variable!new_local_disk_state!#]. - -======== -#!variable!old_local_disk_state!# - #!variable!old_local_disk_state_explain!# -#!variable!new_local_disk_state!# - #!variable!new_local_disk_state_explain!# -======== - - -The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] peer: [#!variable!peer_name!#] disk state has changed from: [#!variable!old_disk_state!#] to: [#!variable!new_disk_state!#]. - -======== -#!variable!old_disk_state!# - #!variable!old_disk_state_explain!# -#!variable!new_disk_state!# - #!variable!new_disk_state_explain!# -======== - - -The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] local role relative to: [#!variable!peer_name!#] has changed from: [#!variable!old_local_role!#] to: [#!variable!new_local_role!#]. - -======== -#!variable!old_local_role!# - #!variable!old_local_role_explain!# -#!variable!new_local_role!# - #!variable!new_local_role_explain!# -======== - - -The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] peer: [#!variable!peer_name!#] role has changed from: [#!variable!old_role!#] to: [#!variable!new_role!#]. - -======== -#!variable!old_role!# - #!variable!old_role_explain!# -#!variable!new_role!# - #!variable!new_role_explain!# -======== - + The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] connection state to: [#!variable!peer_name!#] has changed from: [#!variable!old_connection_state!#] to: [#!variable!new_connection_state!#]. + The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] local disk state relative to: [#!variable!peer_name!#] has changed from: [#!variable!old_local_disk_state!#] to: [#!variable!new_local_disk_state!#]. + The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] peer: [#!variable!peer_name!#] disk state has changed from: [#!variable!old_disk_state!#] to: [#!variable!new_disk_state!#]. + The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] local role relative to: [#!variable!peer_name!#] has changed from: [#!variable!old_local_role!#] to: [#!variable!new_local_role!#]. + The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] peer: [#!variable!peer_name!#] role has changed from: [#!variable!old_role!#] to: [#!variable!new_role!#]. The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] peer: [#!variable!peer_name!#]'s out-of-sync size has changed from: [#!variable!old_out_of_sync_size!#] to: [#!variable!new_out_of_sync_size!#]. The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] peer: [#!variable!peer_name!#]'s replication speed has changed from: [#!variable!old_replication_speed!#/sec] to: [#!variable!new_replication_speed!#/sec]. The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] peer: [#!variable!peer_name!#]'s time to resync changed from: [#!variable!old_estimated_time_to_sync!#] to: [#!variable!new_estimated_time_to_sync!#]. The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] IP address/port used to replicate with the peer: [#!variable!peer_name!#] has changed from: [#!variable!old_ip_address!#:#!variable!old_tcp_port!#] to: [#!variable!new_ip_address!#:#!variable!new_tcp_port!#]. - -The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] replication protocol used to sync with the peer: [#!variable!peer_name!#] has changed from: [#!variable!old_protocol!#] to: [#!variable!new_protocol!#]. + The resource: [#!variable!resource_name!#] volume: [#!variable!volume_number!#] replication protocol used to sync with the peer: [#!variable!peer_name!#] has changed from: [#!variable!old_protocol!#] to: [#!variable!new_protocol!#]. Note: Protocol A is OK when replicating to a DR host. When used, it allows the DR host to fall behind the nodes, which helps avoids a performance hit when the network latency / speed to the DR host is higher than tolerable. Between nodes, protocol C must always be used, which ensures synchronous replication.