* Created tools/anvil-maintenance-mode to enable/disable maintenance mode from the command line.

* Fixed a bug in System->maintenance_mode where disabling it wouldn't work.

Signed-off-by: Digimer <digimer@alteeve.ca>
main
Digimer 6 years ago
parent d147e10552
commit 0191f93bad
  1. 5
      Anvil/Tools/System.pm
  2. 11
      share/words.xml
  3. 101
      tools/anvil-maintenance-mode

@ -898,8 +898,9 @@ sub maintenance_mode
my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3;
my $set = defined $parameter->{set} ? $parameter->{set} : "";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { set => $set }});
if ($set)
if (($set) or ($set eq "0"))
{
### TODO: stop other systems from using this database.
# Am I enabling or disabling?
@ -907,6 +908,7 @@ sub maintenance_mode
{
# Enabling
$anvil->Database->insert_or_update_variables({
debug => $debug,
variable_name => "maintenance_mode",
variable_value => "1",
variable_default => "0",
@ -921,6 +923,7 @@ sub maintenance_mode
{
# Disabling
$anvil->Database->insert_or_update_variables({
debug => $debug,
variable_name => "maintenance_mode",
variable_value => "0",
variable_default => "0",

@ -66,6 +66,17 @@ NOTE: You must update the password of any other system using this host's
<key name="message_0038">Updates finished. Verifying now.</key>
<key name="message_0039">System update complete! The kernel was updated, so a reboot is required.</key>
<key name="message_0040">System update complete! A reboot is not required.</key>
<key name="message_0041">This system has been placed into maintenance mode.</key>
<key name="message_0042">This system was already in maintenance mode, nothing changed.</key>
<key name="message_0043">This system has been removed from maintenance mode.</key>
<key name="message_0044">This system was not in maintenance mode, nothing changed.</key>
<key name="message_0045">Bad call. Usage:
Set maintenance mode: #!variable!program!# --set 1
Clear maintenance mode: #!variable!program!# --set 0
Report maintenance mode: #!variable!program!#
</key>
<key name="message_0046">This system is in maintenance mode.</key>
<key name="message_0047">This system is NOT in maintenance mode.</key>
<!-- Log entries -->
<key name="log_0001">Starting: [#!variable!program!#].</key>

@ -0,0 +1,101 @@
#!/usr/bin/perl
#
# This set, clears or reports if the host is in mainentance mode or not.
#
# Examples;
# - Enable - anvil-maintenance-mode --set 1
# - Disable - anvil-maintenance-mode --set 0
# - Report - anvil-maintenance-mode
#
# Exit codes;
# 0 = Normal exit.
# 1 = No database connections available.
use strict;
use warnings;
use Anvil::Tools;
# Disable buffering
$| = 1;
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0];
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0];
if (($running_directory =~ /^\./) && ($ENV{PWD}))
{
$running_directory =~ s/^\./$ENV{PWD}/;
}
my $anvil = Anvil::Tools->new({log_level => 2, log_secure => 1});
$anvil->Storage->read_config({file => "/etc/anvil/anvil.conf"});
# Read switches
$anvil->data->{switches}{set} = "";
$anvil->Get->switches;
# Connect to DBs.
$anvil->Database->connect;
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, secure => 0, key => "log_0132"});
if (not $anvil->data->{sys}{database}{connections})
{
# No databases, exit.
print $anvil->Words->string({key => "error_0003"})."\n";
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, secure => 0, key => "error_0003"});
$anvil->nice_exit({exit_code => 1});
}
my $maintenance_mode = $anvil->System->maintenance_mode({debug => 3});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { maintenance_mode => $maintenance_mode }});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::set" => $anvil->data->{switches}{set} }});
if ($anvil->data->{switches}{set} eq "1")
{
# Enable
if (not $maintenance_mode)
{
$maintenance_mode = $anvil->System->maintenance_mode({debug => 3, set => 1});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { maintenance_mode => $maintenance_mode }});
print $anvil->Words->string({key => "message_0041"})."\n";
}
else
{
# Was already set, do nothing
print $anvil->Words->string({key => "message_0042"})."\n";
}
}
elsif ($anvil->data->{switches}{set} eq "0")
{
# Disabled
if ($maintenance_mode)
{
$maintenance_mode = $anvil->System->maintenance_mode({debug => 3, set => 0});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { maintenance_mode => $maintenance_mode }});
print $anvil->Words->string({key => "message_0043"})."\n";
}
else
{
# Was already disabled, do nothing
print $anvil->Words->string({key => "message_0044"})."\n";
}
}
elsif ($anvil->data->{switches}{set})
{
# Bad call
print $anvil->Words->string({key => "message_0045", variables => { program => $THIS_FILE }})."\n";
}
# Get the current state
if ($maintenance_mode)
{
# Report that we're in mainteance mode
print $anvil->Words->string({key => "message_0046"})."\n";
}
else
{
# Report that we're not.
print $anvil->Words->string({key => "message_0047"})."\n";
}
# We're done
$anvil->nice_exit({exit_code => 0});
Loading…
Cancel
Save