-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Script to install and configure radosgw.
Signed-off-by: tamil <[email protected]>
- Loading branch information
tamil
committed
Nov 29, 2012
1 parent
4c3d5dc
commit 0b55fbd
Showing
1 changed file
with
287 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
<VirtualHost *:80> | ||
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] | ||
<IfModule mod_fastcgi.c> | ||
<Directory /var/www> | ||
Options +ExecCGI | ||
AllowOverride All | ||
SetHandler fastcgi-script | ||
Order allow,deny | ||
Allow from all | ||
AuthBasicAuthoritative Off | ||
</Directory> | ||
</IfModule> | ||
AllowEncodedSlashes On | ||
ErrorLog /var/log/apache2/error.log | ||
CustomLog /var/log/apache2/access.log combined | ||
ServerSignature Off | ||
</VirtualHost>"; | ||
|
||
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); | ||
|
||
|
||
|
||
|
||
|