Markus Mäkelä 32bfcc117b
MXS-1731: Ignore empty values in persisted configs
If a MaxScale-generated configuration defines an empty value, it is
ignored with the assumption that the next modification will cause the
problem to correct itself.
2018-03-27 07:24:29 +03:00

167 lines
4.3 KiB
C++

#ifndef NODES_H
#define NODES_H
#include <errno.h>
#include <string>
#include "mariadb_func.h"
#include <set>
#include <string>
typedef std::set<std::string> StringSet;
class Nodes
{
public:
Nodes();
char IP[256][1024];
/**
* @brief private IP address strings for every backend node (for AWS)
*/
char IP_private[256][1024];
/**
* @brief IP address strings for every backend node (IPv6)
*/
char IP6[256][1024];
/**
* @brief use_ipv6 If true IPv6 addresses will be used to connect Maxscale and backed
* Also IPv6 addresses go to maxscale.cnf
*/
bool use_ipv6;
/**
* @brief Path to ssh key for every backend node
*/
char sshkey[256][4096];
/**
* @brief Number of backend nodes
*/
int N;
/**
* @brief name of backend setup (like 'repl' or 'galera')
*/
char prefix[16];
/**
* @brief access_user Unix users name to access nodes via ssh
*/
char access_user[256][256];
/**
* @brief access_sudo empty if sudo is not needed or "sudo " if sudo is needed.
*/
char access_sudo[256][64];
/**
* @brief access_homedir home directory of access_user
*/
char access_homedir[256][256];
char hostname[256][1024];
/**
* @brief stop_vm_command Command to suspend VM
*/
char stop_vm_command[256][1024];
/**
* @brief start_vm_command Command to resume VM
*/
char start_vm_command[256][1024];
/**
* @brief User name to access backend nodes
*/
char user_name[256];
/**
* @brief Password to access backend nodes
*/
char password[256];
/**
* @brief Verbose command output
*/
bool verbose;
/**
* @brief Get IP address
*
* @return The current IP address
*/
const char* ip(int i = 0) const;
/**
* @brief Generate command line to execute command on the node via ssh
* @param cmd result
* @param index index number of the node (index)
* @param ssh command to execute
* @param sudo if true the command is executed with root privelegues
*/
void generate_ssh_cmd(char * cmd, int node, const char *ssh, bool sudo);
/**
* @brief executes shell command on the node using ssh
* @param index number of the node (index)
* @param ssh command to execute
* @param sudo if true the command is executed with root privelegues
* @param pointer to variable to store process exit code
* @return output of the command
*/
char *ssh_node_output_f(int node, bool sudo, int * exit_code, const char* format, ...);
char *ssh_node_output(int node, const char *ssh, bool sudo, int *exit_code);
/**
* @brief executes shell command on the node using ssh
* @param index number of the node (index)
* @param ssh command to execute
* @param sudo if true the command is executed with root privelegues
* @return exit code of the coomand
*/
int ssh_node(int node, const char *ssh, bool sudo);
int ssh_node_f(int node, bool sudo, const char* format, ...);
/**
* @brief Copy a local file to the Node i machine
* @param src Source file on the local filesystem
* @param dest Destination file on the remote file system
* @param i Node index
* @return exit code of the system command or 1 in case of i > N
*/
int copy_to_node_legacy(const char* src, const char* dest, int i = 0);
int copy_to_node(int i, const char* src, const char* dest);
/**
* @brief Copy a local file to the Node i machine
* @param src Source file on the remote filesystem
* @param dest Destination file on the local file system
* @param i Node index
* @return exit code of the system command or 1 in case of i > N
*/
int copy_from_node_legacy(const char* src, const char* dest, int i);
int copy_from_node(int i, const char* src, const char* dest);
/**
* @brief Check node via ssh and restart it if it is not resposible
* @param node Node index
* @return 0 if node is ok, 1 if start failed
*/
int check_nodes();
/**
* @brief read_basic_env Read IP, sshkey, etc - common parameters for all kinds of nodes
* @return 0 in case of success
*/
int read_basic_env();
private:
int check_node_ssh(int node);
};
#endif // NODES_H