diff --git a/share/words.xml b/share/words.xml
index 05c8e2e4..7e9e7d25 100644
--- a/share/words.xml
+++ b/share/words.xml
@@ -454,6 +454,29 @@ Failed to parse the XML in the new definition file. The error was:
Giving up.
+ This must be run on a node active in the cluster hosting the server being managed. Exiting.
+ This Anvil! does not seem to have a DR host. Exiting.
+ Failed to find an IP we can access the DR host: [#!variable!host_name!#]. Has it been configured? Is it running? Exiting.
+ Failed to access the DR host: [#!variable!host_name!#] using the IP: [#!variable!ip_address!#]. Is it running? Exiting.
+ Failed to parse the CIB. Is this node in the cluster? Exiting.
+ We're not a full member of the cluster yet. Please try again once we're fully in. Exiting.
+ We can't setup a server to be protected unless both nodes are up, and the peer isn't at this time. Exiting.
+ We can't remove a server from DR unless both nodes are up, and the peer isn't at this time. Exiting.
+ '. Exiting.]]>
+ Failed to find the server: [#!variable!server!#] by name or UUID? Exiting.
+ The protocol: [#!variable!protocol!#] is invalid. Please use '--help' for more information.
+ The DR host: [#!variable!host_name!#] doesn't appear to be storage group: [#!variable!storage_group!#]. Unable to proceed.
+ We need: [#!variable!space_needed!# (#!variables!space_needed_bytes!# Bytes)] from the storage group: [#!variable!storage_group!#], but only: [#!variables!space_on_dr!# (#!variable!space_on_dr_bytes!# bytes)] is available on DR. Unable to proceed.
+ [ Error ] - The check appears to have failed. Expected a return code of '0', but got: [#!variable!return_code!#]
+The output, if any, was
+====
+#!variable!output!#
+====
+
+ - Restoring the old config now.
+ - The problematic new config has been saved as: [#!variable!file!#].
+ - The old config has been restored. Exiting.
+ - The logical volume: [#!variable!lv_path!#] creation failed. Unable to proceed.
@@ -1178,13 +1201,43 @@ It should be provisioned in the next minute or two.
Loading the new corosync config exited with return code: [#!variable!return_code!#] and output: [#!variable!output!#]
Manage VNC Pipes
Perform VNC pipe operation [#!variable!operation!#] for server UUID [#!variable!server_uuid!#] from host UUID [#!variable!host_uuid!#].
-
Manage a server menu:
* Please enter the name of the server you want to manage
-=] Servers available to manage on the Anvil! [#!variable!anvil_name!#] [=-
-=] Managing the server: [#!variable!server_name!#] on the Anvil!: [#!variable!anvil_name!#]
Manage DR tasks for a given server
This job can protect, remove (unprotect), connect, disconnect or update (connect, sync, disconnect) a given server.
+ Running sanity checks.
+ Sanity checks complete!
+ Beginning to protect the server: [#!variable!server!#]!
+ Verified that there is enough space on DR to proceed.
+* The connection protocol will be: ..... [#!variable!protocol!#]
+* Node 1 to DR will use TCP port: ...... [#!variable!node1_to_dr_port!#]
+* Node 2 to DR will use TCP port: ...... [#!variable!node2_to_dr_port!#]
+* We will update the DRBD resource file: [#!variable!config_file!#]
+The following LV(s) will be created:
+
+ - Resource: [#!variable!resource!#], Volume: [#!variable!volume!#]
+ - The LV: [#!variable!lv_path!#] with the size: [#!variable!lv_size!# (#!variable!lv_size_bytes!# Bytes)] will be created.
+ The resource file: [#!variable!file!#] doesn't need to be updated.
+ - Backed up old config as: [#!variable!backup_file!#]. Updating it now.
+ - Updated! Verifying...
+ - The new config looks good!
+ - Updating the peers now...
+ - Updating the resource file: [#!variable!file!#] on the host: [#!variable!host_name!#] via IP: [#!variable!ip_address!#].
+ Creating logical volumes on DR, if needed. New LVs will have metadata created.
+ - Volume: [#!variable!volume!#].
+ - The logical volume: [#!variable!lv_path!#] already exists, skipping it, and NOT create DRBD meta data.
+ - Reloading the local DRBD resource config.
+ - Reloading the resource: [#!variable!server!#] on the host: [#!variable!host_name!#].
+ - Checking, and starting where needed, the: [#!variable!server!#] resource locally and on peers.
+ - Checking locally.
+ - Checking the host: [#!variable!host_name!#]
+ - Checking to see if the DR host has connected to this resource yet.
+ - Not up yet, will check again at: [#!variable!next_check!#].
+ - Up!
+ Done! The server: [#!variable!server!#] is now being protected on DR!
+It will take time for it to initialize, please be patient.
Starting: [#!variable!program!#].
diff --git a/tools/anvil-manage-dr b/tools/anvil-manage-dr
index 3ed04b0e..ab23e8ef 100755
--- a/tools/anvil-manage-dr
+++ b/tools/anvil-manage-dr
@@ -40,7 +40,7 @@ $anvil->data->{switches}{server} = ""; # Name or UUID
$anvil->data->{switches}{update} = ""; # connects, if needed, and disconnects once UpToDate
$anvil->data->{switches}{Yes} = ""; # Set to avoid confirmation, not case sensitive
$anvil->Get->switches;
-$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, secure => 0, key => "log_0115", variables => { program => $THIS_FILE }});
+$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "log_0115", variables => { program => $THIS_FILE }});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
'switches::connect' => $anvil->data->{switches}{'connect'},
'switches::disconnect' => $anvil->data->{switches}{disconnect},
@@ -54,7 +54,7 @@ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list
}});
$anvil->Database->connect();
-$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, secure => 0, key => "log_0132"});
+$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, key => "log_0132"});
if (not $anvil->data->{sys}{database}{connections})
{
# No databases, update the job, sleep for a bit and then exit. The daemon will pick it up and try
@@ -106,6 +106,12 @@ sub sanity_check
{
my ($anvil, $terminal) = @_;
+ # Begin sanity checks
+ $anvil->Job->update_progress({
+ progress => 10,
+ message => "job_0358",
+ });
+
# Are we a node or DR?
my $host_type = $anvil->Get->host_type();
my $anvil_uuid = $anvil->Cluster->get_anvil_uuid();
@@ -116,7 +122,13 @@ sub sanity_check
if (($host_type ne "node") or (not $anvil_uuid))
{
- print "This must be run on a node active in the cluster hosting the server being managed. Exiting.\n";
+ # This must be run on a node active in the cluster hosting the server being managed.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0332"});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0332",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -128,7 +140,13 @@ sub sanity_check
# Does this Anvil! have a DR node?
if (not $anvil->data->{anvils}{anvil_uuid}{$anvil_uuid}{anvil_dr1_host_uuid})
{
- print "This Anvil! does not seem to have a DR host. Exiting.\n";
+ # This Anvil! does not seem to have a DR host. Exiting.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, secure => 0, key => "error_0333"});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0333",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -148,7 +166,13 @@ sub sanity_check
}});
if ((not $dr_ip) or ($dr_ip eq "!!error!!"))
{
- print "Failed to find an IP we can access the DR host: [".$dr1_host_name."]. Has it been configured? Is it running? Exiting.\n";
+ # Failed to find an IP we can access the DR host. Has it been configured? Is it running? Exiting.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, secure => 0, key => "error_0334", variables => { host_name => $dr1_host_name }});
+ $anvil->Job->update_progress({
+ progress => 0,
+ message => "error_0334,!!host_name!".$dr1_host_name."!!",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -160,7 +184,16 @@ sub sanity_check
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { access => $access }});
if (not $access)
{
- print "Failed to access the DR host: [".$dr1_host_name."] using the IP: [".$dr_ip."]. Is it running? Exiting.\n";
+ # Failed to access the DR host. Is it running? Exiting.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0335", variables => {
+ host_name => $dr1_host_name,
+ ip_address => $dr_ip,
+ }});
+ $anvil->Job->update_progress({
+ progress => 0,
+ message => "error_0335,!!host_name!".$dr1_host_name."!!,!!ip_address!".$dr_ip."!!",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -169,14 +202,26 @@ sub sanity_check
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
if ($problem)
{
- print "Failed to parse the CIB. Is this node in the cluster? Exiting.\n";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0336"});
+ $anvil->Job->update_progress({
+ progress => 0,
+ message => "error_0336",
+ job_status => "failed",
+ });
+ $anvil->nice_exit({exit_code => 1});
$anvil->nice_exit({exit_code => 1});
}
# Both nodes need to be in the cluster, are they?
if (not $anvil->data->{cib}{parsed}{'local'}{ready})
{
- print "We're not a full member of the cluster yet. Please try again once we're fully in. Exiting.\n";
+ # We're not a full member of the cluster yet. Please try again once we're fully in. Exiting.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0337"});
+ $anvil->Job->update_progress({
+ progress => 0,
+ message => "error_0337",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -190,11 +235,25 @@ sub sanity_check
{
if ($anvil->data->{switches}{protect})
{
- print "We can't setup a server to be protected unless both nodes are up, and the peer isn't at this time. Exiting.\n";
+ # We can't setup a server to be protected unless both nodes are up, and the peer
+ # isn't at this time.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0338"});
+ $anvil->Job->update_progress({
+ progress => 0,
+ message => "error_0338",
+ job_status => "failed",
+ });
}
else
{
- print "We can't remove a server from DR unless both nodes are up, and the peer isn't at this time. Exiting.\n";
+ # We can't remove a server from DR unless both nodes are up, and the peer isn't at
+ # this time.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0339"});
+ $anvil->Job->update_progress({
+ progress => 0,
+ message => "error_0339",
+ job_status => "failed",
+ });
}
$anvil->nice_exit({exit_code => 1});
}
@@ -205,7 +264,13 @@ sub sanity_check
$anvil->data->{server}{'anvil-uuid'} = $anvil_uuid;
if (not $anvil->data->{switches}{server})
{
- print "Please specify the server to manager using '--server '. Exiting.\n";
+ # Please specify the server to manager using '--server '.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0340"});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0340",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
else
@@ -237,7 +302,13 @@ sub sanity_check
# Get and parse the server's definition to find the DRBD devices.
if ((not $anvil->data->{server}{'server-uuid'}) or (not $anvil->data->{server}{'server-name'}))
{
- print "Failed to find the server: [".$anvil->data->{switches}{server}."] by name or UUID? Exiting.\n";
+ # Failed to find the server by name or UUID.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0341", variables => { server => $anvil->data->{switches}{server} }});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0341,!!server!".$anvil->data->{switches}{server}."!!",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -252,7 +323,13 @@ sub sanity_check
($anvil->data->{switches}{protocol} ne "async") &&
($anvil->data->{switches}{protocol} ne "long-throw"))
{
- print "The protocol: [".$anvil->data->{switches}{protocol}."] is invalid. Please use '--help' for more information.\n";
+ # The protocol is invalid. Please use '--help' for more information.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0342", variables => { protocol => $anvil->data->{switches}{protocol} }});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0341,!!protocol!".$anvil->data->{switches}{protocol}."!!",
+ job_status => "failed",
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -370,6 +447,13 @@ Exiting.
}
}
+ # Sanity checks complete!
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0359"});
+ $anvil->Job->update_progress({
+ progress => 20,
+ message => "job_0359",
+ });
+
# If we're protecting, make sure there's enough space on the DR host.
if ($anvil->data->{switches}{protect})
{
@@ -418,6 +502,13 @@ sub process_protect
short_host_name => $short_host_name,
}});
+ # Sanity checks complete!
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0360", variables => { server => $anvil->data->{server}{'server-name'} }});
+ $anvil->Job->update_progress({
+ progress => 30,
+ message => "job_0360,!!server!".$anvil->data->{server}{'server-name'}."!!",
+ });
+
$anvil->Server->parse_definition({
debug => 2,
host => $short_host_name,
@@ -567,7 +658,15 @@ sub process_protect
# First, is this SG on DR?
if (not exists $anvil->data->{storage_groups}{anvil_uuid}{$anvil_uuid}{storage_group_uuid}{$storage_group_uuid}{host_uuid}{$dr1_host_uuid})
{
- print "The DR host: [".$dr1_host_name."] doesn't appear to be storage group: [".$storage_group_name."]. Unable to proceed.\n";
+ # The DR host doesn't appear to be storage group.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0343", variables => {
+ host_name => $dr1_host_name,
+ storage_group => $$storage_group_name,
+ }});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0343,!!host_name!".$dr1_host_name."!!,!!storage_group!".$$storage_group_name."!!",
+ });
$problem = 1;
}
@@ -597,7 +696,19 @@ sub process_protect
}});
if ($space_needed > $space_on_dr)
{
- print "We need: [".$anvil->Convert->bytes_to_human_readable({'bytes' => $space_needed})." (".$anvil->Convert->add_commas({number => $space_needed})." Bytes)] from the storage group: [".$storage_group_name."], but only: [".$anvil->Convert->bytes_to_human_readable({'bytes' => $space_on_dr})." (".$anvil->Convert->add_commas({number => $space_on_dr})." bytes)] is available on DR. Unable to proceed.\n";
+ my $variables = {
+ space_needed => $anvil->Convert->bytes_to_human_readable({'bytes' => $space_needed}),
+ space_needed_bytes => $anvil->Convert->add_commas({number => $space_needed}),
+ storage_group => $storage_group_name,
+ space_on_dr => $anvil->Convert->bytes_to_human_readable({'bytes' => $space_on_dr}),
+ space_on_dr_bytes => $anvil->Convert->add_commas({number => $space_on_dr}),
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0344", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0344",
+ variables => $variables
+ });
$problem = 1;
}
}
@@ -613,17 +724,33 @@ sub process_protect
});
my ($node1_to_dr_port, $node2_to_dr_port) = split/,/, $tcp_ports;
- print "Verified that there is enough space on DR to proceed.\n";
- print "* The connection protocol will be: ..... [".$anvil->data->{switches}{protocol}."]\n";
- print "* Node 1 to DR will use TCP port: ...... [".$node1_to_dr_port."]\n";
- print "* Node 2 to DR will use TCP port: ...... [".$node2_to_dr_port."]\n";
- print "* We will update the DRBD resource file: [".$config_file."]\n";
- print "The following LV(s) will be created:\n";
+ # Show what we're doing
+ my $variables = {
+ protocol => $anvil->data->{switches}{protocol},
+ node1_to_dr_port => $node1_to_dr_port,
+ node2_to_dr_port => $node2_to_dr_port,
+ config_file => $config_file,
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0361", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 40,
+ message => "job_0361",
+ variables => $variables,
+ });
foreach my $resource (sort {$a cmp $b} keys %{$anvil->data->{server}{drbd}})
{
foreach my $volume (sort {$a cmp $b} keys %{$anvil->data->{server}{drbd}{$resource}})
{
- print "- Resource: [".$resource."], Volume: [".$volume."]\n";
+ my $variables = {
+ resource => $resource,
+ volume => $volume,
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0362", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 43,
+ message => "job_0362",
+ variables => $variables,
+ });
my $lv_size = $anvil->data->{server}{drbd}{$resource}{$volume}{size};
my $storage_group_uuid = $anvil->data->{server}{drbd}{$resource}{$volume}{storage_group_uuid};
my $dr_lv_name = $resource."_".$volume;
@@ -663,7 +790,17 @@ sub process_protect
}});
# Get the VG name that this volume will be created on.
- print " - The LV: [".$dr_lv_path."] with the size: [".$anvil->Convert->bytes_to_human_readable({'bytes' => $lv_size})." (".$anvil->Convert->add_commas({number => $lv_size})." Bytes)] will be created.\n";
+ $variables = {
+ lv_path => $dr_lv_path,
+ lv_size => $anvil->Convert->bytes_to_human_readable({'bytes' => $lv_size}),
+ lv_size_bytes => $anvil->Convert->add_commas({number => $lv_size}),
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0363", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 47,
+ message => "job_0363",
+ variables => $variables,
+ });
}
}
@@ -672,20 +809,20 @@ sub process_protect
if (not $anvil->data->{switches}{Yes})
{
# Ask the user to confirm.
- print "\n- Proceed? [N/y]: ";
+ print "\n".$anvil->Words->string({key => "message_0021"})."\n";
my $answer = ;
chomp $answer;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { answer => $answer }});
if ($answer =~ /^y/i)
{
- print "- Thank you, storing job now.\n";
+ print $anvil->Words->string({key => "message_0175"})."\n";
$record_job = 1;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { record_job => $record_job }});
}
else
{
- print "- Aborting.\n";
+ print $anvil->Words->string({key => "message_0022"})."\n";
$anvil->nice_exit({exit_code => 0});
}
}
@@ -899,7 +1036,16 @@ sub process_protect
if (not $difference)
{
- print "The resource file: [".$config_file."] doesn't need to be updated.\n";
+ # The resource file doesn't need to be updated.
+ my $variables = {
+ file => $config_file,
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0364", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 50,
+ message => "job_0364",
+ variables => $variables,
+ });
}
else
{
@@ -921,7 +1067,7 @@ sub process_protect
# Validate.
my $shell_call = $anvil->data->{path}{exe}{drbdadm}." --config-to-test ".$test_file." --config-to-exclude ".$config_file." sh-nop";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { shell_call => $shell_call }});
- my ($output, $return_code) = $anvil->System->call({shell_call => $anvil->data->{path}{exe}{drbdadm}." dump-xml"});
+ my ($output, $return_code) = $anvil->System->call({shell_call => $shell_call});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
output => $output,
return_code => $return_code,
@@ -929,11 +1075,16 @@ sub process_protect
if ($return_code)
{
# Something went wrong.
- print "[ Error ] - The check appears to have failed. Expected a return code of '0', but got: [".$return_code."]\n";
- print "The output, if any, was:\n";
- print "====\n";
- print $output."\n";
- print "====\n";
+ my $variables = {
+ return_code => $return_code,
+ output => $output,
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0345", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0345",
+ variables => $variables,
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -944,7 +1095,13 @@ sub process_protect
# case they need to restore it.
my ($backup_file) = $anvil->Storage->backup({file => $config_file});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { backup_file => $backup_file }});
- print "- Backed up old config as: [".$backup_file."]. Updating it now.\n";
+ my $variables = { backup_file => $backup_file };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0365", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 60,
+ message => "job_0365",
+ variables => $variables,
+ });
# Write out the new file.
($problem) = $anvil->Storage->write_file({
@@ -958,22 +1115,44 @@ sub process_protect
mode => "0644",
});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { backup_file => $backup_file }});
- print "- Updated! Verifying...\n";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0366"});
+ $anvil->Job->update_progress({
+ progress => 65,
+ message => "job_0366",
+ });
# Call 'drbdadm dump-xml' to check that it's OK.
($output, $return_code) = $anvil->System->call({shell_call => $anvil->data->{path}{exe}{drbdadm}." dump-xml"});
if ($return_code)
{
# Something went wrong.
- print "[ Error ] - The check appears to have failed. Expected a return code of '0', but got: [".$return_code."]\n";
- print "The output, if any, was:\n";
- print "====\n";
- print $output."\n";
- print "====\n";
- print "- Restoring the old config now.\n";
+ my $variables = {
+ return_code => $return_code,
+ output => $output,
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0345", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 70,
+ message => "error_0345",
+ variables => $variables,
+ });
+
+ # Restoring the old config now.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0346"});
+ $anvil->Job->update_progress({
+ progress => 75,
+ message => "error_0346",
+ });
+ # Backup the bad file and worn the user.
my ($backup_file) = $anvil->Storage->backup({file => $config_file});
- print "- The problematic new config has been saved as: [".$backup_file."]\n";
+ $variables = { file => $backup_file };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0347", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 80,
+ message => "error_0347",
+ variables => $variables,
+ });
# Write out the new file.
my ($problem) = $anvil->Storage->write_file({
@@ -987,23 +1166,47 @@ sub process_protect
mode => "0644",
});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { backup_file => $backup_file }});
- print "- The old config has been restored. Exiting.\n";
+
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0348"});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0348",
+ variables => $variables,
+ });
$anvil->nice_exit({exit_code => 1});
}
# New config is good! Update the file on the peers.
- print "- The new config looks good!\n";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0367"});
+ $anvil->Job->update_progress({
+ progress => 70,
+ message => "job_0367",
+ });
}
# New config is good! Update the file on the peers.
- print "- Updating the peers now...\n";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0368"});
+ $anvil->Job->update_progress({
+ progress => 72,
+ message => "job_0368",
+ });
foreach my $this_host_uuid ($node1_host_uuid, $node2_host_uuid, $dr1_host_uuid)
{
# "Peer" in this context is either a node or a DR host
next if $this_host_uuid eq $anvil->Get->host_uuid();
my $peer_host_name = $anvil->data->{hosts}{host_uuid}{$this_host_uuid}{short_host_name};
my $peer_sn_ip = $anvil->data->{hosts}{host_uuid}{$this_host_uuid}{network}{sn1}{ip_address};
- print "- Updating the resource file: [".$config_file."] on the host: [".$peer_host_name."] via IP: [".$peer_sn_ip."]\n";
+ my $variables = {
+ file => $config_file,
+ host_name => $peer_host_name,
+ ip_address => $peer_sn_ip,
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0369", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 75,
+ message => "job_0369",
+ variables => $variables,
+ });
my ($problem) = $anvil->Storage->write_file({
debug => 2,
backup => 1,
@@ -1020,11 +1223,21 @@ sub process_protect
}
# Create the LV and MD on DR.
- print "Creating logical volumes on DR, if needed. New LVs will have metadata created.\n";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0370"});
+ $anvil->Job->update_progress({
+ progress => 78,
+ message => "job_0370",
+ });
my $create_md = 0;
foreach my $volume (sort {$a cmp $b} keys %{$anvil->data->{server}{drbd}{$server_name}})
{
- print "- Volume: [".$volume."]\n";
+ my $variables = { volume => $volume };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0371", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 80,
+ message => "job_0371",
+ variables => $variables,
+ });
my $dr1_sn1_ip = $anvil->data->{hosts}{host_uuid}{$dr1_host_uuid}{network}{sn1}{ip_address};
my $lv_path = $anvil->data->{server}{dr}{volumes}{$server_name}{$volume}{lv_path};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
@@ -1053,7 +1266,13 @@ fi";
}});
if ($output eq "exists")
{
- print "- The logical volume: [".$lv_path."] already exists, skipping it, and NOT create DRBD meta data.\n";
+ my $variables = { lv_path => $lv_path };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0372", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 80,
+ message => "job_0372",
+ variables => $variables,
+ });
next;
}
@@ -1071,11 +1290,6 @@ fi";
return_code => $return_code,
}});
- print "- LV create call return code: [".$return_code."], output:\n";
- print "====\n";
- print $output."\n";
- print "====\n";
-
sleep 1;
# Does it exist now?
($output, $error, $return_code) = $anvil->Remote->call({
@@ -1090,7 +1304,13 @@ fi";
}});
if ($output eq "create")
{
- print "- The logical volume: [".$lv_path."] creation failed. Unable to proceed.\n";
+ my $variables = { lv_path => $lv_path };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "error_0349", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "error_0349",
+ variables => $variables,
+ });
$anvil->nice_exit({exit_code => 1});
}
@@ -1117,16 +1337,15 @@ fi";
output => $output,
return_code => $return_code,
}});
-
- # Get the VG name that this volume will be created on.
- print " - The DRBD metadata creation call return code: [".$return_code."], output:\n";
- print "====\n";
- print $output."\n";
- print "====\n";
}
# Reload the config.
- my $shell_call = $anvil->data->{path}{exe}{drbdadm}." --adjust ".$server_name;
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0373"});
+ $anvil->Job->update_progress({
+ progress => 85,
+ message => "job_0373",
+ });
+ my $shell_call = $anvil->data->{path}{exe}{drbdadm}." adjust ".$server_name;
$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});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
@@ -1139,7 +1358,16 @@ fi";
next if $this_host_uuid eq $anvil->Get->host_uuid();
my $peer_host_name = $anvil->data->{hosts}{host_uuid}{$this_host_uuid}{short_host_name};
my $peer_sn_ip = $anvil->data->{hosts}{host_uuid}{$this_host_uuid}{network}{sn1}{ip_address};
- print "- Reloading the resource: [".$server_name."] on the host: [".$peer_host_name."]\n";
+ my $variables = {
+ server => $server_name,
+ host_name => $peer_host_name,
+ };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0374", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 85,
+ message => "job_0374",
+ variables => $variables,
+ });
my ($output, $error, $return_code) = $anvil->Remote->call({
target => $peer_sn_ip,
password => $anvil_password,
@@ -1153,8 +1381,13 @@ fi";
}
# If the resource is down, bring it up.
- print "- Checking, and starting where needed, the: [".$server_name."] resource locally and on peers.\n";
- print " - Checking locally.\n";
+ $variables = { server => $server_name };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0375", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 88,
+ message => "job_0375",
+ variables => $variables,
+ });
my $drbd_up_call = $anvil->data->{path}{exe}{drbdsetup}." status ".$server_name." || ".$anvil->data->{path}{exe}{drbdadm}." up ".$server_name;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { drbd_up_call => $drbd_up_call }});
($output, $return_code) = $anvil->System->call({shell_call => $drbd_up_call});
@@ -1168,7 +1401,13 @@ fi";
next if $this_host_uuid eq $anvil->Get->host_uuid();
my $peer_host_name = $anvil->data->{hosts}{host_uuid}{$this_host_uuid}{short_host_name};
my $peer_sn_ip = $anvil->data->{hosts}{host_uuid}{$this_host_uuid}{network}{sn1}{ip_address};
- print " - Checking the host: [".$peer_host_name."]\n";
+ $variables = { host_name => $peer_host_name };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0376", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 90,
+ message => "job_0376",
+ variables => $variables,
+ });
my ($output, $error, $return_code) = $anvil->Remote->call({
target => $peer_sn_ip,
password => $anvil_password,
@@ -1182,7 +1421,11 @@ fi";
}
# Now watch until the DR host shows up
- print "Checking to see if the DR host has connected to this resource yet.\n";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0377"});
+ $anvil->Job->update_progress({
+ progress => 92,
+ message => "job_0377",
+ });
my $waiting = 1;
while($waiting)
{
@@ -1209,24 +1452,41 @@ fi";
else
{
# Not up yet.
- print "- Not up yet, will check again in five seconds.\n";
+ my $next_check = $anvil->Get->date_and_time({offset => 5, time_only => 1});
+ my $variables = { next_check => $next_check };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0378", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 95,
+ message => "job_0378",
+ variables => $variables,
+ });
$dr_seen = 0;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { dr_seen => $dr_seen }});
+ last;
}
}
if ($dr_seen)
{
# We're ready.
- print "- Up!\n";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0379"});
+ $anvil->Job->update_progress({
+ progress => 98,
+ message => "job_0379",
+ });
$waiting = 0;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { waiting => $waiting }});
}
}
# Done!
- print "Done! The server: [".$server_name."] is no being protected on DR!\n";
- print "It will take time for it to initialize, please be patient.\n";
+ $variables = { server => $server_name };
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0380", variables => $variables});
+ $anvil->Job->update_progress({
+ progress => 100,
+ message => "job_0380",
+ variables => $variables,
+ });
return(0);
}
diff --git a/tools/anvil-provision-server b/tools/anvil-provision-server
index a999fe64..0ddee354 100755
--- a/tools/anvil-provision-server
+++ b/tools/anvil-provision-server
@@ -161,8 +161,8 @@ sub run_jobs
# Sanity checks passed
$anvil->Job->update_progress({
- progress => 10,
- message => "job_0185",
+ progress => 10,
+ message => "job_0185",
});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "job_0185"});