From 7773e5f9b8b7970fb3705b25847b8e2a38d9933f Mon Sep 17 00:00:00 2001 From: digimer Date: Mon, 30 Jan 2023 11:30:36 -0500 Subject: [PATCH] * Updated logging in DRBD->get_devices(). * Added a check and exit if anvil-manage-dr is asked to protect a server on a machine that doesn't know about that server. Signed-off-by: digimer --- Anvil/Tools/DRBD.pm | 6 +++++- Anvil/Tools/Server.pm | 6 ++++-- share/words.xml | 1 + tools/anvil-manage-dr | 12 +++++++++++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Anvil/Tools/DRBD.pm b/Anvil/Tools/DRBD.pm index 457abf43..76dc739f 100644 --- a/Anvil/Tools/DRBD.pm +++ b/Anvil/Tools/DRBD.pm @@ -1492,7 +1492,7 @@ LIMIT 1 my $value = $option_ref->{value}; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { variable => $variable, - value => $variable, + value => $value, }}); if ($variable eq "auto-promote") { @@ -1581,10 +1581,14 @@ LIMIT 1 if (($anvil->data->{drbd}{config}{$host}{host}) && ($anvil->data->{drbd}{config}{$host}{host} eq $this_host)) { + $anvil->data->{drbd}{config}{$host}{by_res}{$by_res}{on} = $lv_path; + $anvil->data->{drbd}{config}{$host}{by_res}{$by_res}{resource} = $this_resource; $anvil->data->{drbd}{config}{$host}{drbd_path}{$drbd_path}{on} = $lv_path; $anvil->data->{drbd}{config}{$host}{drbd_path}{$drbd_path}{resource} = $this_resource; $anvil->data->{drbd}{config}{$host}{lv_path}{$lv_path}{under} = $drbd_path; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { + "drbd::config::${host}::by_res::${by_res}::on" => $anvil->data->{drbd}{config}{$host}{by_res}{$by_res}{on}, + "drbd::config::${host}::by_res::${by_res}::resource" => $anvil->data->{drbd}{config}{$host}{by_res}{$by_res}{resource}, "drbd::config::${host}::drbd_path::${drbd_path}::on" => $anvil->data->{drbd}{config}{$host}{drbd_path}{$drbd_path}{on}, "drbd::config::${host}::drbd_path::${drbd_path}::resource" => $anvil->data->{drbd}{config}{$host}{drbd_path}{$drbd_path}{resource}, "drbd::config::${host}::lv_path::${lv_path}::under" => $anvil->data->{drbd}{config}{$host}{lv_path}{$lv_path}{under}, diff --git a/Anvil/Tools/Server.pm b/Anvil/Tools/Server.pm index 76bfec78..d3b169a7 100644 --- a/Anvil/Tools/Server.pm +++ b/Anvil/Tools/Server.pm @@ -1832,8 +1832,10 @@ sub parse_definition my $on_lv = defined $anvil->data->{drbd}{config}{$host}{drbd_path}{$device_path}{on} ? $anvil->data->{drbd}{config}{$host}{drbd_path}{$device_path}{on} : ""; my $resource = defined $anvil->data->{drbd}{config}{$host}{drbd_path}{$device_path}{resource} ? $anvil->data->{drbd}{config}{$host}{drbd_path}{$device_path}{resource} : ""; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { - on_lv => $on_lv, - resource => $resource, + 's1:host' => $host, + 's2:device_path' => $device_path, + 's3:on_lv' => $on_lv, + 's4:resource' => $resource, }}); if ((not $resource) && ($anvil->data->{drbd}{config}{$host}{'by-res'}{$device_path}{resource})) { diff --git a/share/words.xml b/share/words.xml index 2341622f..baddc0d7 100644 --- a/share/words.xml +++ b/share/words.xml @@ -2859,6 +2859,7 @@ Proceed? [y/N] Proceed? [y/N] This is a test alert message sent at alert level: [#!variable!level!#]. Failed to send a test alert at level: [#!variable!level!#]. Is anyone listening at that level? Is the mail server configured? + The DRBD config file was not found. A protect job needs to be run from the Anvil! node hosting the server to be protected. Normal Password diff --git a/tools/anvil-manage-dr b/tools/anvil-manage-dr index 5fe20a2f..5ee9e41d 100755 --- a/tools/anvil-manage-dr +++ b/tools/anvil-manage-dr @@ -2174,7 +2174,7 @@ sub process_protect }); $anvil->DRBD->gather_data({debug => 2}); - + my $server_ram = $anvil->data->{server}{$short_host_name}{$server_name}{'from_db'}{memory}; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { server_ram => $anvil->Convert->add_commas({number => $server_ram})." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $server_ram}).")", @@ -2182,6 +2182,7 @@ sub process_protect foreach my $resource (sort {$a cmp $b} keys %{$anvil->data->{server}{$short_host_name}{$server_name}{drbd}{resource}}) { + next if $resource eq ""; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { resource => $resource }}); foreach my $this_host_name (sort {$a cmp $b} keys %{$anvil->data->{new}{resource}{$resource}{host}}) @@ -2559,6 +2560,15 @@ sub process_protect my $record_job = 0; if (not $anvil->data->{switches}{Yes}) { + # If there's no config file, this might be being run from DR which doesn't have info about + # the resource yet. + if ((not $config_file) && (not $anvil->data->{switches}{'job-uuid'})) + { + # Bail out. + print $anvil->Words->string({key => "message_0308"})."\n"; + $anvil->nice_exit({exit_code => 1}); + } + # Ask the user to confirm. print "\n".$anvil->Words->string({key => "message_0021"})."\n"; my $answer = ;