Files
academy-scripts/setupAcademyInstancev2.pl
2024-02-13 17:03:06 +00:00

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;
}