def main()

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))