#!/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 $exportnum = $export->exportnum; my $file = "$spooldir/$machine.exportnum$exportnum.conf"; warn "exporting apache configuration for $machine to $file\n" if $opt{d}; open(HTTPD_CONF,">$file") or die "can't open $file: $!"; 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; my $template = $export->option('template'); my $cust_pkg = $svc_www->cust_svc->cust_pkg; if ( $cust_pkg->getfield('susp') or $cust_pkg->getfield('cancel') ) { $template = $export->option('template_inactive') || $export->option('template'); # Fall back to the regular template if template_inactive doesn't exist } 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"; }