def main()

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


def main():
    argument_spec = oss_bucket_argument_spec()
    argument_spec.update(dict(
        bucket=dict(type='str', required=True),
        mode=dict(type='str', required=True, choices=['put', 'get', 'list', 'delete']),
        permission=dict(type='str', default='private', choices=['private', 'public-read', 'public-read-write']),
        headers=dict(type='dict'),
        overwrite=dict(type='bool', default=False),
        content=dict(type='str'),
        file_name=dict(type='str', aliases=['file']),
        object=dict(type='str', aliases=['key', 'object_name']),
        byte_range=dict(type='str', aliases=['range'])
    )
    )
    module = AnsibleModule(argument_spec=argument_spec)

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

    oss_bucket = oss_bucket_connect(module)
    mode = module.params['mode']
    file_name = module.params['file_name']
    object_key = module.params['object']
    headers = module.params['headers']

    changed = False

    if mode == 'put':
        content = module.params['content']
        if content and file_name:
            module.fail_json(msg="'content' and 'file_name' only one can be specified when mode is put.")

        overwrite = module.params['overwrite']
        permission = module.params['permission']

        try:
            if content:
                oss_bucket.put_object(object_key, content, overwrite, headers=headers)
                changed = True
            elif file_name:
                oss_bucket.put_object_from_file(object_key, file_name, overwrite, headers=headers)
                changed = True
            elif oss_bucket.is_object_exist(object_key):
                if permission:
                    oss_bucket.put_object_acl(object_key, permission)
                    changed = True
                if headers:
                    oss_bucket.update_object_headers(object_key, headers)
                    changed = True
            module.exit_json(changed=changed, key=object_key, object=get_object_info(oss_bucket.get_object_info(object_key)))
        except Exception as e:
            module.fail_json(msg="Unable to upload an object {0} or "
                                 "modify its permission and headers, and got an error: {1}".format(object_key, e))

    elif mode == 'get':
        byte_range = module.params['byte_range']
        try:
            if file_name:
                oss_bucket.get_object_to_file(object_key, file_name, byte_range=byte_range, headers=headers)
            else:
                module.fail_json(msg="'file_name' must be specified when mode is get.")
            module.exit_json(changed=changed, key=object_key, object=get_object_info(oss_bucket.get_object_info(object_key)))
        except Exception as e:
            module.fail_json(msg="Unable to download object {0}, and got an error: {1}".format(object_key, e))

    elif mode == 'list':
        objects = []
        max_keys = 500
        try:
            while True:
                results = oss_bucket.list_objects(prefix=object_key, max_keys=max_keys)
                for obj in results:
                    objects.append(get_object_info(obj))

                if len(results) < max_keys:
                    break
            module.exit_json(changed=False, objects=objects)
        except Exception as e:
            module.fail_json(msg="Unable to retrieve all objects, and got an error: {0}".format(e))

    else:
        try:
            oss_bucket.delete_object(object_key)
            module.exit_json(changed=changed, key=object_key)
        except Exception as e:
            module.fail_json(msg="Unable to delete an object {0}, and got an error: {1}".format(object_key, e))