← Back to team overview

mvhub-dev team mailing list archive

[Branch ~mvhub-dev/mvhub/trunk] Rev 352: merged create_config_in_mv_setup

 

Merge authors:
  Lee Goodrich (leegoodrich)
Related merge proposals:
  https://code.launchpad.net/~leegoodrich/mvhub/create_config_in_mv_setup/+merge/22003
  proposed by: Dan MacNeil (omacneil)
  review: Resubmit - Dan MacNeil (omacneil)
------------------------------------------------------------
revno: 352 [merge]
committer: Lee Goodrich <lgoodrich@xxxxxxxxxx>
branch nick: trunk
timestamp: Thu 2010-03-25 15:03:21 -0400
message:
  merged create_config_in_mv_setup
modified:
  app-mvhub/project-tools/bin/mv_setup
  app-mvhub/project-tools/templates/template.conf
  lib-mvhub/t/conf/all.conf


--
lp:mvhub
https://code.launchpad.net/~mvhub-dev/mvhub/trunk

Your team mvhub-dev is subscribed to branch lp:mvhub.
To unsubscribe from this branch go to https://code.launchpad.net/~mvhub-dev/mvhub/trunk/+edit-subscription.
=== modified file 'app-mvhub/project-tools/bin/mv_setup'
--- app-mvhub/project-tools/bin/mv_setup	2010-03-10 19:51:30 +0000
+++ app-mvhub/project-tools/bin/mv_setup	2010-03-25 18:51:21 +0000
@@ -7,22 +7,28 @@
 use Carp;
 use DBI;
 use IO::Prompt;
+use Config::Simple;
+use MVHub::Utils::ConfigSimple;
 
 use English '-no_match_vars';
 
 {    # main
  local $OUTPUT_AUTOFLUSH=1;
-
+	    
     my $USERNAME = get_username_or_die();
-
+	my $cfg = MVHub::Utils::ConfigSimple::create_config_from($ENV{MV_CONFIG_FILE});
+	my @WEBSITE_CODES = qw/ mvh nsp /;
+	
+	my $base_dir = $cfg->param('BASE.dir');
+    
     # should have nothing left on command line
     # at this point
     die usage() if scalar @ARGV;
 
     system('clear');
-
-    print "(re)making dirs in /var/www/mvhub/$USERNAME...";
-    my @dirs = get_dirs_with( '/var/www/mvhub/', $USERNAME );
+    
+    print "(re)making dirs in $base_dir$USERNAME...";
+    my @dirs = get_dirs_with( "$base_dir", $USERNAME );
     make_dirs_from( $USERNAME, \@dirs );
     print "..done\n";
 
@@ -36,39 +42,172 @@
         my $DBH = get_dbh();
 
         print "...done\n" 
-        	if make_dbs_for( $DBH, $USERNAME );;
-    }
-}
-
-sub get_username_or_die {
-    my $username =
-         shift @ARGV
-      || $ENV{NEW_DEV_USER}
-      || ( defined $ENV{MV_CONFIG_FILE} ? $ENV{USER} : undef );
-
-    if ( !$username ) {
-        die "No username defined" . usage();
-    }
-    my @ignore = getpwnam($username);
-
-    if ( !scalar @ignore ) {
-        die "'$username' is not a valid username" . usage();
-    }
-
-    return $username;
-}
-
-sub usage {
-    return << "USAGE";
-
-Usage: 
- mv_setup <username>
-or:
- export NEW_DEV_USER=<username> && mv_setup
-or:
- cdw && mv_setup
-USAGE
-
+        	if make_dbs_for( $DBH, $USERNAME, @WEBSITE_CODES );;
+    }
+    create_config_files_for($USERNAME, $cfg, @WEBSITE_CODES);
+}
+
+sub add_calculable_values{
+	my $template_cfg = shift or croak 'missing param: $template_cfg';
+	my $username = shift or croak 'missing param: $username';
+	my $site_code = shift or croak 'missing param: $site_code';
+	
+	$template_cfg->param('DATABASE.database_name',"$username.$site_code");
+	$template_cfg->param('DATABASE.database_user',"$username");
+	$template_cfg->param('NOTIFICATION.admin_email', "$username\@thecsl.org");
+	$template_cfg->param('NOTIFICATION.dev_email', "$username\@thecsl.org");
+	$template_cfg->param('SITE.website_name',"$site_code.$username.testing123.net");
+	
+	return $template_cfg;
+}
+
+sub add_site_specific_values{
+	my $template_cfg = shift or croak 'missing param: $template_cfg';
+	my $username = shift or croak 'missing param: $username';
+	my %site_specific_values = %_;
+	
+	foreach my $key (keys %site_specific_values){
+		$template_cfg->param($key, $site_specific_values{$key});
+	}
+	return $template_cfg;
+}
+ 
+sub add_user_generated_values{
+	my $template_cfg = shift or croak 'missing param: $template_cfg';
+	my $user_cfg = shift or croak 'missing param: $user_cfg';
+	my @keys = @_;
+
+	foreach my $key (@keys){
+		if (!($user_cfg->param($key))){
+			prompt("Please enter a value for $key: ");
+			$template_cfg->param($key,$_);
+		}
+	}
+	return $template_cfg;
+}
+
+sub create_config_files_for{
+	my $username = shift;
+	my $cfg = shift;
+	my @website_codes = @_;
+	my @keys_for_user_generated_values = qw/ DATABASE.database_magic_word /;
+	
+	my $base_dir = $cfg->param('BASE.dir');	
+	my $template_cfg = new Config::Simple($cfg->param('ABSOLUTE_PATH.template_conf_dir') . "/template.conf");	
+	
+	foreach my $site_code (@website_codes){
+		my $user_cfg = new Config::Simple(syntax=>'ini');
+		if (-e "$base_dir/$username/conf/$site_code.conf") {
+			$user_cfg-> read("$base_dir/$username/conf/$site_code.conf");	
+		}
+		
+		print "Editing Config: $base_dir/$username/conf/$site_code.conf\n";
+		my %site_specific_values = get_site_specific_values($site_code);
+		
+		$template_cfg = add_site_specific_values($template_cfg, $username, %site_specific_values);
+		$template_cfg = add_calculable_values($template_cfg, $username, $site_code);
+		$template_cfg = add_user_generated_values($template_cfg, $user_cfg, @keys_for_user_generated_values);
+		
+		merge_conf_objects($template_cfg, $user_cfg);
+		
+		$user_cfg->write("$base_dir/$username/conf/$site_code.conf");
+	}
+}
+
+sub db_exists {
+    my $dbh     = shift or croak 'missing param: $dbh';
+    my $db_name = shift or croak 'missing param: $db_name';
+
+    my $sql = <<"SQL";
+SELECT 
+     datname 
+FROM 
+     pg_database
+WHERE 
+     datname = ?
+SQL
+
+    my $matching_dbs_aref = $dbh->selectall_arrayref( $sql, {}, ($db_name) );
+    return scalar @$matching_dbs_aref;
+
+}
+
+sub db_user_found {
+    my $dbh      = shift or croak 'missing param: $dbh';
+    my $username = shift or croak 'missing param: $username';
+
+    my $sql = <<"SQL";
+SELECT 
+     usename 
+FROM 
+     pg_user
+WHERE 
+     usename = ?
+SQL
+
+    my $matching_db_users_aref =
+      $dbh->selectall_arrayref( $sql, {}, ($username) );
+    return scalar @$matching_db_users_aref;
+}
+
+sub db_user_has_needed_roles {
+    my $dbh      = shift or croak 'missing param: $dbh';
+    my $username = shift or croak 'missing param: $username';
+
+    my $sql = <<"SQL";
+SELECT 
+     rolname,rolcreaterole,rolcreatedb 
+FROM 
+     pg_roles
+WHERE 
+     rolname = ?
+SQL
+
+    my $role_rows_aref = $dbh->selectall_arrayref( $sql, {Slice =>{} }, ($username) );
+    my $result = $$role_rows_aref[0]{rolcreaterole}
+      && $$role_rows_aref[0]{rolcreatedb};
+
+    return $result ? 1 :0;
+}
+
+sub db_user_has_superuser_role {
+    my $dbh      = shift or croak 'missing param: $dbh';
+    my $username = shift or croak 'missing param: $username';
+
+    my $sql = <<"SQL";
+SELECT 
+     rolname,rolsuper 
+FROM 
+     pg_roles
+WHERE 
+     rolname = ?
+SQL
+
+    my $role_rows_aref = $dbh->selectall_arrayref( $sql, {Slice=>{}}, ($username) );
+    return $$role_rows_aref[0]{rolsuper} ? 1:0;
+}
+
+sub do_or_die {
+    my $cmd = shift or croak 'missing param: $cmd';
+    $cmd =~ s/^\s+//;
+    my @cmd = split /\s+/, $cmd;
+    ( system(@cmd) == 0 )
+      or die "$cmd failed ABORTING\n";
+}
+
+# depends a lot on brave.thecsl.org enviroment
+sub get_dbh {
+
+    my %attr = (
+        'PrintError'         => 0,
+        'RaiseError'         => 1,
+        'AutoCommit'         => 1,
+        'ShowErrorStatement' => 1,
+    );
+    my $dbh = DBI->connect( 'dbi:Pg:dbname=template1', '', '', \%attr )
+      or die "couldn't connect to database";
+
+    return $dbh;
 }
 
 sub get_dirs_with {
@@ -135,9 +274,106 @@
     return @dirs;
 }
 
+sub get_site_specific_values{
+	my $site_code = shift or croak 'missing param: $site_code';
+
+	my %hash_of_site_specific_values = (
+	'mvh' => { 
+		'SITE.location' => '"Massachusetts Merrimack Valley"', 
+		'SITE.website_description' => 'Merrimack Valley Hub',
+		'NOTIFICATION.team_name' => 'Merrimack Valley Hub Team'},
+	'nsp' => {
+		'SITE.location' => '"Massachusetts North Shore"', 
+		'SITE.website_description' => 'North Shore Portal',
+		'NOTIFICATION.team_name' => 'North Shore Portal Team'});
+	return %{$hash_of_site_specific_values{$site_code}};
+}
+
+sub get_username_or_die {
+    my $username =
+         shift @ARGV
+      || $ENV{NEW_DEV_USER}
+      || ( defined $ENV{MV_CONFIG_FILE} ? $ENV{USER} : undef );
+
+    if ( !$username ) {
+        die "No username defined" . usage();
+    }
+    my @ignore = getpwnam($username);
+
+    if ( !scalar @ignore ) {
+        die "'$username' is not a valid username" . usage();
+    }
+
+    return $username;
+}
+
+sub load_test_data_for {
+    my $dbh      = shift or croak 'missing param: $dbh';
+    my $username = shift or croak 'missing param: $username';
+    my $suffix   = shift or croak 'missing param:   $db_name';
+	
+	my $cfg = 
+	  MVHub::Utils::ConfigSimple::create_config_from($ENV{MV_CONFIG_FILE});
+
+	my $path_to_project_tools = $cfg->param('ABSOLUTE_PATH.project_tools_dir');
+	my $db_password = $cfg->param('DATABASE.database_magic_word');
+	
+
+    my $cmd = "export PGPASSWORD=$db_password ";
+    $cmd .= "&& psql -h localhost -U $username -d  $username.$suffix ";
+    $cmd .= "-f ${path_to_project_tools}/test_${suffix}_db.sql >/dev/null 2>/dev/null";
+
+    ( system($cmd) == 0 )
+      or warn "failed to load data for $username.$suffix";
+
+}
+
+sub make_dbs_for {
+    my $dbh      = shift or croak 'missing param: $dbh';
+    my $username = shift or croak 'missing param: $username';
+	my @website_codes = @_;
+	
+    my $sql;
+
+    if ( !db_user_has_needed_roles( $dbh, $ENV{USER} ) ) {
+        warn "\nSkipping db stuff $ENV{USER} lacks CREATEDB or CREATEROLE\n";
+        return;
+    }
+
+    if ( ( $ENV{USER} ne $username )
+        && !db_user_has_superuser_role($dbh,$ENV{USER}) ){
+        my $msg = qq/
+        skipping db stuff $ENV{USER} can't drop table owned by $username 
+        without role SUPERUSER
+        /;
+        warn $msg;
+        return;
+    }
+
+    if ( !db_user_found( $dbh, $username ) ) {
+        $sql = "CREATE USER $username WITH PASSWORD 'test' CREATEDB CREATEROLE";
+        $dbh->do($sql);
+    }
+
+    foreach my $suffix ( @website_codes ) {
+        if ( db_exists( $dbh, "$username.$suffix" ) ) {
+            $sql = qq{DROP DATABASE "$username.${suffix}"};
+            $dbh->do($sql);
+        }
+        # kludge to avoid 'db being currently being accessed' errs
+        sleep 1; 
+
+        $sql = qq{CREATE DATABASE "$username.${suffix}" OWNER $username};
+        $dbh->do($sql);
+
+        load_test_data_for( $dbh, $username, $suffix );
+    }
+return 1;
+}
+
 sub make_dirs_from {
     my $username       = shift or croak 'missing param: $username';
-    my $dir_hrefs_href = shift or croak 'missing param:dir_hrefs_href';
+    my $dir_hrefs_href = shift or croak 'missing param: $dir_hrefs_href';
     my @dir_hrefs = @$dir_hrefs_href;
 
     my $sudo_cmd;
@@ -171,159 +407,29 @@
     }
 }
 
-sub do_or_die {
-    my $cmd = shift or croak 'missing param: $cmd';
-    $cmd =~ s/^\s+//;
-    my @cmd = split /\s+/, $cmd;
-    ( system(@cmd) == 0 )
-      or die "$cmd failed ABORTING\n";
-}
-
-# depends a lot on brave.thecsl.org enviroment
-sub get_dbh {
-
-    my %attr = (
-        'PrintError'         => 0,
-        'RaiseError'         => 1,
-        'AutoCommit'         => 1,
-        'ShowErrorStatement' => 1,
-    );
-    my $dbh = DBI->connect( 'dbi:Pg:dbname=template1', '', '', \%attr )
-      or die "couldn't connect to database";
-
-    return $dbh;
-}
-
-sub make_dbs_for {
-    my $dbh      = shift or croak 'missing param: $dbh';
-    my $username = shift or croak 'missing param: $username';
-
-    my $sql;
-
-    if ( !db_user_has_needed_roles( $dbh, $ENV{USER} ) ) {
-        warn "\nSkipping db stuff $ENV{USER} lacks CREATEDB or CREATEROLE\n";
-        return;
-    }
-
-    if ( ( $ENV{USER} ne $username )
-        && !db_user_has_superuser_role($dbh,$ENV{USER}) ){
-        my $msg = qq/
-        skipping db stuff $ENV{USER} can't drop table owned by $username 
-        without role SUPERUSER
-        /;
-        warn $msg;
-        return;
-    }
-
-    if ( !db_user_found( $dbh, $username ) ) {
-        $sql = "CREATE USER $username WITH PASSWORD 'test' CREATEDB CREATEROLE";
-        $dbh->do($sql);
-    }
-
-    foreach my $suffix qw/nsp mvh/ {
-        if ( db_exists( $dbh, "$username.$suffix" ) ) {
-            $sql = qq{DROP DATABASE "$username.${suffix}"};
-            $dbh->do($sql);
-        }
-        # kludge to avoid 'db being currently being accessed' errs
-        sleep 1; 
-
-        $sql = qq{CREATE DATABASE "$username.${suffix}" OWNER $username};
-        $dbh->do($sql);
-
-        load_test_data_for( $dbh, $username, $suffix );
-    }
-return 1;
-}
-
-sub db_user_found {
-    my $dbh      = shift or croak 'missing param: $dbh';
-    my $username = shift or croak 'missing param: $username';
-
-    my $sql = <<"SQL";
-SELECT 
-     usename 
-FROM 
-     pg_user
-WHERE 
-     usename = ?
-SQL
-
-    my $matching_db_users_aref =
-      $dbh->selectall_arrayref( $sql, {}, ($username) );
-    return scalar @$matching_db_users_aref;
-}
-
-sub db_user_has_needed_roles {
-    my $dbh      = shift or croak 'missing param: $dbh';
-    my $username = shift or croak 'missing param: $username';
-
-    my $sql = <<"SQL";
-SELECT 
-     rolname,rolcreaterole,rolcreatedb 
-FROM 
-     pg_roles
-WHERE 
-     rolname = ?
-SQL
-
-    my $role_rows_aref = $dbh->selectall_arrayref( $sql, {Slice =>{} }, ($username) );
-    my $result = $$role_rows_aref[0]{rolcreaterole}
-      && $$role_rows_aref[0]{rolcreatedb};
-
-    return $result ? 1 :0;
-}
-
-sub db_user_has_superuser_role {
-    my $dbh      = shift or croak 'missing param: $dbh';
-    my $username = shift or croak 'missing param: $username';
-
-    my $sql = <<"SQL";
-SELECT 
-     rolname,rolsuper 
-FROM 
-     pg_roles
-WHERE 
-     rolname = ?
-SQL
-
-    my $role_rows_aref = $dbh->selectall_arrayref( $sql, {Slice=>{}}, ($username) );
-    return $$role_rows_aref[0]{rolsuper} ? 1:0;
-}
-
-sub db_exists {
-    my $dbh     = shift or croak 'missing param: $dbh';
-    my $db_name = shift or croak 'missing param: $db_name';
-
-    my $sql = <<"SQL";
-SELECT 
-     datname 
-FROM 
-     pg_database
-WHERE 
-     datname = ?
-SQL
-
-    my $matching_dbs_aref = $dbh->selectall_arrayref( $sql, {}, ($db_name) );
-    return scalar @$matching_dbs_aref;
-
-}
-
-sub load_test_data_for {
-    my $dbh      = shift or croak 'missing param: $dbh';
-    my $username = shift or croak 'missing param: $username';
-    my $suffix   = shift or croak 'missing param:   $db_name';
-
-    # KLUDGE PATH
-    my $dir =
-      "/var/www/mvhub/$ENV{USER}/link-to-live-code/app-mvhub/project-tools/";
-
-    # KLUDGE HARD-CODED password
-    my $cmd = "export PGPASSWORD='test' ";
-    $cmd .= "&& psql -h localhost -U $username -d  $username.$suffix ";
-    $cmd .= "-f ${dir}/test_${suffix}_db.sql >/dev/null 2>/dev/null";
-
-    ( system($cmd) == 0 )
-      or warn "failed to load data for $username.$suffix";
-
-}
+sub merge_conf_objects{
+	my $template_cfg = shift or croak 'missing param: $template_cfg';
+	my $user_cfg = shift or croak 'missing param: $user_cfg';
+	
+	foreach my $key ($template_cfg->param()){
+
+		if (! ($user_cfg->param($key))){
+			$user_cfg->param($key, $template_cfg->param($key));
+		}
+	}	
+	return $user_cfg;
+}
+
+sub usage {
+    return << "USAGE";
+
+Usage: 
+ mv_setup <username>
+or:
+ export NEW_DEV_USER=<username> && mv_setup
+or:
+ cdw && mv_setup
+USAGE
+
+}
+

=== modified file 'app-mvhub/project-tools/templates/template.conf'
--- app-mvhub/project-tools/templates/template.conf	2010-03-08 08:04:23 +0000
+++ app-mvhub/project-tools/templates/template.conf	2010-03-23 17:11:37 +0000
@@ -99,9 +99,11 @@
 
 [RELATIVE_PATH]
 conf_dir=link-to-live-code/app-mvhub/conf/
+template_conf_dir=link-to-live-code/app-mvhub/project-tools/templates/
 template_html_dir=link-to-live-code/app-mvhub/conf/templates/html/
 template_text_dir=link-to-live-code/app-mvhub/conf/templates/text/
 reports_dir=reports/
+project_tools_dir=link-to-live-code/app-mvhub/project-tools/
 tmp_dir=tmp/
 
 [COOKIES]

=== modified file 'lib-mvhub/t/conf/all.conf'
--- lib-mvhub/t/conf/all.conf	2010-02-01 01:50:40 +0000
+++ lib-mvhub/t/conf/all.conf	2010-03-23 17:14:10 +0000
@@ -86,9 +86,11 @@
 
 [RELATIVE_PATH]
 conf_dir=link-to-live-code/app-mvhub/conf/
+template_conf_dir=link-to-live-code/app-mvhub/project-tools/templates/
 template_html_dir=link-to-live-code/app-mvhub/conf/templates/html/
 template_text_dir=link-to-live-code/app-mvhub/conf/templates/text/
 reports_dir=reports/
+project_tools_dir=link-to-live-code/app-mvhub/project-tools/
 tmp_dir=tmp/
 
 [COOKIES]