Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions cloudlift/deployment/service_template_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from botocore.exceptions import ClientError
from cloudlift.exceptions import UnrecoverableException
from cloudlift.config import get_client_for

from cloudlift.config import get_resource_for
from awacs.aws import PolicyDocument, Statement, Allow, Principal
from awacs.sts import AssumeRole
from awacs.firehose import PutRecordBatch
Expand Down Expand Up @@ -69,6 +69,7 @@ def __init__(self, service_configuration, environment_stack):
self.bucket_name = 'cloudlift-service-template'
self.environment = service_configuration.environment
self.client = get_client_for('s3', self.environment)
self.iamresource = get_resource_for('iam', self.environment)
self.team_name = (self.notifications_arn.split(':')[-1])
self.environment_configuration = EnvironmentConfiguration(self.environment).get_config().get(self.environment, {})
def _derive_configuration(self, service_configuration):
Expand Down Expand Up @@ -343,7 +344,7 @@ def _add_service(self, service_name, config):
service_name + "TaskDefinition",
Family=service_name + "Family",
ContainerDefinitions=[cd] + sidecar_container_defs,
ExecutionRoleArn=boto3.resource('iam').Role('ecsTaskExecutionRole').arn,
ExecutionRoleArn=self.iamresource.Role('ecsTaskExecutionRole').arn,
TaskRoleArn=Ref(task_role),
Tags=Tags(Team=self.team_name, environment=self.env),
**launch_type_td
Expand Down
30 changes: 20 additions & 10 deletions cloudlift/deployment/service_updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@


class ServiceUpdater(object):
def __init__(self, name, environment, env_sample_file, version=None,
def __init__(self, name, environment, env_sample_file, version=None, image_uri=None,
build_args=None, working_dir='.'):
self.name = name
self.environment = environment
Expand All @@ -32,37 +32,47 @@ def __init__(self, name, environment, env_sample_file, version=None,
else:
self.env_sample_file = './env.sample'
self.version = version
self.image_uri = image_uri
self.ecr_client = boto3.session.Session(region_name=self.region).client('ecr')
self.cluster_name = get_cluster_name(environment)
self.working_dir = working_dir
self.build_args = build_args

def _get_image(self):
if self.image_uri:
version = None
return version, self.image_uri

def run(self):
log_warning("Deploying to {self.region}".format(**locals()))
self.init_stack_info()
if not os.path.exists(self.env_sample_file):
raise UnrecoverableException('env.sample not found. Exiting.')
ecr_client = EcrClient(self.name, self.region, self.build_args)
ecr_client.set_version(self.version)
log_intent("name: " + self.name + " | environment: " +
self.environment + " | version: " + str(ecr_client.version))
log_bold("Checking image in ECR")
ecr_client.build_and_upload_image()
log_bold("Initiating deployment\n")
image_url = ecr_client.ecr_image_uri
image_url += (':' + ecr_client.version)
return ecr_client.version, image_url

def run(self):
log_warning("Deploying to {self.region}".format(**locals()))
self.init_stack_info()
if not os.path.exists(self.env_sample_file):
raise UnrecoverableException('env.sample not found. Exiting.')

image_version, image_url = self._get_image()

log_bold("Initiating deployment\n")
jobs = []
for index, service_name in enumerate(self.ecs_service_names):
log_bold("Starting to deploy " + service_name)
color = DEPLOYMENT_COLORS[index % 3]
image_url = ecr_client.ecr_image_uri
image_url += (':' + ecr_client.version)
process = multiprocessing.Process(
target=deployer.deploy_new_version,
args=(
self.region,
self.cluster_name,
service_name,
ecr_client.version,
image_version,
self.name,
self.env_sample_file,
self.environment,
Expand Down