Advertisement
Guest User

Untitled

a guest
Jul 18th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. # TODO: wrap boto3.client.create_db_instance in try for various errors
  4. # TODO: implement wait_for_resource
  5. # TODO: determine output result
  6. # WARN: This module is very untested and will likely fail miserably
  7.  
  8. EXAMPLES = '''
  9.  
  10. '''
  11.  
  12. def format_tags(tags_from_ansible):
  13. tags = []
  14. for tag in tags_from_ansible:
  15. for d in tag:
  16. tags.append({'Key': d, 'Value': str(tag[d])})
  17. return tags
  18.  
  19.  
  20. def create_db_instance(params):
  21. from pprint import pprint
  22. for k in params:
  23. print "{} : {}".format(k, params[k])
  24. import boto3
  25. rds = boto3.client('rds', region_name=params['region'])
  26. response = rds.create_db_instance(
  27. DBName = params['db_name'],
  28. DBInstanceIdentifier = params['instance_name'],
  29. AllocatedStorage = params['size'],
  30. DBInstanceClass = params['instance_type'],
  31. Engine = params['db_engine'],
  32. MasterUsername = params['username'],
  33. MasterUserPassword = params['password'],
  34. VpcSecurityGroupIds = params['vpc_security_groups'],
  35. DBSubnetGroupName = params['subnet'],
  36. MultiAZ = params['multi_zone'] in ['yes', 'True'],
  37. EngineVersion = params['engine_version'],
  38. AutoMinorVersionUpgrade = params['upgrade'],
  39. PubliclyAccessible = params['publicly_accessible'] in ['yes', 'True'],
  40. Tags = format_tags(params['tags']),
  41. StorageType = params['storage_type'],
  42. DBParameterGroupName = params['parameter_group']
  43. )
  44. return response
  45.  
  46.  
  47.  
  48. def main():
  49. module = AnsibleModule(
  50. argument_spec = dict(
  51. command=dict(choices=['create'], required=True),
  52. instance_name=dict(required=True),
  53. source_instance=dict(required=False),
  54. db_engine=dict(choices=['MySQL'], required=False),
  55. size=dict(type='int', required=False),
  56. instance_type=dict(aliases=['type'], required=False),
  57. username=dict(required=False),
  58. password=dict(no_log=True, required=False),
  59. db_name=dict(required=False),
  60. engine_version=dict(required=False),
  61. parameter_group=dict(required=False),
  62. license_model=dict(choices=['license-included', 'bring-your-own-license', 'general-public-license', 'postgresql-license'], required=False),
  63. multi_zone=dict(type='bool', required=False),
  64. iops=dict(required=False),
  65. security_groups=dict(required=False),
  66. vpc_security_groups=dict(type='list', required=False),
  67. port=dict(required=False, type='int'),
  68. upgrade=dict(type='bool', default=False),
  69. option_group=dict(required=False),
  70. maint_window=dict(required=False),
  71. backup_window=dict(required=False),
  72. backup_retention=dict(required=False),
  73. zone=dict(aliases=['aws_zone', 'ec2_zone'], required=False),
  74. subnet=dict(required=False),
  75. snapshot=dict(required=False),
  76. apply_immediately=dict(type='bool', default=False),
  77. new_instance_name=dict(required=False),
  78. tags=dict(type='list', required=False),
  79. publicly_accessible=dict(required=False),
  80. character_set_name=dict(required=False),
  81. storage_type=dict(required=False, choices=['standard', 'gp2', 'io1'], default='gp2'),
  82. force_failover=dict(type='bool', required=False, default=False),
  83. region=dict(required=True)
  84. ),
  85. supports_check_mode=True
  86. )
  87. params = module.params
  88. result = {}
  89. result['params'] = params
  90. res = create_db_instance(params)
  91. result['rds_response'] = res
  92. module.exit_json(**result)
  93.  
  94. # import module snippets
  95. from ansible.module_utils.basic import *
  96.  
  97.  
  98. if __name__ == '__main__':
  99. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement