in lib/ansible/modules/cloud/alicloud/_alicloud_slb_vsg.py [0:0]
def main():
argument_spec = ecs_argument_spec()
argument_spec.update(dict(
state=dict(type='str', default='present', choices=['present', 'absent', 'list']),
load_balancer_id=dict(type='str'),
vserver_group_name=dict(type='str', aliases=['group_name']),
backend_servers=dict(type='list'),
vserver_group_id=dict(type='str', aliases=['group_id']),
old_backend_servers=dict(type='list'),
new_backend_servers=dict(type='list')
))
module = AnsibleModule(argument_spec=argument_spec)
if HAS_FOOTMARK is False:
module.fail_json(msg='footmark required for the module alicloud_slb_vsg.')
slb = slb_connect(module)
state = module.params['state']
load_balancer_id = module.params['load_balancer_id']
vserver_group_name = module.params['vserver_group_name']
backend_servers = module.params['backend_servers']
vserver_group_id = module.params['vserver_group_id']
changed = False
current_vserver_group = None
if vserver_group_id:
try:
current_vserver_group = slb.describe_vserver_group_attribute(vserver_group_id)
except Exception as e:
module.fail_json(msg=str("Unable to describe vserver group attribute, error:{0}".format(e)))
if state == "present":
if current_vserver_group:
set_data = []
add_data = []
if backend_servers:
server_info = {}
decode_infos = convert_to_utf8(current_vserver_group.backend_servers)
for info in decode_infos['backend_server']:
server_info[info['port']] = info
for server in backend_servers:
if server['port'] in server_info.keys():
if server_info[server['port']]['weight'] != server['weight']:
set_data.append(server)
else:
add_data.append(server)
if set_data or vserver_group_name:
try:
current_vserver_group.set_attribute(backend_servers=set_data, vserver_group_name=vserver_group_name)
except Exception as e:
module.fail_json(msg=str("Unable to set vserver group attribute, error:{0}".format(e)))
if add_data:
try:
current_vserver_group.add_backend_servers(backend_servers=add_data)
except Exception as e:
module.fail_json(msg=str("Unable to add vserver group backend server, error:{0}".format(e)))
try:
current_vserver_group = slb.describe_vserver_group_attribute(vserver_group_id)
except Exception as e:
module.fail_json(msg=str("Unable to describe vserver group attribute, error:{0}".format(e)))
module.exit_json(changed=True, vserver_group=get_info(current_vserver_group))
else:
try:
current_vserver_group = slb.create_vserver_group(load_balancer_id, vserver_group_name, backend_servers)
except Exception as e:
module.fail_json(msg=str("Unable to create vserver group error:{0}".format(e)))
module.exit_json(changed=True, vserver_group=get_info(current_vserver_group))
if not current_vserver_group:
module.fail_json(msg="The specified vserver group is not exist. Please check your vserver_group_id and try again.")
elif state == "list":
module.exit_json(changed=True, vserver_group=get_info(current_vserver_group))
elif state == 'absent':
if backend_servers:
try:
current_vserver_group = current_vserver_group.remove_backend_servers(backend_servers)
except Exception as e:
module.fail_json(msg=str("Unable to remove vserver group backend server, error:{0}".format(e)))
module.exit_json(changed=True, vserver_group=get_info(current_vserver_group))
else:
try:
changed = current_vserver_group.delete()
except Exception as e:
module.fail_json(msg=str("Unable to delete vserver group, error:{0}".format(e)))
module.exit_json(changed=changed, vserver_group=get_info(current_vserver_group))