96 lines
2.7 KiB
Perl
Executable File
96 lines
2.7 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
use strict;
|
|
use warnings;
|
|
use 5.010;
|
|
use Getopt::Long qw(GetOptions);
|
|
use FileHandle;
|
|
|
|
my $instance;
|
|
my $destroy = '';
|
|
my $brokenAppLink = '';
|
|
my $brokenBaseURL = '';
|
|
|
|
GetOptions('instance=s' => \$instance,
|
|
'destroy' => \$destroy,
|
|
'brokenAppLink' => \$brokenAppLink,
|
|
'brokenBaseURL' => \$brokenBaseURL) or usage();
|
|
|
|
# check parameters
|
|
if (!(defined $instance && $instance >= 0)) { usage(); }
|
|
|
|
# set some defaults
|
|
my $maxWait = 600; # seconds to wait for instance to come up
|
|
my $waitCycle = 10;
|
|
my $URLStem = "http://academy.scandio.net";
|
|
my $ComposeFolder = "instance$instance";
|
|
# Port stem for instance e.g. 8000
|
|
# 8080 -> Jira
|
|
# 8090 -> Confluence
|
|
my $PortStem = 8000+($instance*100);
|
|
my $JiraPort = $PortStem+80;
|
|
my $ConfluencePort = $PortStem+90;
|
|
my $ConfluenceSynchronyPort = $PortStem+91;
|
|
|
|
if ($destroy) {
|
|
print "Destroying Instance $instance\n";
|
|
system("cd $ComposeFolder && docker-compose down");
|
|
system("rm -rf $ComposeFolder");
|
|
exit(0);
|
|
}
|
|
# Copy Template folder to $ComposeFolder
|
|
`rsync -a compose/ $ComposeFolder`;
|
|
|
|
|
|
# Write new .env file with new ports
|
|
my $FHenv = new FileHandle("${ComposeFolder}/.env", "w");
|
|
unless ($FHenv) { die( "cannot create file ${ComposeFolder}/.env" );}
|
|
$FHenv->print("JIRA_PORT=$JiraPort\n");
|
|
$FHenv->print("CONFLUENCE_PORT=$ConfluencePort\n");
|
|
$FHenv->print("CONFLUENCE_SYNCHRONY_PORT=$ConfluenceSynchronyPort\n");
|
|
$FHenv->close;
|
|
|
|
# Start the Compose Stack
|
|
print "Starting instance $instance...\n";
|
|
system("cd $ComposeFolder && docker-compose up -d");
|
|
|
|
|
|
# wait for instance to come up, set new BaseURL
|
|
my $result;
|
|
my $resultConfluence;
|
|
my $resultJira;
|
|
my $waited = 0;
|
|
if (!$brokenAppLink) {
|
|
do {
|
|
print " waiting for instance to become available (" . $waited . "s)...\n";
|
|
$waited += $waitCycle;
|
|
sleep $waitCycle;
|
|
$resultJira = system("./updateJiraBaseURL --baseurl=${URLStem}:${JiraPort} -u=admin -p=admin");
|
|
$resultConfluence = system("./updateConfluenceBaseURL --baseurl=${URLStem}:${ConfluencePort} -u=admin -p=admin > /dev/null 2>&1");
|
|
} while (($resultJira ne "0" || $resultConfluence ne "0") && $waited < $maxWait);
|
|
}
|
|
|
|
if (!$brokenBaseURL) {
|
|
system ("./createJCAppLink -j=${URLStem}:${JiraPort} -c=${URLStem}:${ConfluencePort} -u=admin -p=admin");
|
|
}
|
|
|
|
# check if update was successful
|
|
if ($waited >= $maxWait)
|
|
{
|
|
print "Instance not available after $waited seconds";
|
|
print "baseURL not updated - aborting\n";
|
|
exit 0;
|
|
}
|
|
|
|
# restart container to activate context changes
|
|
print " restarting container to activate new configuration\n";
|
|
system("cd $ComposeFolder && docker-compose up --force-recreate -d");
|
|
|
|
exit 0;
|
|
|
|
|
|
|
|
sub usage
|
|
{
|
|
print "Usage: $0 --instance INSTANCENO [--destroy] [--brokenAppLink] [--brokenBaseURL\n";
|
|
exit 1;
|
|
} |