Skip to content

Instantly share code, notes, and snippets.

@jneves
Last active March 28, 2018 10:04
Show Gist options
  • Save jneves/5c6541f41eb6b50f7194f5c32bfe5a44 to your computer and use it in GitHub Desktop.
Save jneves/5c6541f41eb6b50f7194f5c32bfe5a44 to your computer and use it in GitHub Desktop.
Usage: ./ecs-validate-deploy.py <region> <cluster>
#! /usr/bin/env python
import boto3
import logging
import sys
log = logging.getLogger(__name__)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
log.addHandler(ch)
def validate_deploy_service(region, cluster, service):
client = boto3.client('ecs', region_name=region)
response = client.describe_services(
cluster=cluster,
services=[
service,
]
)
task_definition = response['services'][0]['taskDefinition']
response = client.list_tasks(
cluster=cluster,
serviceName=service,
)
response = client.describe_tasks(
cluster=cluster,
tasks=response['taskArns']
)
for task in response['tasks']:
if task['taskDefinitionArn'] != task_definition:
log.error('Old task definition {} in place when {} expected for task {}.'.format(task['taskDefinitionArn'], task_definition, task['taskArn']))
return False
if task['desiredStatus'] != task['lastStatus']:
log.error('Status {} found when expected {} for task {}.'.format(task['desiredStatus'], task['lastStatus'], task['taskArn']))
return False
return True
def validate_deploy(region, cluster):
for service in ('app-main', 'celery-worker', 'celery-master'):
if not validate_deploy_service(region, cluster, service):
return False
return True
if __name__ == '__main__':
if not validate_deploy(sys.argv[1], sys.argv[2]):
sys.exit(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment