コード例 #1
0
ファイル: info.py プロジェクト: markuman/nextcloud_collection
def main():
    module = AnsibleModule(supports_check_mode=True,
                           argument_spec=parameter_spects(dict()))

    nc = NextcloudHandler(module.params, module.fail_json)

    retval = nc.get('/ocs/v1.php/cloud/capabilities').json()
    module.exit_json(nextcloud=retval.get('ocs').get('data'))
コード例 #2
0
def main():
    module = AnsibleModule(supports_check_mode=True,
                           argument_spec=parameter_spects(
                               dict(name=dict(required=False, type='str'))))
    module.params["details"] = True
    nc = NextcloudHandler(module.params, module.fail_json)

    if module.params.get('name'):
        retval = nc.get_password(module.params.get('name'))
    else:
        retval = nc.list_passwords()

    module.exit_json(password=retval)
コード例 #3
0
ファイル: talk.py プロジェクト: markuman/nextcloud_collection
def main():
    module = AnsibleModule(argument_spec=parameter_spects(
        dict(msg=dict(required=True, type='str'),
             channel=dict(required=True, type='str'))))

    nc = NextcloudHandler(module.params, module.fail_json)

    message = module.params.get("msg")
    channel = module.params.get("channel")

    r, change = nc.talk(message, channel)

    module.exit_json(changed=change,
                     talk={
                         'message': message,
                         'channel': channel
                     })
コード例 #4
0
def main():
    module = AnsibleModule(
        supports_check_mode=True,
        argument_spec=parameter_spects(
            dict(source=dict(required=True, type='str', aliases=['src']))))

    nc = NextcloudHandler(module.params, module.fail_json)

    source = module.params.get("source")

    change = False
    r = nc.propfind("remote.php/dav/files/{USER}/{SRC}".format(USER=nc.user(),
                                                               SRC=source))

    if r != {}:
        r['source'] = source

    module.exit_json(changed=change, file_info=r)
コード例 #5
0
def main():
    module = AnsibleModule(
        supports_check_mode=True,
        argument_spec=parameter_spects(
            dict(username=dict(required=False, type='str', aliases=['user_id'
                                                                    ]))))

    nc = NextcloudHandler(module.params, module.fail_json)
    username = module.params.get('username')

    if username:
        retval = nc.get(f'/ocs/v1.php/cloud/users/{username}').json()
        module.exit_json(users=[username],
                         user_data=retval.get('ocs', {}).get('data'))
    else:
        retval = nc.get('/ocs/v1.php/cloud/users').json()
        module.exit_json(users=retval.get('ocs', {}).get('data',
                                                         {}).get('users', []),
                         user_data={})
コード例 #6
0
ファイル: file.py プロジェクト: markuman/nextcloud_collection
def main():
    module = AnsibleModule(supports_check_mode=True,
                           argument_spec=parameter_spects(
                               dict(mode=dict(required=True, type='str'),
                                    source=dict(required=True,
                                                type='str',
                                                aliases=['src']),
                                    destination=dict(required=False,
                                                     type='str',
                                                     aliases=['dest']),
                                    overwrite=dict(
                                        required=False,
                                        type='str',
                                        default='always',
                                        aliases=['force', 'overwritten']),
                                    delete_recursively=dict(required=False,
                                                            type='bool',
                                                            default=False))))

    nc = NextcloudHandler(module.params, module.fail_json)

    mode = module.params.get("mode")
    source = module.params.get("source")
    destination = module.params.get("destination")
    overwrite = module.params.get("overwrite")
    delete_recursively = module.params.get("delete_recursively")

    message = "Undefined."
    change = False

    if mode == "get":
        facts = nc.propfind("remote.php/dav/files/{USER}/{SRC}".format(
            USER=nc.user(), SRC=source))

        if destination is None:
            module.fail_json(msg='No destination is given')

        if facts == {}:
            message = "Requested file does not exist."
        else:
            r = nc.get("remote.php/dav/files/{USER}/{SRC}".format(
                USER=nc.user(), SRC=source))
            if overwrite == 'always' or not os.path.isfile(destination):
                change = True
                message = "File not received because of check_mode."
                if not module.check_mode:
                    write_file(destination, r.content)
                    message = "File received"

            elif overwrite == 'different':
                # sha256sum local file
                local = hashlib.sha256()
                with open(destination, "rb") as FILE:
                    for chunk in iter(lambda: FILE.read(4096), b""):
                        local.update(chunk)

                # sh256sum remote file
                remote = hashlib.sha256(r.content)
                message = "sha256sum of dest and src is equal."
                if remote.hexdigest() != local.hexdigest():
                    change = True
                    message = "sha256sum of dest and src is not equal. But file was not written due check_mode."
                    if not module.check_mode:
                        write_file(destination, r.content)
                        message = "File received. sha256sum of dest and src was not equal."

            elif overwrite == 'different_size':
                message = "size of dest and src is equal."
                if os.path.getsize(destination) != facts.get('size'):
                    message = "size of dest and src is equal. But file was not written due check_mode"
                    change = True
                    if not module.check_mode:
                        write_file(destination, r.content)
                        message = "File received. Size of dest and src aws not equal."

    elif mode == "delete":
        facts = nc.propfind("remote.php/dav/files/{USER}/{SRC}".format(
            USER=nc.user(), SRC=source))
        message = "File does not already exists."
        if facts != {}:
            if not module.check_mode:
                if delete_recursively:
                    r, change = nc.delete(
                        "remote.php/dav/files/{USER}/{SRC}".format(
                            USER=nc.user(), SRC=source))
                    if facts.get('content_type') != 'inode/directory':
                        message = "File deleted."
                    else:
                        message = "Folder deleted recurively."
                elif facts.get('content_type') != 'inode/directory':
                    r, change = nc.delete(
                        "remote.php/dav/files/{USER}/{SRC}".format(
                            USER=nc.user(), SRC=source))
                    message = "File deleted"
                else:
                    message = "Cannot delete folder without set delete_recursively to true."
            else:
                message = "File not deleted due check_mode."
                change = True

    elif mode == "put":
        facts = nc.propfind("remote.php/dav/files/{USER}/{SRC}".format(
            USER=nc.user(), SRC=destination))
        if overwrite == 'always' or facts == {}:
            if not module.check_mode:
                r, change = nc.put(
                    "remote.php/dav/files/{USER}/{DEST}".format(
                        USER=nc.user(), DEST=destination), source)
                message = "File uploaded."
            else:
                message = "File not uploaded due check_mode."
                change = True

        elif overwrite == 'different_size':
            message = "File not uploaded because size of dest and src is equal."
            if os.path.getsize(source) != facts.get('size'):
                if not module.check_mode:
                    r, change = nc.put(
                        "remote.php/dav/files/{USER}/{DEST}".format(
                            USER=nc.user(), DEST=destination), source)
                    message = "File was uploaded. Size of dest and src was not equal."
                else:
                    message = "File not uploaded due check_mode. Size of dest and src is not equal."
                    change = True

    module.exit_json(changed=change,
                     file={
                         'destination': destination,
                         'mode': mode,
                         'source': source
                     },
                     message=message)
コード例 #7
0
def main():
    module = AnsibleModule(
        supports_check_mode=True,
        argument_spec=parameter_spects(
            dict(
                name=dict(required=True, type='str'),
                state=dict(type='str',
                           choices=['present', 'absent'],
                           default='present'),
                password=dict(required=False, type='str', no_log=True),
                # setting no_log=False on update_password avoids a false positive warning about not setting no_log
                update_password=dict(type='str',
                                     choices=['always', 'on_create'],
                                     default='on_create',
                                     no_log=False),
                username=dict(required=False, type='str'),
                url=dict(required=False, type='str'),
                notes=dict(required=False, type='str'),
                favorite=dict(required=False, type='bool', default=False),
                folder=dict(required=False, type='str'))))
    module.params["details"] = True
    nc = NextcloudHandler(module.params, module.fail_json)

    name = module.params.get('name')
    password = module.params.get('password') or nc.fetch_generated_password()
    username = module.params.get('username')
    url = module.params.get('url')
    notes = module.params.get('notes')
    state = module.params.get('state')
    favorite = module.params.get('favorite')
    update_password = module.params.get('update_password')
    folder = module.params.get('folder')

    retval = nc.get_password(name)

    if state == 'present':
        if len(retval) == 1:
            # update password
            if password == retval[0].get('password'):
                module.exit_json(changed=False, password=retval)

            elif update_password == 'always' and password != retval[0].get(
                    'password'):
                obj = {
                    'id': retval[0].get('id'),
                    'password': password,
                    'label': name
                }

                if notes:
                    obj['notes'] = notes

                if username:
                    obj['username'] = username

                if url:
                    obj['url'] = url

                if favorite:
                    obj['favorite'] = favorite

                if not module.check_mode:
                    retval = nc.update_password(obj)

                module.exit_json(changed=True, password=retval)

            else:
                module.exit_json(changed=False, password=retval)

        elif len(retval) == 0:
            # create password
            obj = {'password': password, 'label': name}

            if folder:
                if nc.get_passwords_folder(folder):
                    obj['folder'] = nc.get_passwords_folder(folder)
                else:
                    obj['folder'] = nc.create_passwords_folder(folder).get(
                        'id')

            if notes:
                obj['notes'] = notes

            if username:
                obj['username'] = username

            if url:
                obj['url'] = url

            if favorite:
                obj['favorite'] = favorite

            retval = {}
            if not module.check_mode:
                retval = nc.create_password(obj)

            module.exit_json(changed=True, password=retval)

        else:
            module.fail_json(
                msg='More than one password identifies. Cannot continue')

    elif state == 'absent':
        if len(retval) == 1:
            if not module.check_mode:
                obj = {'id': retval[0].get('id')}
                retval = nc.delete_password(obj)
                module.exit_json(changed=True, password=retval)
            module.exit_json(changed=True, password={})
        elif len(retval) == 0:
            module.exit_json(changed=False, password={})
        else:
            module.fail_json(
                msg='More than one password identifies. Cannot continue')