Initial Commit
This commit is contained in:
96
setupAcademyInstancev2.pl
Executable file
96
setupAcademyInstancev2.pl
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/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;
|
||||
}
|
||||
Reference in New Issue
Block a user