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
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
.env
*/__pycache__
*/__pycache__
venv
*/venv
.vscode
*/.vscode
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,8 @@ worker-deploy:
ecr-scan:
@echo "make ecr-scan"
docker-compose -f docker-compose.yml run --rm ecr-scan


test:
@echo "Running tests"
python -m unittest src/*.py

6 changes: 0 additions & 6 deletions src/app-spec.tpl.json

This file was deleted.

44 changes: 0 additions & 44 deletions src/codedeploy.py

This file was deleted.

68 changes: 68 additions & 0 deletions src/codedeploy_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import os
import boto3
import json

from utils import json_template


class CodeDeployClient(object):
def __init__(self):
self.boto = boto3.client("codedeploy")

def create_app_spec(
self, file_name: str, task_arn: str, capacity_provider_strategy=None
):
env_vars = dict(os.environ)
env_vars["TASK_ARN"] = task_arn
env_vars["CAPACITY_PROVIDER_STRATEGY"] = ""
if capacity_provider_strategy:
env_vars["CAPACITY_PROVIDER_STRATEGY"] = (
',\\"CapacityProviderStrategy\\":[\\"%s\\"]'
% capacity_provider_strategy
)
try:
app_spec_tpl = json_template(file_name, env_vars)
except Exception as err:
print("Error: Templating app spec :", err)
exit(1)
print("App spec file content: \n%s" % app_spec_tpl)
return json.loads(app_spec_tpl)

def list_deployments(
self, application_name, deployment_group, statuses=["InProgress", "Ready"]
):
result = self.boto.list_deployments(
applicationName=application_name,
deploymentGroupName=deployment_group,
includeOnlyStatuses=statuses,
)
self.deployments = result["deployments"]
return result

def create_deployment(
self, application_name, deployment_config_name, deployment_group, revision
):
result = self.boto.create_deployment(
applicationName=application_name,
deploymentGroupName=deployment_group,
deploymentConfigName=deployment_config_name,
description="Deployment",
revision=revision,
)
self.deploymentId = result["deploymentId"]
return result

def continue_deployment(self, deployment_id):
return self.boto.continue_deployment(
deploymentId=deployment_id, deploymentWaitType="READY_WAIT"
)

def get_deployment(self, deployment_id):
result = self.boto.get_deployment(deploymentId=deployment_id)
self.status = result["deploymentInfo"]["status"]
return result

def stop_deployment(self, deployment_id, auto_rollback=True):
return self.boto.stop_deployment(
deploymentId=deployment_id, autoRollbackEnabled=auto_rollback
)
38 changes: 38 additions & 0 deletions src/codedeploy_client_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import unittest
import json
import os

from codedeploy_client import CodeDeployClient


class CodeDeployClientTest(unittest.TestCase):
def setUp(self):
os.environ["APP_NAME"] = "test-app"
os.environ["CONTAINER_PORT"] = "8080"
self.codedeploy_client = CodeDeployClient()
# self.deploy = Deploy()

def test_create_app_spec_should_success_with_capacity_provider_strategy(self):
task_def_arn = "arn:aws:1234567890:asdf"
capacity_provider_strategy = "asdfasdf"
result = self.codedeploy_client.create_app_spec(
"../templates/app-spec.tpl.json", task_def_arn, capacity_provider_strategy
)
with open("./tests/app-spec-with-capacity-provider-strategy.json", "r") as f:
expected_json = f.read()
expected = json.loads(expected_json)
self.assertEqual(result, expected)

def test_create_app_spec_should_success_without_capacity_provider_strategy(self):
task_def_arn = "arn:aws:1234567890:asdf"
result = self.codedeploy_client.create_app_spec(
"../templates/app-spec.tpl.json", task_def_arn
)
with open("./tests/app-spec-without-capacity-provider-strategy.json", "r") as f:
expected_json = f.read()
expected = json.loads(expected_json)
self.assertEqual(result, expected)


if __name__ == "__main__":
unittest.main()
Loading
Loading