Created
May 28, 2016 08:10
-
-
Save s-fujimoto/b0ab1caef5f23246748f27b2840e4682 to your computer and use it in GitHub Desktop.
CloudFormation parameters use by YAML format
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import argparse | |
import json | |
try: | |
import boto3 | |
import yaml | |
except ImportError: | |
print '*******************************' | |
print 'ERROR : Please install boto3 and PyYAML. Please exec following commad.' | |
print 'pip install boto3 PyYAML' | |
print '*******************************' | |
import sys | |
sys.exit(1) | |
def parse_args(): | |
parser = argparse.ArgumentParser() | |
subparser = parser.add_subparsers() | |
parser_gen = subparser.add_parser('generate-parameters') | |
parser_gen.add_argument('--template-file', dest='template_file', required=True) | |
parser_gen.add_argument('--parameters-file', dest='parameters_file', required=True) | |
parser_gen.set_defaults(func=generate_parameters) | |
parser_gen2 = subparser.add_parser('g') | |
parser_gen2.add_argument('--template-file', dest='template_file', required=True) | |
parser_gen2.add_argument('--parameters-file', dest='parameters_file', required=True) | |
parser_gen2.set_defaults(func=generate_parameters) | |
parser_create = subparser.add_parser('create-stack') | |
parser_create.add_argument('--stack-name', dest='stack_name', required=True) | |
parser_create.add_argument('--template-file', dest='template_file', required=True) | |
parser_create.add_argument('--parameters-file', dest='parameters_file', required=True) | |
parser_create.add_argument('--profile', dest='profile', required=False) | |
parser_create.set_defaults(func=create_stack) | |
parser_create2 = subparser.add_parser('c') | |
parser_create2.add_argument('--stack-name', dest='stack_name', required=True) | |
parser_create2.add_argument('--template-file', dest='template_file', required=True) | |
parser_create2.add_argument('--parameters-file', dest='parameters_file', required=False) | |
parser_create2.add_argument('--profile', dest='profile', required=False) | |
parser_create2.set_defaults(func=create_stack) | |
return parser.parse_args() | |
def _write_yaml_file(file_path, params): | |
with open(file_path, "w") as f: | |
for name, data in params.items(): | |
default = None | |
for key, val in data.items(): | |
if isinstance(val, (list, dict)): | |
val = json.dumps(val) | |
if key == 'Default': | |
default = val | |
f.writelines("### %s: %s\n" % (key, str(val))) | |
f.writelines(name + ": %s\n" % (default if default else '')) | |
f.writelines("\n") | |
def _read_yaml_file(file_path): | |
with open(file_path) as f: | |
return yaml.load(f.read()) | |
def _read_json_file(file_path): | |
with open(file_path) as f: | |
return json.load(f) | |
def _create_parameters_format(params): | |
cfn_params = [] | |
for key, value in params.items(): | |
cfn_params.append({'ParameterKey': key, 'ParameterValue': value}) | |
return cfn_params | |
def generate_parameters(args): | |
body = _read_json_file(args.template_file) | |
params = body['Parameters'] | |
_write_yaml_file(args.parameters_file, params) | |
def create_stack(args): | |
template = json.dumps(_read_json_file(args.template_file)) | |
params = None | |
if args.parameters_file: | |
params = _create_parameters_format(_read_yaml_file(args.parameters_file)) | |
session = boto3.session.Session(profile_name=args.profile) | |
session.client('cloudformation').create_stack( | |
StackName=args.stack_name, | |
TemplateBody=template, | |
Parameters=params, | |
Capabilities=[ 'CAPABILITY_IAM' ], | |
) | |
def main(): | |
args = parse_args() | |
args.func(args) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment