我正在制作一个需要一些自定义逻辑的 ansible 任务,所以我正在编写一个小的 shell 脚本并使用该shell
任务。如果用户正在使用,我是否可以输出任何类型的“diff”输出以显示给用户--diff
?我知道使用-vv
来查看脚本的 stdout 和 stderr,但格式不太好,而且你也会得到很多额外的输出
Ansible 版本 2.9.6
答案1
为了实现这一点,您需要编写自定义模块,而不仅仅是自定义脚本。command
和shell
模块没有提供根据命令输出返回自定义属性的功能。
自定义 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()