Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
6 changes: 4 additions & 2 deletions cloudlift/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,13 @@ def edit_config(name, environment):
@_require_name
@click.option('--version', default=None,
help='local image version tag')
@click.option('--image_uri', default=None,
help='image uri')
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jagriti-simpl Add a descriptive help message

@click.option("--build-arg", type=(str, str), multiple=True, help="These args are passed to docker build command "
"as --build-args. Supports multiple.\
Please leave space between name and value" )
def deploy_service(name, environment, version, build_arg):
ServiceUpdater(name, environment, None, version, dict(build_arg)).run()
def deploy_service(name, environment, version, image_uri, build_arg):
ServiceUpdater(name, environment, None, version, image_uri, dict(build_arg)).run()


@cli.command()
Expand Down
28 changes: 19 additions & 9 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")
Copy link
Copy Markdown
Collaborator

@rokibulislaam rokibulislaam Apr 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move this line log_bold("Initiating deployment\n") to line number 66

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()

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
3 changes: 2 additions & 1 deletion cloudlift/deployment/task_definition_creator.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ def _complete_image_url(ecr_client: EcrClient):


class TaskDefinitionCreator:
def __init__(self, name, environment, version, build_args, region='ap-south-1'):
def __init__(self, name, environment, version, image_uri, build_args, region='ap-south-1'):
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why image_uri positional argument in TaskDefinitionCreator constructor? I don't think deploy_service depend on TaskDefinitionCreator. Also the new positional argument might break create_task_definition & update_task_definition, could you please test & verify that?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, it should not have been there. pushed the wrong changes.

self.name = name
self.environment = environment
self.build_args = build_args
self.region = region
self.version = version
self.image_uri = image_uri
self.client = get_client_for('iam', self.environment)
self.resource = get_resource_for('iam', self.environment)
self.env_sample_file = './env.sample'
Expand Down