commit - fc937c40bfe1e133f4cbe986ee5573b0625c9856
commit + 5413554083a9dca6bbfb3e043e73e6325c3d53f6
blob - b6ef931db04dd3f3d8b46f37afcd1280d6edaa1a
blob + af3e377b932594e963ec7aec92c47e3902eded4d
--- bin/configNow.pl
+++ bin/configNow.pl
use File::Basename;
use File::Path qw(make_path);
-my $shellname = shift || 'blacklock';
+my $account = shift || 'blacklock';
my @users = qw( izzyb nathan ashley );
my $domain = 'user.planetofnix.com';
my $custDomain = 'bnsnet.ca';
my %config=(
type=>'shell',
- shellname => $shellname,
+ account => $account,
users => \@users,
- gitAuthor => $shellname,
- gitEmail => $shellname . "@" . $domain,
+ gitAuthor => $account,
+ gitEmail => $account . "@" . $domain,
gitWorkDir => './configNow',
ipv4 => '38.87.162.191',
ipv6 => '2602:fccf:1:1191::',
domain => $domain,
custDomain => $custDomain,
+ StageDir => './stageNow',
+ DeployDir => './deployNow/',
+ Accounts => [ $account ], # List of accounts to deploy
+
);
+
my $shellConfig = new IRCNOW::ConfigNow( %config );
#use Data::Dumper;
#die Dumper($shellConfig->{lists});
print "\n" . $shellConfig->repo_log();
+
+if ($shellConfig->stage_ready()) { # Verify stage repo is ready
+ print "Deploying config Change.\n";
+ $shellConfig->stage_pull($account => '../configNow');
+ $shellConfig->stage_merge();
+ $shellConfig->stage_commit();
+ $shellConfig->deploy_system();
+}
+
+
+
# Get list of files changed in a diff
#$r->run(qw(git diff 0cd562e --name-only));
blob - 353311442c58b050666e1e4c40df60192da1100e
blob + 24bbf0e41fc3399031147fe4cc8181b054977ba4
--- lib/IRCNOW/ConfigNow/Module/AcmeClient.pm
+++ lib/IRCNOW/ConfigNow/Module/AcmeClient.pm
return $class->SUPER::new( vars => $options->{vars}, files=>{
acme_client => {
filename => "/etc/acme-config.conf",
- varlist => [qw(shellname domain)],
+ varlist => [qw(account domain)],
type => 'shell',
template => sub {
- my ($shellname, $domain) = @_;
+ my ($account, $domain) = @_;
return qq{
-domain $shellname.$domain {
- domain key "/etc/ssl/private/$shellname.$domain.key"
- domain full chain certificate "/etc/ssl/$shellname.$domain.fullchain.pem"
+domain $account.$domain {
+ domain key "/etc/ssl/private/$account.$domain.key"
+ domain full chain certificate "/etc/ssl/$account.$domain.fullchain.pem"
sign with letsencrypt
}
};
},
dns => {
filename => "/var/nsd/zones/master/$domain",
- varlist => [qw(shellname ipv4 ipv6)],
+ varlist => [qw(account ipv4 ipv6)],
type => 'shell',
template => qq{
%s 3600 IN A %s
blob - f70c6c921f3dfa9eb0326de299e1b0085ef0aff6
blob + 4e428428dd2fa0d2e4e857ea09bd91b6736d8fa3
--- lib/IRCNOW/ConfigNow/Module/Prosody.pm
+++ lib/IRCNOW/ConfigNow/Module/Prosody.pm
return $class->SUPER::new( vars => $options->{vars}, files=>{
prosody => {
filename => "/etc/prosody/prosody.cfg.lua",
- varlist => [qw{shellname domain}],
+ varlist => [qw{account domain}],
type => 'shell',
template => sub {
- my $shellname = shift;
+ my $account = shift;
my $domain = shift;
return qq{
-VirtualHost "$shellname.$domain"
+VirtualHost "$account.$domain"
ssl = {
- certificate = "/etc/prosody/certs/$shellname.$domain.fullchain.pem";
- key = "/etc/prosody/certs/$shellname.$domain.key";
+ certificate = "/etc/prosody/certs/$account.$domain.fullchain.pem";
+ key = "/etc/prosody/certs/$account.$domain.key";
}
};
},
},
dns => {
filename => "/var/nsd/zones/master/$domain",
- varlist => [qw(shellname shellname)],
+ varlist => [qw(account account)],
type => 'shell',
template => qq{
_xmpp-client._tcp.%s 3600 IN SRV 0 5 5222 xmpp
blob - ae759ba2a3e862a95f975afa61fea0a891b938c4
blob + 3a8909069d0fe11990c1ef90197af0158f634824
--- lib/IRCNOW/ConfigNow/Module/SmtpDove.pm
+++ lib/IRCNOW/ConfigNow/Module/SmtpDove.pm
return $class->SUPER::new( vars => $options->{vars}, files=>{
dns => {
filename => qq{/var/nsd/zones/master/$domain},
- varlist => ['shellname'],
+ varlist => ['account'],
type => 'shell',
template => sub {
- my $shellname = shift;
+ my $account = shift;
return qq{
-$shellname 3600 IN MX 10 mail
-imap.$shellname 3600 IN CNAME imap
-pop.$shellname 3600 IN CNAME pop
-pop3.$shellname 3600 IN CNAME pop3
-smtp.$shellname 3600 IN CNAME smtp
-mail.$shellname 3600 IN CNAME mail
+$account 3600 IN MX 10 mail
+imap.$account 3600 IN CNAME imap
+pop.$account 3600 IN CNAME pop
+pop3.$account 3600 IN CNAME pop3
+smtp.$account 3600 IN CNAME smtp
+mail.$account 3600 IN CNAME mail
};
},
},
mail_domains => {
filename => qq{/etc/mail/domains},
- varlist => [qw{shellname domain}],
+ varlist => [qw{account domain}],
type => 'shell',
template => qq{%s.%s\n},
},
mail_mailname => {
filename => qq{/etc/mail/mailname},
- varlist => [qw{shellname domain}],
+ varlist => [qw{account domain}],
type => 'shell',
template => qq{%s.%s\n},
},
mail_Virtual => {
filename => qq{/etc/mail/virtuals},
- varlist => [qw{username shellname domain}],
+ varlist => [qw{username account domain}],
type => 'shelluser',
template => qq{%s@%s.%s vmail\n},
},
mail_user => {
filename => qq{/etc/mail/users},
- varlist => [qw{username shellname domain username shellname domain}],
+ varlist => [qw{username account domain username account domain}],
type => 'shelluser',
template => qq{%s@%s.%s: %s@%s.%s\n},
},
mail_passwd => {
filename => qq{/etc/mail/passwd},
- varlist => [qw{username shellname domain password}],
+ varlist => [qw{username account domain password}],
type => 'shelluser',
template => qq{%s@%s.%s:%s::::::userdb_quota_rule=*:storage=1G\n},
},
blob - 7b0e6b8c69c6a167232339aa6f1569d7357224b8
blob + 2deb07066ae0be4666ae274b8a37d42ec46dad7b
--- lib/IRCNOW/ConfigNow.pm
+++ lib/IRCNOW/ConfigNow.pm
# Output for $type . "users" if we have a user list
if (exists $self->{vars}->{users}) {
for my $user (@{$self->{vars}->{users}}) {
- # set the username var to this user.
+ # set the username var to this user.
$self->{vars}->{username} = $user;
# generate output for $type . 'user'
my $out = $obj->output($filename,$type . "user");
}
$r = $self->repo_connect();
return 0 unless defined $r;
+ $self->{repo} = $r;
}
# Have a repo created make sure its clean
my @status = $r->run(qw(status -su));
sub repo_connect {
my $self = shift;
+ my $repo = shift || 'repo';
my $config=$self->{vars};
- return $self->{repo} if defined $self->{repo};
- $self->{repo} = Git::Repository->new(
- work_tree => $config->{gitWorkDir},
+ my $dir = shift || $config->{gitWorkDir};
+ return $self->{$repo} if defined $self->{$repo};
+ $self->{$repo} = Git::Repository->new(
+ work_tree => $dir,
{
env => {
GIT_COMMITTER_EMAIL => $config->{gitEmail},
},
);
# Ready for changes.
- return $self->{repo};
+ return $self->{$repo};
}
sub repo_commit {
}
}
+#################################### Staging Subs ####################################
+sub stage_ready {
+ my $self=shift;
+ my $r = $self->{stage_repo};
+ my $workDir=$self->{vars}->{StageDir};
+ if( not defined $r ) {
+ if (not -d $workDir or not -d "$workDir/.git") {
+ # Initialize the config repo if it hasn't been created yet.
+ make_path($workDir);
+ make_path("$workDir/Accounts");
+ make_path("$workDir/Stage");
+ Git::Repository->run(init => $workDir);
+ }
+ $r = $self->repo_connect('stage_repo', $workDir);
+ # Enable using file protocal for submodules
+ $r->run(qw{ config --global protocol.file.allow always });
+ return 0 unless defined $r;
+ $self->{stage_repo} = $r;
+ }
+ # Have a repo created make sure its clean
+ my @status = $r->run(qw(status -su));
+ # Not ready if uncommited changes
+ return 0 if (scalar @status >0);
+ # Repo ready
+ return 1;
+}
+
+
+sub stage_pull {
+ my $self=shift;
+ my ($account, $upstream) = @_;
+ my $r = $self->{stage_repo};
+ my $account_repo="Accounts/$account";
+ if (not -d $account_repo) {
+ # Don't have this account so clone it
+ my @status = $r->run("submodule","add", $upstream,$account_repo);
+ use Data::Dumper;
+ print Dumper(@status);
+ return 1;
+ }
+}
+
+
+sub stage_merge {
+}
+sub stage_commit {
+}
+sub deploy_system {
+}
+
1;