def main()

in lib/ansible/modules/cloud/alicloud/_alicloud_slb_lb.py [0:0]


def main():
    argument_spec = ecs_argument_spec()
    argument_spec.update(dict(
        internet_charge_type=dict(type='str', required=False, choices=['paybybandwidth', 'paybytraffic'], default='paybytraffic'),
        state=dict(type='str', required=True, choices=['present', 'absent', 'running', 'stopped']),
        load_balancer_name=dict(type='str', required=False, aliases=['name']),
        load_balancer_id=dict(type='str', required=False, aliases=['id']),
        is_internet=dict(type='bool', required=False, default=True),
        bandwidth=dict(type='int', required=False, default=1),
        vswitch_id=dict(type='str', required=False, aliases=['subnet_id']),
        master_zone_id=dict(type='str', required=False),
        slave_zone_id=dict(type='str', required=False)
    ))

    module = AnsibleModule(argument_spec=argument_spec)

    if HAS_FOOTMARK is False:
        module.fail_json(msg='footmark required for the module alicloud_slb_lb.')

    slb = slb_connect(module)
    state = module.params['state']
    load_balancer_id = module.params['load_balancer_id']
    load_balancer_name = module.params['load_balancer_name']
    is_internet = module.params['is_internet']
    vswitch_id = module.params['vswitch_id']
    master_zone_id = module.params['master_zone_id']
    slave_zone_id = module.params['slave_zone_id']
    internet_charge_type = module.params['internet_charge_type']
    bandwidth = module.params['bandwidth']

    changed = False
    cur_slb = None

    if load_balancer_id and load_balancer_name:
        name_test = ""
    else:
        name_test = load_balancer_name
    res_objs = slb.describe_load_balancers(load_balancer_id=load_balancer_id, load_balancer_name=name_test)
    if len(res_objs) == 1:
        cur_slb = slb.describe_load_balancer_attribute(res_objs[0].id)

    if state == "present":
        if cur_slb:
            if load_balancer_name != cur_slb.name:
                changed = cur_slb.modify_name(load_balancer_name)
                if changed:
                    cur_slb.load_balancer_name = load_balancer_name

            if internet_charge_type != cur_slb.internet_charge_type or \
                    (cur_slb.internet_charge_type == "paybybandwidth" and bandwidth != cur_slb.bandwidth):
                print (cur_slb.__dict__)
                print (cur_slb.internet_charge_type, cur_slb.bandwidth)
                changed = cur_slb.modify_spec(internet_charge_type=internet_charge_type, bandwidth=bandwidth)
                if changed:
                    cur_slb.internet_charge_type = internet_charge_type
                    cur_slb.bandwidth = bandwidth
        else:
            client_token = "Ansible-Alicloud-%s-%s" % (hash(str(module.params)), str(time.time()))
            address_type = "internet"
            if not is_internet:
                address_type = "intranet"
            cur_slb = slb.create_load_balancer(load_balancer_name=load_balancer_name,
                                               address_type=address_type, vswitch_id=vswitch_id,
                                               internet_charge_type=internet_charge_type,
                                               master_zone_id=master_zone_id, slave_zone_id=slave_zone_id,
                                               bandwidth=bandwidth, client_token=client_token)
            changed = True
        module.exit_json(changed=changed, load_balancer=get_info(cur_slb), load_balancer_id=cur_slb.id)

    if not cur_slb:
        module.fail_json(msg="The specified load balancer is not exist. Please check your load_balancer_id or load_balancer_name and try again.")

    if state == "absent":
        changed = cur_slb.delete()
        module.exit_json(changed=changed, load_balancer_id=cur_slb.load_balancer_id)
    if state == "running":
        if cur_slb.status != "active":
            changed = cur_slb.set_status("active")
        if changed:
            cur_slb.load_balancer_status = "active"
        module.exit_json(changed=changed, load_balancer=get_info(cur_slb), load_balancer_id=cur_slb.load_balancer_id)

    if state == "stopped":
        if cur_slb.status != "inactive":
            changed = cur_slb.set_status("inactive")
        if changed:
            cur_slb.load_balancer_status = "inactive"
        module.exit_json(changed=changed, load_balancer=get_info(cur_slb), load_balancer_id=cur_slb.load_balancer_id)