%PDF- %PDF-
Direktori : /etc/ansible/roles/mysql/library/ |
Current File : //etc/ansible/roles/mysql/library/generate_mysql_vars |
#!/usr/bin/perl # generate mysql vars # input: super_login, super_password, cluster_login, cluster_password, replica_login, replica_password use strict; use warnings; use File::Spec; use File::Basename qw( dirname basename ); use JSON; use Data::Dumper; # search="server_name www.bitrix.ru;" basedir=/etc/nginx/bx/site_avaliable regexp=\.conf$ my $options_file = $ARGV[0]; # parse ansible argv file my $gtn_parse_ansible_argv = parse_ansible_argv ( $options_file ); if ( $gtn_parse_ansible_argv->[0] > 0 ) { print_message( { 'msg' => $gtn_parse_ansible_argv->[1], 'failed' => "true" }, $gtn_parse_ansible_argv->[0], ); } my $super_login = $gtn_parse_ansible_argv->[1]->{'super_login'}; my $super_password = $gtn_parse_ansible_argv->[1]->{'super_password'}; my $cluster_login = $gtn_parse_ansible_argv->[1]->{'cluster_login'}; my $cluster_password= $gtn_parse_ansible_argv->[1]->{'cluster_password'}; my $replica_login = $gtn_parse_ansible_argv->[1]->{'replica_login'}; my $replica_password= $gtn_parse_ansible_argv->[1]->{'replica_password'}; if (not defined $super_login or $super_login =~ /^NOT_DEFINED$/){ $super_login = 'bx_super'; } if (not defined $cluster_login or $cluster_login =~ /^NOT_DEFINED$/){ $cluster_login = 'bx_clusteruser'; } if (not defined $replica_login or $replica_login =~ /^NOT_DEFINED$/){ $replica_login = 'bx_replica'; } if (not defined $super_password or $super_password =~ /^$/ or $super_password =~ /^NOT_DEFINED$/){ $super_password = generate_password(); } if (not defined $cluster_password or $cluster_password =~ /^$/ or $cluster_password =~ /^NOT_DEFINED$/){ $cluster_password = generate_password(); } if (not defined $replica_password or $replica_password =~ /^$/ or $replica_password =~ /^NOT_DEFINED$/){ $replica_password = generate_password(); } print_message( { super_login => $super_login, super_password => $super_password, cluster_login => $cluster_login, cluster_password => $cluster_password, replica_login => $replica_login, replica_password => $replica_password}, 0, ); # print json output for ansible # input: return_hash, exit_code sub print_message { my $rh = shift; my $c = shift; my $json = to_json( $rh, pretty => 1 ); print $json; exit $c; } sub generate_password { my $password = ''; my @chars = ("A".."Z", "a".."z", "1".."9"); $password .= $chars[rand @chars] for 1..15; return $password; } # parse opt file sub parse_ansible_argv { my $f = shift; my $r = { super_login => undef, super_password => undef, cluster_login => undef, cluster_password => undef, replica_login => undef, replica_password => undef, }; open ( my $fh, $f ) or return [ 1, "Cannot open options $f: $!" ]; while ( <$fh> ){ next if ( /^$/ ); if ( /\S+=\S+/ ){ my @matches = split(/\s+/, $_); foreach my $match (@matches){ #print $match,"\n"; my ($key,$val)=split('=',$match); $val =~ s/^['"]//; $val =~ s/['"]$//; if (grep /^$key$/, keys %$r){ #print "fill out $key\n"; $r->{$key} = $val; } } } } close $fh; return [ 0, $r ]; }