如何在不指定库存但直接主机的情况下运行Ansible?

Ngo*_*ran 67 python ansible

我想在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地址.

  • 在剧本中,@ azmeuk的“主持人:所有人”应该都能正常工作。我通常这样做,然后在命令行上使用-i或--limit指定主机。 (2认同)

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在你的剧本中需要' '.

希望这会有所帮助.

  • 这是有效的,但为什么以Merlin的胡子的名义这是可接受的行为在ansible的部分?!人们究竟如何才能知道这一点?我撕裂了我的头发寻找修复. (6认同)
  • 对于它的价值,这里的报价是无操作的.如果使用`'localhost,'或`localhost,`,在这两种情况下`ansible-playbook`将从shell接收相同的参数.而`'localhost',`会以同样的方式进行评估(这里的关键是shell在将参数传递给你的命令之前由shell解释). (5认同)
  • 我知道我迟到了,但我刚刚偶然发现了您的评论,并想在这里提供一些见解。这样做的原因是因为 -i 标志要求您传递一个有效的清单目标,它可以是一个 INI 文件、一个 Ansible 有效的清单可执行文件或任何可以由 Ansible 清单插件处理的任意字符串。有一个名为“host_list”的 Ansible 插件,它采用逗号分隔的主机列表,并使用该信息创建动态清单,以允许在未知主机上执行临时命令。这个插件默认包含在 Ansible 上。 (2认同)

Don*_*Lee 7

就我而言,我不想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)

这是一个特殊的用例,当我需要配置一个主机并且我不想/不需要将它添加到清单中时。


seu*_*mac 6

你可以这样做:

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)

无论主机中的任何内容都成为您的库存,您可以使用模式搜索(或执行"全部").