]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Script to install and configure radosgw.
authortamil <tamil.muthamizhan@inktank.com>
Thu, 29 Nov 2012 21:46:43 +0000 (13:46 -0800)
committertamil <tamil.muthamizhan@inktank.com>
Thu, 29 Nov 2012 21:46:43 +0000 (13:46 -0800)
Signed-off-by: tamil <tamil.muthamizhan@inktank.com>
qa/qa_scripts/rgw_install_config.pl [new file with mode: 0755]

diff --git a/qa/qa_scripts/rgw_install_config.pl b/qa/qa_scripts/rgw_install_config.pl
new file mode 100755 (executable)
index 0000000..1a715b5
--- /dev/null
@@ -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&params=\$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); 
+
+
+
+
+