def main()

in plugins/modules/ali_ess_configuration.py [0:0]


def main():
    argument_spec = ecs_argument_spec()
    argument_spec.update(dict(
        group_id=dict(type='str', aliases=['scaling_group_id']),
        instance_type=dict(type='str', aliases=['type']),
        image_id=dict(type='str', aliases=['image']),
        name=dict(type='str', aliases=['configuration_name']),
        internet_charge_type=dict(type='str', default="PayByBandwidth", choices=["PayByBandwidth", "PayByTraffic"]),
        max_bandwidth_in=dict(type='int', default=200),
        max_bandwidth_out=dict(type='int', default=0),
        system_disk_category=dict(type='str', default='cloud_efficiency'),
        system_disk_size=dict(type='int', default='40'),
        tags=dict(type='dict'),
        state=dict(default='present', choices=['present', 'absent']),
        id=dict(type='str', aliases=['configuration_id']),
        key_name=dict(type='str', aliases=['keypair']),
        user_data=dict(type='str'),
        data_disks=dict(type='list'),
        security_group_id=dict(type='str'),
        ram_role_name=dict(type='str', aliases=['ram_role'])
    ))


    module = AnsibleModule(argument_spec=argument_spec)

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

    ess = ess_connect(module)
    state = module.params['state']
    cfg_id = module.params['id']
    cfg_name = module.params['name']
    scaling_group = module.params['group_id']
    changed = False

    current = None
    all_cfgs = []
    if cfg_id or cfg_name:
        cfgs = ess.describe_configurations(scaling_group_id=scaling_group, scaling_configuration_ids=[cfg_id],
                                           scaling_configuration_names=[cfg_name])

        if cfgs:
            if len(cfgs) > 1:
                for cfg in cfgs:
                    all_cfgs.append(cfg.id)
                module.fail_json(msg="There are several scaling configurations in our record based on name {0}: {1}. "
                                     "Please specified one using 'id' and try again.".format(cfg_name, all_cfgs))
            current = cfgs[0]

    if state == 'present':
        if current is None:
            try:
                data_disks = module.params['data_disks']
                if not isinstance(data_disks, list):
                    module.fail_json(msg="Filed 'data_disks' should be a list, aborting.")

                if not isinstance(module.params['tags'], dict):
                    module.fail_json(msg="Filed 'tags' should be a dict, aborting.")

                current = ess.create_configuration(scaling_group_id=scaling_group,
                                                   image_id=module.params['image_id'],
                                                   instance_type=module.params['instance_type'],
                                                   security_group_id=module.params['security_group_id'],
                                                   name=cfg_name,
                                                   internet_charge_type=module.params['internet_charge_type'],
                                                   max_bandwidth_in=module.params['max_bandwidth_in'],
                                                   max_bandwidth_out=module.params['max_bandwidth_out'],
                                                   system_disk_category=module.params['system_disk_category'],
                                                   system_disk_size=module.params['system_disk_size'],
                                                   data_disks=data_disks,
                                                   tags=module.params['tags'],
                                                   key_pair_name=module.params['key_name'],
                                                   ram_role_name=module.params['ram_role_name'],
                                                   user_data=module.params['user_data'])
                changed = True
            except Exception as e:
                module.fail_json(msg="Create scaling configuration got an error: {0}".format(e))

        module.exit_json(changed=changed, id=current.id, name=current.name, group_id=current.group_id, configuration=get_details(current))

    if current is None:
        if cfg_id or cfg_name:
                module.fail_json(msg="There are no scaling configuration in our record based on id {0} or name {1}. "
                                     "Please check it and try again.".format(cfg_id, cfg_name))
        module.fail_json(msg='Please specify a scaling configuration that you want to terminate by parameters id or name, aborting')

    try:
        module.exit_json(changed=current.terminate())
    except Exception as e:
        module.fail_json(msg='Delete scaling configuration {0} got an error: {1}'.format(current.id, e))