From 4800f7181f524f9949585d8039e3e358151682d6 Mon Sep 17 00:00:00 2001 From: Digimer Date: Sat, 7 Aug 2021 14:01:14 -0400 Subject: [PATCH] * Updated ScanCore to boot a node that is off without a stop reason. * Fixed a bug where anvil-safe-stop was not recording the stop-reason. Also made '--poweroff' an alias for '--power-off'. Signed-off-by: Digimer --- Anvil/Tools/ScanCore.pm | 4 ++-- share/words.xml | 2 +- tools/anvil-manage-server | 9 ++------- tools/anvil-safe-stop | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/Anvil/Tools/ScanCore.pm b/Anvil/Tools/ScanCore.pm index e6807fcc..5c2a58fa 100644 --- a/Anvil/Tools/ScanCore.pm +++ b/Anvil/Tools/ScanCore.pm @@ -2415,7 +2415,7 @@ LIMIT 1;"; $stop_reason = "unknown"; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { stop_reason => $stop_reason }}); $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0565", variables => { host_name => $host_name }}); - next; + } if ($stop_reason eq "user") @@ -2424,7 +2424,7 @@ LIMIT 1;"; $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0566", variables => { host_name => $host_name }}); next; } - elsif ($stop_reason eq "power") + elsif (($stop_reason eq "power") or ($stop_reason eq "unknown")) { # Check now if the power is OK $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0567", variables => { host_name => $host_name }}); diff --git a/share/words.xml b/share/words.xml index 43fbafb9..91751fe8 100644 --- a/share/words.xml +++ b/share/words.xml @@ -1786,7 +1786,7 @@ The file: [#!variable!file!#] needs to be updated. The difference is: The host: [#!variable!host_name!#] is up, no need to check if it needs booting. The host: [#!variable!host_name!#] couldn't be reached directly, but IPMI reports that it is up. Could the IPMI BMC be hung or unplugged? The host: [#!variable!host_name!#] is off. Will check now if it should be booted. - The host: [#!variable!host_name!#] has no stop reason, so we'll leave it off. + The host: [#!variable!host_name!#] has no stop reason, so we'll boot it up in case it lost power without warning. The host: [#!variable!host_name!#] was stopped by the user, so we'll leave it off. The host: [#!variable!host_name!#] was powered off because of power loss. Checking to see if it is now safe to restart it. The host: [#!variable!host_name!#] was powered off because of thermal issues. Checking to see if it is now safe to restart it. diff --git a/tools/anvil-manage-server b/tools/anvil-manage-server index 7fc2ae80..07c37325 100755 --- a/tools/anvil-manage-server +++ b/tools/anvil-manage-server @@ -819,11 +819,7 @@ sub interactive_configure_storage anvil_uuid => $anvil_uuid, path => $this_path, }); - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { - 's1:storage_group_name' => $storage_group_name, - 's2:storage_group_uuid' => $storage_group_uuid, - 's3:this_storage_group_uuid' => $this_storage_group_uuid, - }}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { this_storage_group_uuid => $this_storage_group_uuid }}); if (($this_storage_group_uuid) && ($storage_group_uuid eq $this_storage_group_uuid)) { @@ -837,8 +833,7 @@ sub interactive_configure_storage } $lines += 2; - print "[ ".$index." ] - Name: \"".$storage_group_name."\"\n"; - print " - Size: [".$anvil->Convert->bytes_to_human_readable({'bytes' => $vg_size})."], Free: [".$anvil->Convert->bytes_to_human_readable({'bytes' => $free_size})."]\n"; + print "[ ".$index." ] - Name: \"".$storage_group_name."\" - Size: [".$anvil->Convert->bytes_to_human_readable({'bytes' => $vg_size})."], Free: [".$anvil->Convert->bytes_to_human_readable({'bytes' => $free_size})."]\n"; my $path_count = keys %{$paths}; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { path_count => $path_count }}); diff --git a/tools/anvil-safe-stop b/tools/anvil-safe-stop index bb3c0d30..6f30a1c8 100755 --- a/tools/anvil-safe-stop +++ b/tools/anvil-safe-stop @@ -27,17 +27,28 @@ $| = 1; my $anvil = Anvil::Tools->new(); $anvil->data->{switches}{'job-uuid'} = ""; +$anvil->data->{switches}{'poweroff'} = ""; $anvil->data->{switches}{'power-off'} = ""; # By default, the node is withdrawn. With this switch, the node will power off as well. $anvil->data->{switches}{'stop-reason'} = ""; # Optionally used to set 'system::stop_reason' reason for this host. Valid values are 'user', 'power' and 'thermal'. $anvil->data->{switches}{'stop-servers'} = ""; # Default behaviour is to migrate servers to the peer, if the peer is up. This overrides that and forces hosted servers to shut down. $anvil->Get->switches; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'switches::job-uuid' => $anvil->data->{switches}{'job-uuid'}, + 'switches::poweroff' => $anvil->data->{switches}{'poweroff'}, 'switches::power-off' => $anvil->data->{switches}{'power-off'}, 'switches::stop-reason' => $anvil->data->{switches}{'stop-reason'}, 'switches::stop-servers' => $anvil->data->{switches}{'stop-servers'}, }}); +# Let 'poweroff' work as a mis-spell of 'power-off' +if (($anvil->data->{switches}{'poweroff'}) && (not $anvil->data->{switches}{'power-off'})) +{ + $anvil->data->{switches}{'power-off'} = $anvil->data->{switches}{'poweroff'}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'switches::power-off' => $anvil->data->{switches}{'power-off'}, + }}); +} + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "log_0115", variables => { program => $THIS_FILE }}); # Make sure we're running as 'root' @@ -121,6 +132,9 @@ if (not $anvil->data->{sys}{anvil_uuid}) if (not $anvil->data->{switches}{'stop-reason'}) { $anvil->data->{switches}{'stop-reason'} = "user"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'switches::stop-reason' => $anvil->data->{switches}{'stop-reason'}, + }}); } # Migrate or stop the servers, if any servers are running here. @@ -145,6 +159,25 @@ if ($anvil->data->{switches}{'power-off'}) $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0325"}); $anvil->Job->update_progress({progress => 100, message => "job_0325"}); + # Set the stop reason. + if ($anvil->data->{switches}{'stop-reason'}) + { + if ($anvil->data->{switches}{'stop-reason'} eq "none") + { + $anvil->data->{switches}{'stop-reason'} = ""; + } + my $variable_uuid = $anvil->Database->insert_or_update_variables({ + variable_name => 'system::stop_reason', + variable_value => $anvil->data->{switches}{'stop-reason'}, + variable_default => '', + variable_description => 'striker_0279', + variable_section => 'system', + variable_source_uuid => $anvil->Get->host_uuid(), + variable_source_table => 'hosts', + }); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { variable_uuid => $variable_uuid }}); + } + my $shell_call = $anvil->data->{path}{exe}{systemctl}." poweroff"; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { shell_call => $shell_call }}); my ($output, $return_code) = $anvil->System->call({shell_call => $shell_call, source => $THIS_FILE, line => __LINE__});