diff --git a/Anvil/Tools/Server.pm b/Anvil/Tools/Server.pm
index 927a7052..f4be6c00 100755
--- a/Anvil/Tools/Server.pm
+++ b/Anvil/Tools/Server.pm
@@ -186,6 +186,10 @@ This is the password to use when connecting to a remote machine. If not set, but
This is the TCP port to use when connecting to a remote machine. If not set, but C<< target >> is, C<< 22 >> will be used.
+=head3 refresh (optional, default '0')
+
+Is set to C<< 1 >>, and previously seen servers and their information is cleared.
+
=head3 remote_user (optional, default 'root')
If C<< target >> is set, this will be the user we connect to the remote machine as.
@@ -204,17 +208,19 @@ sub find
my $password = defined $parameter->{password} ? $parameter->{password} : "";
my $port = defined $parameter->{port} ? $parameter->{port} : "";
+ my $refresh = defined $parameter->{refresh} ? $parameter->{refresh} : 0;
my $remote_user = defined $parameter->{remote_user} ? $parameter->{remote_user} : "root";
my $target = defined $parameter->{target} ? $parameter->{target} : "local";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
password => $anvil->Log->secure ? $password : $anvil->Words->string({key => "log_0186"}),
port => $port,
+ refresh => $refresh,
remote_user => $remote_user,
target => $target,
}});
# Clear any old data
- if (exists $anvil->data->{server}{location})
+ if ((exists $anvil->data->{server}{location}) && ($refresh))
{
delete $anvil->data->{server}{location};
}
diff --git a/notes b/notes
index 1d0a7f10..7e0665fd 100644
--- a/notes
+++ b/notes
@@ -1115,3 +1115,12 @@ virt-install --connect qemu:///system \
--disk path=/dev/an-a01n01_vg0/srv09-psql_0,bus=virtio,cache=writethrough \
--graphics spice \
--noautoconsole --wait -1 > /var/log/anvil-server_srv09-psql.log &
+
+
+# Migration;
+pcs resource move test_server
+# (then remove the constraint);
+pcs constraint show --full
+pcs constraint remove cli-ban-test_server-on-el8-a01n01
+
+
diff --git a/ocf/alteeve/server b/ocf/alteeve/server
index eb0c79ae..6b9e6aef 100755
--- a/ocf/alteeve/server
+++ b/ocf/alteeve/server
@@ -98,6 +98,9 @@ my $anvil = Anvil::Tools->new();
$anvil->Log->level({set => 2});
$anvil->Log->secure({set => 1});
+# For the logs...
+$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, secure => 0, key => "log_0115", variables => { program => 'ocf:alteeve:'.$THIS_FILE }});
+
### Read or Set the environment variables
# This is the name of the server we're managing. # Example values:
$anvil->data->{environment}{OCF_RESKEY_name} = defined $ENV{OCF_RESKEY_name} ? $ENV{OCF_RESKEY_name} : ""; # srv01-c7
@@ -616,13 +619,15 @@ sub migrate_server
# missing.
# If we're given 'migrate_from', we're pulling the server towards us, so we can check both brdiges
# and storage.
- my $server = $anvil->data->{environment}{OCF_RESKEY_name};
- my $source = $anvil->data->{environment}{OCF_RESKEY_CRM_meta_migrate_source};
- my $target = $anvil->data->{environment}{OCF_RESKEY_CRM_meta_migrate_target};
+ my $server = $anvil->data->{environment}{OCF_RESKEY_name};
+ my $source = $anvil->data->{environment}{OCF_RESKEY_CRM_meta_migrate_source};
+ my $target = $anvil->data->{environment}{OCF_RESKEY_CRM_meta_migrate_target};
+ my $meta_on_node = $anvil->data->{environment}{OCF_RESKEY_CRM_meta_on_node};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
server => $server,
source => $source,
target => $target,
+ meta_on_node => $meta_on_node,
'switches::migrate_to' => $anvil->data->{switches}{migrate_to},
'switches::migrate_from' => $anvil->data->{switches}{migrate_from},
}});
@@ -647,12 +652,8 @@ sub migrate_server
$anvil->nice_exit({exit_code => 5});
}
- # Get a view of the servers locally and our peer.
- validate_all($anvil);
-
# Find the server
$anvil->Server->find({debug => 3});
-
my $server_host = defined $anvil->data->{server}{location}{$server}{host} ? $anvil->data->{server}{location}{$server}{host} : "";
my $server_status = defined $anvil->data->{server}{location}{$server}{status} ? $anvil->data->{server}{location}{$server}{status} : "";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
@@ -660,12 +661,38 @@ sub migrate_server
server_status => $server_status,
}});
+ # Is it already on the target?
+ if (not $server_status)
+ {
+ # Maybe...
+ $anvil->Server->find({debug => 3, target => $target});
+ $server_host = defined $anvil->data->{server}{location}{$server}{host} ? $anvil->data->{server}{location}{$server}{host} : "";
+ $server_status = defined $anvil->data->{server}{location}{$server}{status} ? $anvil->data->{server}{location}{$server}{status} : "";
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ server_host => $server_host,
+ server_status => $server_status,
+ }});
+
+ if (($server_host eq $target) && (($server_status) && ($server_status eq "running")))
+ {
+ # Already over there, we're done.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "log_0430", variables => {
+ server => $server,
+ target => $target,
+ }});
+ $anvil->nice_exit({exit_code => 0});
+ }
+ }
+
if (not $server_host)
{
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 0, priority => "err", key => "log_0344", variables => { server => $server }});
$anvil->nice_exit({exit_code => 1});
}
+ # Get a view of the servers locally and our peer.
+ validate_all($anvil);
+
# Get the DRBD status.
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "log_0387"});
$anvil->DRBD->get_status({debug => 2});
@@ -771,16 +798,17 @@ sub migrate_server
elsif ($anvil->data->{switches}{migrate_from})
{
# Pull the server here. Start by verifying it's on the 'meta_on_node' host.
- my $meta_on_node = $anvil->data->{environment}{OCF_RESKEY_CRM_meta_on_node};
- my $host = defined $anvil->data->{server}{location}{$server}{host} ? $anvil->data->{server}{location}{$server}{host} : "";
- my $status = defined $anvil->data->{server}{location}{$server}{status} ? $anvil->data->{server}{location}{$server}{status} : "";
+ # Scan locally and on our peer
+ $anvil->Server->find({debug => 2});
+ $anvil->Server->find({debug => 2, target => $meta_on_node});
+
+ my $host = defined $anvil->data->{server}{location}{$server}{host} ? $anvil->data->{server}{location}{$server}{host} : "";
+ my $status = defined $anvil->data->{server}{location}{$server}{status} ? $anvil->data->{server}{location}{$server}{status} : "";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
- host => $host,
- status => $status,
- meta_on_node => $meta_on_node,
- target => $target,
+ host => $host,
+ status => $status,
+ target => $target,
}});
- $anvil->Server->find({debug => 2, target => $meta_on_node});
my $server_host = defined $anvil->data->{server}{location}{$server}{host} ? $anvil->data->{server}{location}{$server}{host} : "";
my $server_status = defined $anvil->data->{server}{location}{$server}{status} ? $anvil->data->{server}{location}{$server}{status} : "";
@@ -791,13 +819,13 @@ sub migrate_server
# This is called after a migration. If that is the case here, the target will be us. Just
# make sure it is running and, if so, return '0'. The 'meta_on_node' is the new host.
- if ($meta_on_node eq $target)
+ if (($target eq $anvil->_hostname) or ($target eq $anvil->_short_hostname) or ($target eq $meta_on_node))
{
# Yup. All we want to do if make sure it is running here.
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "log_0345", variables => { server => $server }});
# If it's running, we're succesfully out.
- if ($status eq "running")
+ if (($host eq $target) && ($status eq "running"))
{
# Success!
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "log_0347", variables => { server => $server }});
diff --git a/share/words.xml b/share/words.xml
index 229e140e..6a3ba970 100644
--- a/share/words.xml
+++ b/share/words.xml
@@ -747,6 +747,7 @@ Failed to promote the DRBD resource: [#!variable!resource!#] primary. Expected a
[ Warning ] - The server: [#!variable!server!#] is not yet off after: [#!variable!wait!#] seconds. Giving up waiting.
[ Error ] - The server: [#!variable!server!#] can't by migrated to: [#!variable!target!#] because the resource: [#!variable!resource!#] isn't connected. The current connection state is: [#!variable!connection_state!#].
[ Error ] - The server: [#!variable!server!#] can't by migrated to: [#!variable!target!#] because we can't reach it at all right now.
+ The migration of the server: [#!variable!server!#] over to: [#!variable!target!#] isn't needed, it's already running on the target. Exiting successfully.
Test