LINUX.ORG.RU

Кастом модуль для ансибл

 ,


0

1

Привет, посоны.

Написал свой модуль для ансибла - всё работает, но есть одна деталь, которая не даёт покоя. Почему, когда условие модуля отрабатывает без ошибок, то ансибл просто пишет

ok: [HOSTNAME -> localhost]

вместо того, чтобы мне показать моё сообщение? Причем, в многословном режиме -vvv мессага показывается. Щито делать и кто виноват?

from ansible.module_utils.basic import *
import os


def check(file, ip):
    with open(file, 'r+') as f:
        content = f.readline()
        if content == "":
            os.remove(file)
            msg = "NO ERRORS FOUND IN %s" % (ip)
            rc=0
            return {'changed':False,'failed':False,'message': msg}
        else:
            msg = "ERRORS FOUND IN %s" % (ip)
            rc=1
            return {'changed':True,'failed':True,'message': msg}


def run_module():
    # Arguments
    module_args = dict(
        directory=dict(type='str', required=True),
        ip=dict(type='str', required=True)
    )

    # Result Dictionary
    result = dict(
        changed=False,
        failed=False,
        message=''
    )

    # Handle Exception
    try:
        # Initialize AnsibleModule
        module = AnsibleModule(
            argument_spec=module_args,
            supports_check_mode=True
        )

        # Get Module Parameters
        dir = module.params['directory']
        ip = module.params['ip']

        # Construct Response Message
        result = check(dir, ip)

        # Return The Response
        module.exit_json(**result)

    except Exception as e:
        # Handle Exception
        result['message'] = str(e)
        module.fail_json(msg=result['message'])

if __name__ == '__main__':
    run_module()

Заранее рассылаю во все стороны флюиды токсичной маскулинности и гендерного абьюза.

Так задумано. И правильно. Если автор каждого модуля понапишет своего дебага в каждом сообщении, то будут здоровенные портянки на десятки и сотни экранов при запуске каждой роли. У меня есть роли, в которых выполняется сотня тасок с десятками модулей. Думаешь, мне охота всё это читать, если всё выполнилось нормально?

shell-script ★★★★★
()
30 октября 2023 г.

Вместо того чтобы слушать всяких дурачков на форуме,нужно доку читать либо смотреть исходники примеров модулей. В данном случае , у тебя в ответе идет json { ‘changed’:bool, ‘failed’:bool, ‘message’: string }

В данном случае ansible не может показать тебе дифы, так как твой код возвращает только состояние модуля и message. Если ты хочешь увидите дифы, то тебу нужно вернуть структуру формата:

{ ‘changed’:bool, ‘failed’:bool, ‘message’: string, ‘diff’: [ before: string After: string ] }

В данном случае, при условии что failed = false а changed = true, ansible отобразит изменения при условии что, при запуcке playbook указан ключик -D (–diff).

slavcawada
()