ansible 中 shell 任务的自定义差异输出?

ansible 中 shell 任务的自定义差异输出?

我正在制作一个需要一些自定义逻辑的 ansible 任务,所以我正在编写一个小的 shell 脚本并使用该shell任务。如果用户正在使用,我是否可以输出任何类型的“diff”输出以显示给用户--diff?我知道使用-vv来查看脚本的 stdout 和 stderr,但格式不太好,而且你也会得到很多额外的输出

Ansible 版本 2.9.6

答案1

为了实现这一点,您需要编写自定义模块,而不仅仅是自定义脚本。commandshell模块没有提供根据命令输出返回自定义属性的功能。

自定义 Python 模块相当容易编写,可以放在library剧本旁边的目录中,也可以放在角色内(参见https://docs.ansible.com/ansible/latest/dev_guide/developing_locally.html#adding-a-module-locally)。您还可以将自定义模块编写为 bash 脚本,并以相同的方式部署它们,但您会错过 Python 模块中可用的许多便利函数,例如参数验证。

这是一个返回文本文件的快速而粗糙的 bash 模块:

#!/bin/bash

source $1
jq -n -r \
    --arg contents "$(cat $src)"\
    '{ changed: false, result: $contents }'

或者一些相当的 Python:

!/usr/bin/python
# -*- coding: utf-8 -*-

from __future__ import absolute_import, division, print_function
__metaclass__ = type

from ansible.module_utils.basic import AnsibleModule


def main():
    module = AnsibleModule(
        argument_spec = {
            'src': {
                'required': True,
                'type': 'path',
            }
        }
    )

    with open(module.params['src'], 'r') as f:
        contents = f.read()

    module.exit_json(changed=False, result=contents)


if __name__ == '__main__':
    main()

相关内容