<p>Ansible并没有提供一个很好的机制来将复杂的数据传递给<code>script</code>模块。编写自己的Ansible模块,然后像其他模块一样将数据传递给Ansible模块可能更简单:</p>
<pre><code> -
- name: run my module
mymodule:
someparameter: "{{ test_var }}"
</code></pre>
<p>您的模块可以是一个Python脚本,在现有代码之上只有一个小样板。下面是一个非常简单的模板,可以支持上述示例:</p>
<pre><code>#!/usr/bin/python
from __future__ import absolute_import, division, print_function # NOQA
from ansible.module_utils.basic import AnsibleModule
def main():
argument_spec = {
'someparameter': dict(type='list', required=True),
}
module = AnsibleModule(argument_spec=argument_spec,
supports_check_mode=True)
result = {'changed': False}
data = module.params['someparameter']
# ...do something with your data here...
module.exit_json(**result)
if __name__ == '__main__':
main()
</code></pre>
<p>把你的模块放到你的角色所在的<code>library</code>目录中,你就一切就绪了。你知道吗</p>
<p>您可以在文档中找到更多信息:</p>
<ul>
<li><a href="https://docs.ansible.com/ansible/2.3/dev_guide/developing_modules_general.html" rel="nofollow noreferrer">https://docs.ansible.com/ansible/2.3/dev_guide/developing_modules_general.html</a></li>
<li><a href="https://docs.ansible.com/ansible/latest/dev_guide/developing_program_flow_modules.html" rel="nofollow noreferrer">https://docs.ansible.com/ansible/latest/dev_guide/developing_program_flow_modules.html</a></li>
</ul>