如何在 Ansible playbook api 中设置“--limit”选项

2024-04-04

我正在编写 python 脚本来运行 ansible playbook,使用 Ansible 2.4.2.0。
据我所知有一个选择--limit,这可以限制 Ansible 在特定主机上的运行。

例如:
这是/etc/ansible/hosts

[test]  
192.168.0.1  
192.168.0.2  

下面的命令只会让 Ansible 执行test.yml on 192.168.0.1:

ansible-playbook test.yml --limit="192.168.0.1"  

我想知道如何在 ansible playbook api 中设置选项来完成同样的事情。
我尝试添加到limit='192.168.0.1在选项中,但它不起作用。

下面是我使用的Python脚本。

from collections import namedtuple  
from ansible.parsing.dataloader import DataLoader  
from ansible.vars.manager import VariableManager  
from ansible.inventory.manager import InventoryManager  
from ansible.executor.playbook_executor import PlaybookExecutor  
 
loader = DataLoader()  
inventory = InventoryManager(loader=loader, sources=['/etc/ansible/hosts'])  
variable_manager = VariableManager(loader=loader, inventory=inventory)  
 
Options = namedtuple('Options', ['listtags', 'listtasks', 'listhosts', 'syntax', 'connection','module_path', 'forks', 'remote_user', 'become', 'become_method', 'become_user', 'verbosity', 'check', 'diff', 'ask_sudo_pass', 'limit'])  
 
options = Options(listtags=None, listtasks=None, listhosts=None, syntax=None, connection='smart', module_path=None, forks=100, remote_user=None,  become=None, become_method='sudo', become_user='root', verbosity=None, check=False, diff=False, ask_sudo_pass=None, limit='192.168.0.1')  
 
passwords = {}
 
pbex = PlaybookExecutor(playbooks=['/home/test.yml'], inventory=inventory, variable_manager=variable_manager, loader=loader, options=options, passwords=passwords)  

pbex.run()  

Ansible 是开源的,因此您可以随时查看现有代码。

它在这里ansible-playbook命令行代码:

inventory.subset(self.options.subset)
if len(inventory.list_hosts()) == 0 and no_hosts is False:
    # Invalid limit
    raise AnsibleError("Specified --limit does not match any hosts")

Source: Ansible's code source https://github.com/ansible/ansible/blob/v2.4.2.0-1/lib/ansible/cli/playbook.py#L117

所以,你的情况,在实例化之后InventoryManager,你应该添加:

inventory.subset('192.168.0.1')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ansible playbook api 中设置“--limit”选项 的相关文章

随机推荐