From 0b55fbdbea2b2209eea65b67adb00eea0f5cf620 Mon Sep 17 00:00:00 2001 From: tamil Date: Thu, 29 Nov 2012 13:46:43 -0800 Subject: [PATCH] Script to install and configure radosgw. Signed-off-by: tamil --- qa/qa_scripts/rgw_install_config.pl | 287 ++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100755 qa/qa_scripts/rgw_install_config.pl diff --git a/qa/qa_scripts/rgw_install_config.pl b/qa/qa_scripts/rgw_install_config.pl new file mode 100755 index 0000000000000..1a715b5af132b --- /dev/null +++ b/qa/qa_scripts/rgw_install_config.pl @@ -0,0 +1,287 @@ +#! /usr/bin/perl + +=head1 NAME + +rgw_install_config.pl - Script to install and configure the rados gateway on client machine. + +=head1 SYNOPSIS + +Use: + perl rgw_install_config.pl [--help] + +Examples: + perl rgw_install_config.pl + or + perl rgw_install_config.pl --help + +=head1 ARGUMENTS + +rgw_install_config.pl takes the following arguments: + --help + (optional) Displays the usage message. + +=cut + +use strict; +use warnings; +use Pod::Usage(); +use Getopt::Long(); + +my $help; + +Getopt::Long::GetOptions( + 'help' => \$help +); + +Pod::Usage::pod2usage( -verbose => 1 ) if ($help); + +# Function that enters the given msg to log.txt + +sub _write_log_entry { + my $logmsg = shift; + open(TC,'>>log.txt'); + print TC "[Log] $logmsg\n"; + close(TC); +} + +# Function to get the hostname +sub get_hostname +{ + my $cmd = "hostname"; + my $get_host = `$cmd`; + chomp($get_host); + return($get_host); +} + +# Function to execute the command and return the exit status +sub exec_cmd +{ + my $cmd = shift; + my $excmd = system($cmd); + if ( $excmd == 0 ) { + _write_log_entry("$cmd successful"); + return 0; + } else{ + _write_log_entry("$cmd NOT successful"); + return 1; + } +} + +# function to execute the command and return output +sub get_cmd_op +{ + my $cmd = shift; + my $excmd = `$cmd`; + _write_log_entry("$cmd \n $excmd"); + return $excmd; +} + +# Function to enable module for apache and fastcgi +sub enmod +{ + if (!system("sudo a2enmod rewrite")){ + if (!system("sudo a2enmod fastcgi")){ + _write_log_entry("a2enmod rewrite && a2enmod fastcgi successful"); + return 0; + } + write_log_entry("a2enmod fastcgi NOT successful"); + return 1; + } + write_log_entry("a2enmod rewrite NOT successful"); + return 1; +} + +# Function to create httpd.conf file +sub set_httpconf +{ + my $hostname = shift; + my $http_conf = "/etc/apache2/httpd.conf"; + my $file = "test_file"; + open (FH, ">$file"); + print FH "ServerName $hostname"; + close FH; + my $get_op = "sudo sh -c \"cat $file >> $http_conf\""; + my $exit_status = exec_cmd($get_op); + exec_cmd("rm -f $file"); + return $exit_status; +} + +# To append ceph.conf file with radosgw info +sub append_ceph_conf +{ + my $hostname = shift; + my $file = "/etc/ceph/ceph.conf"; + my $file1 = "test_file1"; + open (FH, ">$file1"); + print FH "[client.radosgw.gateway] + host = $hostname + keyring = /etc/ceph/keyring.radosgw.gateway + rgw socket path = /tmp/radosgw.sock + log file = /var/log/ceph/radosgw.log \n"; + close FH; + my $get_op = "sudo sh -c \"cat $file1 >> $file\""; + my $exit_status = exec_cmd($get_op); + exec_cmd("rm -f $file1"); + return $exit_status; +} + +# create s3gw.fcgi file and set execute permission for the file +sub create_fcgi +{ + my $file = "/var/www/s3gw.fcgi"; + my $chmod_file = "sudo chmod +x /var/www/s3gw.fcgi"; + my $exe_cmd = "exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway"; + my $file1 = "test_file3"; + open (FH, ">$file1"); + print FH "#!/bin/sh \n $exe_cmd \n"; + close FH; + my $get_op = "sudo sh -c \"cat $file1 >> $file\"" ; + my $exit_status = exec_cmd($get_op); + exec_cmd("rm -f $file1"); + my $exit_status1 = exec_cmd($chmod_file) if (!$exit_status); + return $exit_status1; +} + +# To create rgw.conf +sub create_rgw_conf { + my $content = "FastCgiExternalServer /var/www/s3gw.fcgi -socket /tmp/radosgw.sock + + ServerName rados.domain.com + ServerAdmin qa\@inktank.com + DocumentRoot /var/www + + RewriteEngine On + RewriteRule ^/([a-zA-Z0-9-_.]*)([/]?.*) /s3gw.fcgi?page=\$1¶ms=\$2&%{QUERY_STRING} [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] + + + + Options +ExecCGI + AllowOverride All + SetHandler fastcgi-script + Order allow,deny + Allow from all + AuthBasicAuthoritative Off + + + AllowEncodedSlashes On + ErrorLog /var/log/apache2/error.log + CustomLog /var/log/apache2/access.log combined + ServerSignature Off +"; + + my $file = "/etc/apache2/sites-available/rgw.conf"; + my $file1 = "test_file2"; + open (FH, ">$file1"); + print FH "$content"; + close FH; + my $get_op = "sudo sh -c \"cat $file1 >> $file\""; + my $exit_status = exec_cmd($get_op); + exec_cmd("rm -f $file1"); + return $exit_status; +} + +# To generate keyring for rados gateway and add it to ceph keyring with required access +sub generate_keyring_and_key +{ + my $cmd = "sudo ceph-authtool --create-keyring /etc/ceph/keyring.radosgw.gateway"; + my $chmod_cmd = "sudo chmod +r /etc/ceph/keyring.radosgw.gateway"; + my $cmd_key = "sudo ceph-authtool /etc/ceph/keyring.radosgw.gateway -n client.radosgw.gateway --gen-key"; + my $chmod_cmd_key = "sudo ceph-authtool -n client.radosgw.gateway --cap osd \'allow rwx\' --cap mon \'allow r\' /etc/ceph/keyring.radosgw.gateway"; + my $exit_status = exec_cmd($cmd); + my $exit_status1 = exec_cmd($chmod_cmd) if(!$exit_status); + my $exit_status2 = exec_cmd($cmd_key) if(!$exit_status1); + my $exit_status3 = exec_cmd($chmod_cmd_key) if(!$exit_status2); + return($exit_status3); +} + +# To create a rgw user +sub create_user +{ + my $usr = shift; + my $cmd = "sudo radosgw-admin user create --uid=$usr --display-name=$usr"; + my $status = exec_cmd($cmd); + return($status); +} + +#To start radosgw +sub start_rgw +{ + my $cmd = "sudo /etc/init.d/radosgw start"; + my $check_ps = "ps -ef | grep radosgw | grep -v grep"; + my $status = get_cmd_op($cmd); + if (!$status) { + my $ps = get_cmd_op($check_ps); + if ($ps =~ /radosgw/) { + return 0; + } + } + return 1; +} + +# To start the given service +sub start_service +{ + my $input = shift; + my $status = exec_cmd ("sudo service $input restart"); + if (!$status){ + my $output = get_cmd_op("sudo service $input status"); + if ($output =~ /running/ ){ + if($input eq "apache2" ) { + return 0; + }elsif($input eq "ceph"){ + my $count = get_cmd_op("sudo service ceph status | wc -l"); + if ($count == 8 ){ + return 0; + } + } + } + } + return 1; +} + +# To enable/disable site +sub ensite_dissite +{ + my $a2ensite = "sudo a2ensite rgw.conf"; + my $a2dissite = "sudo a2dissite default"; + my $check_en = get_cmd_op($a2ensite); + my $check_dis = get_cmd_op($a2dissite); + if (($check_en =~ /nabl/) && ($check_dis =~ /isabl/)){ + return 0; + } + return 1; +} + +#====Main starts here ====== + +my $domain = "front.sepia.ceph.com"; +my $host = get_hostname(); +my $hostname = "$host.$domain"; +my $run_update = "sudo apt-get update"; +my $install_radosgw = "sudo apt-get install radosgw"; +my $mkdir_rgw = "sudo mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.gateway"; +my $add_entry_ceph_keyring = "sudo ceph -k /etc/ceph/ceph.keyring auth add client.radosgw.gateway -i /etc/ceph/keyring.radosgw.gateway"; +my $start_rgw = "sudo /etc/init.d/radosgw start"; +my $user = "qa"; +my $install_ap_fcgi = "yes | sudo apt-get install apache2 libapache2-mod-fastcgi" if(!exec_cmd($run_update)); +my $check_en = enmod() if(!$install_ap_fcgi); +my $check_http = set_httpconf($hostname) if (!$check_en); +my $check_apache = start_service("apache2") if (!$check_http) ; +my $check_install = exec_cmd($install_radosgw) if(!$check_apache); +my $get_exit = append_ceph_conf($host) if(!$check_install); +my $get_exec = exec_cmd($mkdir_rgw) if(!$get_exit); +my $get_status = create_rgw_conf() if (!$get_exec); +my $get_enstatus = ensite_dissite() if (!$get_status); +my $get_status1 = create_fcgi() if(!$get_enstatus); +my $status = generate_keyring_and_key() if (!$get_status1); +my $status_add = exec_cmd($add_entry_ceph_keyring) if(!$status); +my $status_ceph = start_service("ceph") if (!$status_add); +my $status_apache = start_service("apache2") if (!$status_ceph); +my $status_rgw = start_rgw() if (!$status_apache); +my $status_user = create_user($user) if (!$status_rgw); +_write_log_entry("RGW installation and configuration successful!") if (!$status_user); + + + + + -- 2.39.5