Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.58 KB | None | 0 0
  1. import base64
  2. import json
  3.  
  4. import docker
  5. import boto3
  6. import sys
  7.  
  8. access_key = 'AKIAII2HDKJB52AXQ5IQ'
  9. secret_key = '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'
  10. region = 'eu-west-2'
  11. td_family = 'petsquare-dev'
  12. clusters = {
  13.     'dev': 'default',
  14.     'test': 'default',
  15.     'prod': 'petsquare-prod'
  16. }
  17.  
  18.  
  19. def process_docker_api_line(payload):
  20.     for segment in payload.decode("utf-8").split('\n'):
  21.         line = segment.strip()
  22.         if line:
  23.             try:
  24.                 line_payload = json.loads(line)
  25.             except ValueError as ex:
  26.                 print("Could not decipher payload from API: " + str(ex))
  27.                 continue
  28.             if line_payload:
  29.                 if "errorDetail" in line_payload:
  30.                     error = line_payload["errorDetail"]
  31.                     sys.stderr.write(error["message"])
  32.                     raise RuntimeError("Error on build - code " + str(error["code"]))
  33.                 elif "stream" in line_payload:
  34.                     sys.stdout.write(line_payload["stream"])
  35.  
  36.  
  37. def build_and_push_to_ecr():
  38.     path = '/Users/crookedman/Work/petsquare-python/web'
  39.     repo = '621275034485.dkr.ecr.eu-west-2.amazonaws.com/petsquare'
  40.     local_tag = 'petsquare:dev-latest'
  41.  
  42.     ecr_client = boto3.client('ecr', region_name=region)
  43.     docker_api = docker.APIClient()
  44.  
  45.     print("Building image " + local_tag)
  46.     for line in docker_api.build(path=path, tag=local_tag, stream=True):
  47.         process_docker_api_line(line)
  48.  
  49.     auth = ecr_client.get_authorization_token()
  50.     token = auth["authorizationData"][0]["authorizationToken"]
  51.     username, password = base64.b64decode(token).decode("utf-8").split(':')
  52.  
  53.     auth_config_payload = {'username': username, 'password': password}
  54.  
  55.     version_tag = repo + ':dev-latest'
  56.  
  57.     print('Tagging version', version_tag)
  58.     if docker_api.tag(local_tag, version_tag) is False:
  59.         raise RuntimeError("Tag appeared to fail: " + version_tag)
  60.  
  61.     print('Pushing to repo', version_tag)
  62.     for line in docker_api.push(version_tag, stream=True, auth_config=auth_config_payload):
  63.         process_docker_api_line(line)
  64.     print('Success!')
  65.     docker_api.remove_image(version_tag, force=True)
  66.  
  67.  
  68. def update_task_definition():
  69.     ecs_client = boto3.client(
  70.         'ecs',
  71.         aws_access_key_id=access_key,
  72.         aws_secret_access_key=secret_key,
  73.         region_name=region
  74.     )
  75.     td_response = ecs_client.list_task_definitions(
  76.         familyPrefix='petsquare-dev',
  77.         status='ACTIVE',
  78.         sort='DESC',
  79.     )
  80.     last_td = td_response['taskDefinitionArns'][0].split('/')[-1]
  81.     ecs_client.register_task_definition(containerDefinitions=[
  82.         {
  83.             "portMappings": [
  84.                 {
  85.                     "hostPort": 80,
  86.                     "protocol": "tcp",
  87.                     "containerPort": 81
  88.                 }
  89.             ],
  90.             "cpu": 0,
  91.             "memory": 1024,
  92.             "image": "621275034485.dkr.ecr.eu-west-2.amazonaws.com/petsquare:dev-latest",
  93.             "name": "petsquare-dev"
  94.         }
  95.     ], family=td_family)
  96.  
  97.     ecs_client.deregister_task_definition(
  98.         taskDefinition=last_td
  99.     )
  100.  
  101.     task_response = ecs_client.list_tasks(
  102.         cluster='default',
  103.         family=td_family,
  104.         desiredStatus='RUNNING',
  105.     )
  106.     for arn in task_response['taskArns']:
  107.         ecs_client.stop_task(
  108.             cluster='default',
  109.             task=arn
  110.         )
  111.     ecs_client.run_task(
  112.         cluster='default',
  113.         taskDefinition=td_family,
  114.         count=2
  115.     )
  116.  
  117. update_task_definition()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement