Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # TODO: wrap boto3.client.create_db_instance in try for various errors
- # TODO: implement wait_for_resource
- # TODO: determine output result
- # WARN: This module is very untested and will likely fail miserably
- EXAMPLES = '''
- '''
- def format_tags(tags_from_ansible):
- tags = []
- for tag in tags_from_ansible:
- for d in tag:
- tags.append({'Key': d, 'Value': str(tag[d])})
- return tags
- def create_db_instance(params):
- from pprint import pprint
- for k in params:
- print "{} : {}".format(k, params[k])
- import boto3
- rds = boto3.client('rds', region_name=params['region'])
- response = rds.create_db_instance(
- DBName = params['db_name'],
- DBInstanceIdentifier = params['instance_name'],
- AllocatedStorage = params['size'],
- DBInstanceClass = params['instance_type'],
- Engine = params['db_engine'],
- MasterUsername = params['username'],
- MasterUserPassword = params['password'],
- VpcSecurityGroupIds = params['vpc_security_groups'],
- DBSubnetGroupName = params['subnet'],
- MultiAZ = params['multi_zone'] in ['yes', 'True'],
- EngineVersion = params['engine_version'],
- AutoMinorVersionUpgrade = params['upgrade'],
- PubliclyAccessible = params['publicly_accessible'] in ['yes', 'True'],
- Tags = format_tags(params['tags']),
- StorageType = params['storage_type'],
- DBParameterGroupName = params['parameter_group']
- )
- return response
- def main():
- module = AnsibleModule(
- argument_spec = dict(
- command=dict(choices=['create'], required=True),
- instance_name=dict(required=True),
- source_instance=dict(required=False),
- db_engine=dict(choices=['MySQL'], required=False),
- size=dict(type='int', required=False),
- instance_type=dict(aliases=['type'], required=False),
- username=dict(required=False),
- password=dict(no_log=True, required=False),
- db_name=dict(required=False),
- engine_version=dict(required=False),
- parameter_group=dict(required=False),
- license_model=dict(choices=['license-included', 'bring-your-own-license', 'general-public-license', 'postgresql-license'], required=False),
- multi_zone=dict(type='bool', required=False),
- iops=dict(required=False),
- security_groups=dict(required=False),
- vpc_security_groups=dict(type='list', required=False),
- port=dict(required=False, type='int'),
- upgrade=dict(type='bool', default=False),
- option_group=dict(required=False),
- maint_window=dict(required=False),
- backup_window=dict(required=False),
- backup_retention=dict(required=False),
- zone=dict(aliases=['aws_zone', 'ec2_zone'], required=False),
- subnet=dict(required=False),
- snapshot=dict(required=False),
- apply_immediately=dict(type='bool', default=False),
- new_instance_name=dict(required=False),
- tags=dict(type='list', required=False),
- publicly_accessible=dict(required=False),
- character_set_name=dict(required=False),
- storage_type=dict(required=False, choices=['standard', 'gp2', 'io1'], default='gp2'),
- force_failover=dict(type='bool', required=False, default=False),
- region=dict(required=True)
- ),
- supports_check_mode=True
- )
- params = module.params
- result = {}
- result['params'] = params
- res = create_db_instance(params)
- result['rds_response'] = res
- module.exit_json(**result)
- # import module snippets
- from ansible.module_utils.basic import *
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement