%PDF- %PDF-
| Direktori : /proc/self/root/proc/self/root/proc/self/root/opt/webdir/bin/ |
| Current File : //proc/self/root/proc/self/root/proc/self/root/opt/webdir/bin/bx-mysql |
#!/usr/bin/perl
# start ansible playbook for:
# 1. add slave server
# 2. remove slave server
# 3. change master
# 4. view server status
# this script is wrapper for ansible playbook ( we need json output for web-interface)
use strict;
use warnings;
use lib "/opt/webdir/lib";
use bxMysql;
use Output;
use Pool;
use Data::Dumper;
use Getopt::Long;
use File::Basename qw( dirname basename );
# program options
my $prog_name = basename $0;
my $prog_dir = dirname $0;
my $o_action = "list"; # type of action that script must do.
# status - status the server: role: options
# list - serverList
# master - change master
# slave - create slave
# delete - delete mysql
# create - create config file
my $o_config = '/etc/ansible/group_vars/bitrix-mysql.yml';
my $options = {
cluster_login => 'bx_clusteruser',
cluster_password => undef,
replica_login => 'bx_repluser',
replica_password => undef,
slave_server => undef,
password_file => undef,
};
my $o_mysql_server = undef; # ip address or hostname for mysql server
my $o_format = 'plain'; # format of stdout message
my $o_verbose = 0;
my $o_help = undef;
# get command line options
Getopt::Long::Configure("bundling");
my $result_option = GetOptions(
'v' => \$o_verbose,
'verbose' => \$o_verbose,
'h' => \$o_help,
'help' => \$o_help,
"a:s" => \$o_action,
'action:s' => \$o_action,
"s:s" => \$o_mysql_server,
'server:s' => \$o_mysql_server,
"c:s" => \$o_config,
'config:s' => \$o_config,
'cluster_login:s' => \$options->{'cluster_login'},
'cluster_password:s' => \$options->{'cluster_password'},
'replica_login:s' => \$options->{'replica_login'},
'replica_password:s' => \$options->{'replica_password'},
'password_file:s' => \$options->{'password_file'},
"o:s" => \$o_format,
'output' => \$o_format,
) or unknown_arg();
# help message
if ($o_help) { print_help( $prog_name, 0 ) }
# formt output
if ( $o_format !~ /^(json|plain|te?xt)$/ ) { print_help( $prog_name, 1 ) }
if ( $o_format =~ /^te?xt$/ ) { $o_format = "plain" }
# process request
my $confPool = bxMysql->new( cmd => $options );
my $confMysql = undef;
if ( $o_action eq "status" ) {
$confMysql = $confPool->serverOptions($o_mysql_server);
}
elsif ( $o_action eq "list" ) {
$confMysql = $confPool->serverList();
}
elsif ( $o_action eq "slave" ) {
$confMysql = $confPool->slave($o_mysql_server);
}
elsif ( $o_action eq "master" ) {
$confMysql = $confPool->master($o_mysql_server);
}
elsif ( $o_action eq "remove" ) {
$confMysql = $confPool->remove($o_mysql_server);
}
elsif ( $o_action eq "update" ) {
$confMysql = $confPool->update();
}
elsif ( $o_action =~ /^(change_password|client_config)$/ ){
$confMysql = $confPool->password($o_mysql_server, $1);
}
elsif ( $o_action =~ /^(stop_service|start_service)$/ ){
$confMysql = $confPool->manage($o_mysql_server, $1);
}
else {
$confMysql = Output->new(
error => 1,
message => "Unknown action option. PLease use -h for help message."
);
}
$confMysql->print($o_format);
# print usage
sub print_usage {
my $prog = shift;
print
"Usage: $prog [-vh] [-a status|list|slave|master|remove] [-s server_ip] \n";
}
# help message
sub print_help {
my $prog = shift;
my $exit = shift;
print_usage($prog);
print <<EOT;
Options:
-h|--help - show this message
-v|--verbose - enable verbose mode.
-a|--action - mysql action: list|status|master|slave|remove|options
-s|--server - mysql server
-c|--config - config file ( default: /etc/ansible/group_vars/bitrix-mysql )
--mysql_login - super user, usage for creation of replica
--mysql_password - super user password
--cluster_login - cluster user
--cluster_password - password
--replica_login - replication user
--replica_password - replication password
Ex.
* get status of mysql servers
$prog -o json
* get status for one server
$prog -a status -s vm1
* create first slave server and all accounts for bx cluster work
$prog -s vm2 -a slave --cluster_password="XXXXXXXXXXX" --mysql_password='YYYYYYYYYYYYY' --replica_password="ZZZZZZZZZZ"
* change master server
$prog -a master -s vm2
* delete slave server
$prog -a remove -s vm1
* test if all option connfigured
$prog -a options
EOT
exit;
}