我想在Python中运行Ansible而不通过(ANSIBLE_HOST)指定库存文件,但只是通过:
ansible.run.Runner(
module_name='ping',
host='www.google.com'
)
Run Code Online (Sandbox Code Playgroud)
我实际上可以轻松地在Fabric中执行此操作,但只是想知道如何在Python中执行此操作.另一方面,用于python的Ansible API的文档并不完整.
trk*_*och 150
令人惊讶的是,诀窍是追加一个 ,
# Host and IP address
ansible all -i example.com,
ansible all -i 93.184.216.119,
Run Code Online (Sandbox Code Playgroud)
要么
# Requires 'hosts: all' in your playbook
ansible-playbook -i example.com, playbook.yml
Run Code Online (Sandbox Code Playgroud)
前面的主机参数,可以是主机名或IPv4/v6地址.
Arb*_*zar 40
我知道这个问题真的很老但是认为这个小技巧可能对将来需要帮助的用户有所帮助:
ansible-playbook -i 10.254.3.133, site.yml
Run Code Online (Sandbox Code Playgroud)
如果您为本地主机运行:
ansible-playbook -i localhost, --connection=local site.yml
Run Code Online (Sandbox Code Playgroud)
诀窍是在ip address/dns名称之后,将逗号放在引号内并hosts: all在你的剧本中需要' '.
希望这会有所帮助.
就我而言,我不想hosts: all在我的剧本中加入,因为如果有人运行剧本而忘记包括-i 10.254.3.133,
这是我的解决方案(ansible 2.6):
$ ansible-playbook myplaybook.yml -e "{target: 10.1.1.1}" -i 10.1.1.1, ...
Run Code Online (Sandbox Code Playgroud)
然后,在剧本中:
- hosts: "{{ target }}"
remote_user: donn
vars_files:
- myvars
roles:
- myrole
Run Code Online (Sandbox Code Playgroud)
这是一个特殊的用例,当我需要配置一个主机并且我不想/不需要将它添加到清单中时。
你可以这样做:
hosts = ["webserver1","webserver2"]
webInventory = ansible.inventory.Inventory(hosts)
webPing = ansible.runner.Runner(
pattern='webserver*',
module_name='ping',
inventory = webInventory
).run()
Run Code Online (Sandbox Code Playgroud)
无论主机中的任何内容都成为您的库存,您可以使用模式搜索(或执行"全部").