diff --git a/cloudlift/deployment/service_template_generator.py b/cloudlift/deployment/service_template_generator.py index 474accfd..dc9c0439 100644 --- a/cloudlift/deployment/service_template_generator.py +++ b/cloudlift/deployment/service_template_generator.py @@ -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 @@ -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): @@ -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 diff --git a/cloudlift/deployment/service_updater.py b/cloudlift/deployment/service_updater.py index c8e626d0..46de93fd 100644 --- a/cloudlift/deployment/service_updater.py +++ b/cloudlift/deployment/service_updater.py @@ -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 @@ -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,