in src/ansible_collections/alibaba/apsarastack/plugins/modules/ali_rds_instance.py [0:0]
def main():
argument_spec = common_argument_spec()
argument_spec.update(dict(
state=dict(default="present", choices=["present", "absent", "restart"]),
zone_id=dict(type='str', aliases=['availability_zone', 'apsarastack_zone'],
fallback=(env_fallback, ['APSARASTACK_ZONE', 'APSARASTACK_ZONE_ID'])),
engine=dict(type='str', choices=['MySQL', 'SQLServer', 'PostgreSQL', 'PPAS', 'MariaDB']),
engine_version=dict(type='str'),
db_instance_net_type=dict(type='str', choices=["Internet", "Intranet"], aliases=['instance_net_type']),
db_instance_name=dict(type='str', aliases=['description', 'name']),
db_instance_id=dict(type='str', aliases=['id']),
security_ip_list=dict(type='str', aliases=['security_ips']),
pay_type=dict(type='str', choices=["PostPaid", "PrePaid"]),
period=dict(type='int', choices=[1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 24, 36], default=1),
connection_mode=dict(type='str', choices=["Standard", "Safe"]),
vswitch_id=dict(type='str'),
private_ip_address=dict(type='str'),
tags=dict(type='dict'),
purge_tags=dict(type='bool', default=False),
auto_pay=dict(type='bool', aliases=['auto_renew']),
connection_string_prefix=dict(type='str'),
port=dict(type='str'),
current_connection_string=dict(type='str'),
db_instance_class=dict(type='str', aliases=['instance_class']),
db_instance_storage=dict(type='int', aliases=['instance_storage'])
))
modules = AnsibleModule(argument_spec=argument_spec)
if HAS_FOOTMARK is False:
modules.fail_json(msg="Package 'footmark' required for the module ali_rds_instance.")
rds = rds_connect(modules)
vpc = vpc_connect(modules)
state = modules.params['state']
vswitch_id = modules.params['vswitch_id']
connection_string_prefix = modules.params['connection_string_prefix']
port = modules.params['port']
tags = modules.params['tags']
current_connection_string = modules.params['current_connection_string']
db_instance_description = modules.params['db_instance_name']
modules.params['db_instance_description'] = db_instance_description
db_instance_class = modules.params['db_instance_class']
db_instance_storage = modules.params['db_instance_storage']
db_instance_id = modules.params['db_instance_id']
pay_type = modules.params['pay_type']
used_time = modules.params['period']
modules.params['period'] = 'Month'
modules.params['used_time'] = str(used_time)
if used_time > 9:
modules.params['period'] = 'Year'
if used_time == 12:
modules.params['used_time'] = '1'
elif used_time == 24:
modules.params['used_time'] = '2'
else:
modules.params['used_time'] = '3'
if pay_type:
modules.params['pay_type'] = pay_type.capitalize()
current_instance = None
changed = False
if vswitch_id:
modules.params['instance_network_type'] = 'VPC'
try:
vswitch_obj = vpc.describe_vswitch_attributes(vswitch_id=vswitch_id)
if vswitch_obj:
modules.params['vpc_id'] = vswitch_obj.vpc_id
except Exception as e:
modules.fail_json(msg=str("Unable to get vswitch, error:{0}".format(e)))
try:
current_instance = get_instance(db_instance_id, db_instance_description, modules, rds)
except Exception as e:
modules.fail_json(msg=str("Unable to describe instance, error:{0}".format(e)))
if state == 'absent':
if current_instance:
if current_connection_string:
try:
changed = rds.release_instance_public_connection(current_connection_string=current_connection_string, db_instance_id=current_instance.id)
modules.exit_json(changed=changed, instances=current_instance.get().read())
except Exception as e:
modules.fail_json(msg=str("Unable to release public connection string error: {0}".format(e)))
try:
current_instance.delete()
modules.exit_json(changed=True, instances={})
except Exception as e:
modules.fail_json(msg=str("Unable to release instance error: {0}".format(e)))
modules.fail_json(msg=str("Unable to operate your instance, please check your instance_id and try again!"))
if state == 'restart':
if current_instance:
try:
current_instance.restart()
rds.wait_for_rds_status(modules.params['db_instance_id'], 'Running', 4, 720)
modules.exit_json(changed=changed, instances=current_instance.get().read())
except Exception as e:
modules.fail_json(msg=str("Unable to restart instance error: {0}".format(e)))
modules.fail_json(msg=str("Unable to restart your instance, please check your instance_id and try again!"))
if not current_instance:
try:
modules.params['client_token'] = "Ansible-Apsarastack-%s-%s" % (hash(str(modules.params)), str(time.time()))
current_instance = rds.create_db_instance(**modules.params)
modules.exit_json(changed=True, instances=current_instance.get().read())
except Exception as e:
modules.fail_json(msg=str("Unable to create rds instance error: {0}".format(e)))
if connection_string_prefix and port:
if current_connection_string:
try:
changed = current_instance.modify_db_instance_connection_string(current_connection_string=current_connection_string, connection_string_prefix=connection_string_prefix, port=port)
modules.exit_json(changed=changed, instances=current_instance.get().read())
except Exception as e:
modules.fail_json(msg=str("Unable to modify current string error: {0}".format(e)))
else:
try:
changed = current_instance.allocate_public_connection_string(connection_string_prefix=connection_string_prefix, port=port)
modules.exit_json(changed=changed, instances=current_instance.get().read())
except Exception as e:
modules.fail_json(msg=str("Unable to allocate public connection error: {0}".format(e)))
if db_instance_class or db_instance_storage:
try:
changed = current_instance.modify_instance_spec(db_instance_class=db_instance_class, db_instance_storage=db_instance_storage)
except Exception as e:
modules.fail_json(msg=str("Unable to modify instance spec: {0}".format(e)))
if modules.params['purge_tags']:
if not tags:
tags = current_instance.tags
try:
if current_instance.remove_tags(tags):
changed = True
modules.exit_json(changed=changed, instances=current_instance.get().read())
except Exception as e:
modules.fail_json(msg="{0}".format(e))
if tags:
try:
if current_instance.add_tags(tags):
changed = True
except Exception as e:
modules.fail_json(msg="{0}".format(e))
modules.exit_json(changed=changed, instances=current_instance.get().read())