【发布时间】:2022-11-10 03:05:39
【问题描述】:
我有一个自定义 python 脚本,可以生成与 Ansible 兼容的清单:
...
if __name__ == "__main__":
with open("main.log", "a") as f:
f.write(f"{sys.argv}\n")
arg_parser = argparse.ArgumentParser(description=__doc__, prog=__file__)
...
当我手动运行它时,一切都很好:
python scripts/main.py --list
main.log 文件附加了一个新行:
['scripts/main.py', '--list']
我的ansible.cfg 启用了脚本插件:
[inventory]
enable_plugins = script
但是,当我尝试将脚本与 ansible-inventory 一起使用时,它失败了:
ansible-inventory -i scripts/main.py --list -vvvv
ansible-inventory [core 2.13.2]
config file = /Users/jaep/code/ic/pocs/poc_ansible_dynamic_inventory/ansible.cfg
configured module search path = ['/Users/jaep/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /opt/homebrew/Cellar/ansible/6.2.0/libexec/lib/python3.10/site-packages/ansible
ansible collection location = /Users/jaep/.ansible/collections:/usr/share/ansible/collections
executable location = /opt/homebrew/bin/ansible-inventory
python version = 3.10.6 (main, Aug 11 2022, 13:36:31) [Clang 13.1.6 (clang-1316.0.21.2.5)]
jinja version = 3.1.2
libyaml = True
Using /Users/jaep/code/ic/pocs/poc_ansible_dynamic_inventory/ansible.cfg as config file
setting up inventory plugins
script declined parsing /Users/jaep/code/ic/pocs/poc_ansible_dynamic_inventory/scripts/main.py as it did not pass its verify_file() method
[WARNING]: Unable to parse
/Users/jaep/code/ic/pocs/poc_ansible_dynamic_inventory/scripts/main.py as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}
真正令人惊讶的是脚本没有被 ansible-inventory 调用,因为 main.log 仍然是空的。
【问题讨论】:
-
Ansible checks the shebang,所以确保你有一个,并且它是 ansible 的愿望,或者(当然)确保文件是可执行的
-
@mdaniel 请将此添加为答案。我会接受的。
标签: python ansible ansible-inventory