packerSsmUpdate

packerSsmUpdate.py

Description: Update SSM Params after a packer AMI build Owner: CloudOps Version: 1.0

 1#!/usr/bin/env python3
 2"""
 3packerSsmUpdate.py
 4
 5Description: Update SSM Params after a packer AMI build
 6Owner: CloudOps
 7Version: 1.0
 8
 9"""
10
11import argparse
12import os
13import sys
14from utils import aws, slack
15
16REGION = os.environ.get('AWS_DEFAULT_REGION', 'us-east-1')
17
18if __name__ == "__main__":
19    print("packerSsmUpdate.__main__(): BEGIN")
20
21    #
22    # ArgParse
23    #
24    parser = argparse.ArgumentParser(description='Update SSM Params after a successful Packer AMI build.')
25    parser.add_argument(
26        '-s',
27        '--ssmpullpath',
28        action='store',
29        type=str,
30        required=False,
31        default=os.environ.get('SSM_PULL_PATH', ''),
32        help='SSM path to pull AMI info from. defaults to env var SSM_PULL_PATH if exists')
33
34    parser.add_argument(
35        '-S',
36        '--ssmpushpath',
37        action='store',
38        type=str,
39        required=False,
40        default=os.environ.get('SSM_PUSH_PATH', None),
41        help='SSM path to push AMI info to. defaults to env var SSM_PUSH_PATH if exists, or pull path if unset.')
42
43    args = parser.parse_args()
44
45    _SSM_PULL_PATH = args.ssmpullpath
46    _SSM_PUSH_PATH = _SSM_PULL_PATH if args.ssmpushpath is None else args.ssmpushpath
47
48    print("packerSsmUpdate.__main__(): Getting SSM Param from build account.")
49    _AMI_INFO_FROM = aws.ssm_get_parameter_from_build(name=_SSM_PULL_PATH, region=REGION)
50    print(_AMI_INFO_FROM)
51
52    print("packeerSsmUpdate.__main__(): Getting SSM Param from environment aws env.")
53    _AMI_INFO_TO = aws.ssm_get_parameter(name=_SSM_PUSH_PATH, region=REGION)
54    print(_AMI_INFO_TO)
55
56    if _AMI_INFO_FROM != _AMI_INFO_TO:
57        print("packeerSsmUpdate.__main__(): AMIs are different. Syncing.")
58        aws.ssm_put_parameter(name=_SSM_PUSH_PATH, value=_AMI_INFO_FROM, region=REGION)
59    else:
60        print("packeerSsmUpdate.__main__(): AMIs are the same. Skipping sync.")
61
62    _GO_ENVIRONMENT_NAME = os.environ.get("GO_ENVIRONMENT_NAME", "unknown_env")
63    if not slack.send(message=f"Updated SSM Value for ${_SSM_PUSH_PATH} in ${_GO_ENVIRONMENT_NAME} to ${_AMI_INFO_FROM}."):
64        sys.exit(1)
65
66    sys.exit(0)