etc/travis/Configuration.py (68 lines of code) (raw):
import json
import os
import time
from azure.mgmt.resource.resources.v2017_05_10.models import DeploymentMode
class Configuration:
def __init__(self):
self.deployment_name = 'azuredeploy'
self.client_id = os.getenv('SPNAME')
self.secret = os.getenv('SPPASSWORD')
self.tenant_id = os.getenv('SPTENANT')
self.location = os.getenv('LOCATION', 'westus2')
self.source_branch = self.identify_source_branch()
self.fullci_branches = os.getenv('FULLCI_BRANCHES', 'master').split(':')
self.commit_message = os.getenv('TRAVIS_COMMIT_MESSAGE', None)
self.ssh_key = self.identify_ssh_key()
self.resource_group = self.identify_resource_group()
self.deployment_properties = self.generate_deployment_properties()
def identify_resource_group(self):
resource_group = os.getenv('RESOURCEGROUP')
if resource_group is None:
resource_group = 'azmdl-travis-' + os.getenv('TRAVIS_BUILD_NUMBER', 'manual-{}'.format(time.time()))
return resource_group
def identify_ssh_key(self):
ssh_key = os.getenv('SPSSHKEY')
if ssh_key is None:
with open('azure_moodle_id_rsa.pub', 'r') as sshkey_fd:
ssh_key = sshkey_fd.read()
return ssh_key
def generate_deployment_properties(self):
with open('azuredeploy.json', 'r') as template_fd:
template = json.load(template_fd)
with open('azuredeploy.parameters.json', 'r') as parameters_fd:
parameters = json.load(parameters_fd)
parameters = parameters['parameters']
parameters['sshPublicKey']['value'] = self.ssh_key
parameters['_artifactsLocation'] = {'value': self.identify_artifacts_location()}
return {
'mode': DeploymentMode.incremental,
'template': template,
'parameters': parameters,
}
def identify_artifacts_location(self):
slug = os.getenv('TRAVIS_PULL_REQUEST_SLUG')
if not slug:
slug = os.getenv('TRAVIS_REPO_SLUG')
return "https://raw.githubusercontent.com/{}/{}/".format(slug, self.source_branch)
def identify_source_branch(self):
branch = os.getenv('TRAVIS_PULL_REQUEST_BRANCH')
if not branch:
branch = os.getenv('TRAVIS_BRANCH')
return branch
def is_valid(self):
valid = True
for key, value in vars(self).items():
if value is None:
valid = False
print('(missing configuration for {})'.format(key))
if self.deployment_properties['parameters']['_artifactsLocation']['value'] is None:
valid = False
print('(could not identify _artifactsLocation)')
return valid
def should_run_full_ci(self):
if self.source_branch in self.fullci_branches:
return True
message = self.commit_message.upper()
if '[FULL CI]' in message or '[FULLCI]' in message:
return True
return False