Add test_ssh_connection

The feature was written by Jaime and reworked by me to fix
https://github.com/greg2ndQuadrant/repmgr/issues/5
This commit is contained in:
Cédric Villemain
2011-05-09 22:39:21 +02:00
committed by Jaime Casanova
parent 17a160e970
commit 6e9e4e05ae
2 changed files with 29 additions and 0 deletions

View File

@@ -37,6 +37,7 @@
Improve performance of repl_status view (Jaime) Improve performance of repl_status view (Jaime)
1.2.0 2012-04-28 1.2.0 2012-04-28
Test ssh connection before trying to rsync (Cédric)
Add CLUSTER SHOW command (Carlo Ascani) Add CLUSTER SHOW command (Carlo Ascani)
Add CLUSTER CLEANUP command (Jaime) Add CLUSTER CLEANUP command (Jaime)
Add function write_primary_conninfo (Marco Nenciarini) Add function write_primary_conninfo (Marco Nenciarini)

View File

@@ -50,6 +50,7 @@
static void help(const char *progname); static void help(const char *progname);
static bool create_recovery_file(const char *data_dir, char *master_conninfo); static bool create_recovery_file(const char *data_dir, char *master_conninfo);
static int test_ssh_connection(char *host, char *remote_user);
static int copy_remote_files(char *host, char *remote_user, char *remote_path, static int copy_remote_files(char *host, char *remote_user, char *remote_path,
char *local_path, bool is_directory); char *local_path, bool is_directory);
static bool check_parameters_for_action(const int action); static bool check_parameters_for_action(const int action);
@@ -1007,6 +1008,15 @@ do_standby_clone(void)
} }
} }
r = test_ssh_connection(runtime_options.host, runtime_options.remote_user);
if (r != 0)
{
log_err(_("%s: Aborting, remote host %s is not reachable.\n"), progname, runtime_options.host);
PQclear(res);
PQfinish(conn);
exit(ERR_DB_CON);
}
log_notice("Starting backup...\n"); log_notice("Starting backup...\n");
/* Get the data directory full path and the configuration files location */ /* Get the data directory full path and the configuration files location */
@@ -1564,6 +1574,24 @@ create_recovery_file(const char *data_dir, char *master_conninfo)
return true; return true;
} }
static int
test_ssh_connection(char *host, char *remote_user)
{
char script[MAXLEN];
int r;
/* Check if we have ssh connectivity to host before trying to rsync */
if (!remote_user[0])
maxlen_snprintf(script, "ssh -o Batchmode=yes %s /bin/true", host);
else
maxlen_snprintf(script, "ssh -o Batchmode=yes %s -l %s /bin/true", host, remote_user);
log_debug(_("command is: %s"), script);
r = system(script);
if (r != 0)
log_info(_("Can not connect to the remote host (%s)\n"), host);
return r;
}
static int static int
copy_remote_files(char *host, char *remote_user, char *remote_path, copy_remote_files(char *host, char *remote_user, char *remote_path,