diff options
Diffstat (limited to 'bin/apache.export')
| -rwxr-xr-x | bin/apache.export | 93 | 
1 files changed, 93 insertions, 0 deletions
| diff --git a/bin/apache.export b/bin/apache.export new file mode 100755 index 000000000..da2d73c1c --- /dev/null +++ b/bin/apache.export @@ -0,0 +1,93 @@ +#!/usr/bin/perl -w + +use strict; +use Getopt::Std; +#use File::Path; +use File::Rsync; +use Net::SSH qw(ssh); +use FS::UID qw(adminsuidsetup datasrc); +use FS::Record qw(qsearch qsearchs); +use FS::part_export; +use FS::cust_svc; +use FS::svc_www; + +use vars qw(%opt); +getopts("d", \%opt); + +my $user = shift or die &usage; +adminsuidsetup $user; + +#needs the export number in there somewhere too...? +my $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/apache"; +mkdir $spooldir, 0700 unless -d $spooldir; + +my @exports = qsearch('part_export', { 'exporttype' => 'apache' } ); + +my $rsync = File::Rsync->new({ +  rsh     => 'ssh', +#  dry_run => 1, +}); + +foreach my $export ( @exports ) { + +  my $machine = $export->machine; +  my $file = "$spooldir/$machine.conf"; + +  warn "exporting apache configuration for $machine to $file\n" +    if $opt{d}; + +  open(HTTPD_CONF,">$file") or die "can't open $file: $!"; + +  my $template = $export->option('template'); + +  my @svc_www = $export->svc_x; + +  foreach my $svc_www ( @svc_www ) { +    use vars qw($zone $username $dir $email $config); +    $zone = $svc_www->domain_record->zone; +    $config = $svc_www->config; +    if ( $svc_www->svc_acct ) { +      $username = $svc_www->svc_acct->username; +      $dir = $svc_www->svc_acct->dir; +      $email = $svc_www->svc_acct->email; +    } else { +      $username = ''; +      $dir      = ''; +      $email    = ''; +    } + +    warn "  adding configuration section for $zone\n" +      if $opt{d}; + +    print HTTPD_CONF eval(qq("$template")). "\n\n"; +  } + +  my $user = $export->option('user'); +  my $httpd_conf = $export->option('httpd_conf'); + +  warn "syncing $file to $httpd_conf on $machine\n" +    if $opt{d}; + +  $rsync->exec( { +    src       => $file, +    dest      => "$user\@$machine:$httpd_conf", +  } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); + # warn $rsync->out; + +  my $restart = $export->option('restart') || 'apachectl graceful'; + +  warn "running restart command $restart on $machine\n" +    if $opt{d}; + +  ssh("root\@$machine", $restart); + +} + +close HTTPD_CONF; + +# ----- + +sub usage { +  die "Usage:\n  apache.export [ -d ] user\n";  +} + | 
