我有一个 python 应用程序,它调用下面的代码,并计划通过 Ansible API 以编程方式运行 Ansible playbook,而不是使用子进程之类的东西。
下面的代码运行但实际上似乎没有执行任何内容。获取结果的输出只会给我一个看起来像这样的字典:
[{'plays': [localhost], 'playbook': 'playbooks/asg_elb_example.yml'}]
我不确定我哪里出错了或者我错过了什么。这是我正在运行的代码。
import os
import sys
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(SCRIPT_DIR)
import json
from collections import namedtuple
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
from ansible.inventory.manager import InventoryManager
from ansible.playbook.play import Play
from ansible.executor.playbook_executor import PlaybookExecutor
def ansible_part():
playbook_path = "playbooks/asg_elb_example.yml"
inventory_path = "hosts"
Options = namedtuple('Options', ['connection', 'module_path', 'forks', 'become', 'become_method', 'become_user', 'check', 'diff', 'listhosts', 'listtasks', 'listtags', 'syntax'])
loader = DataLoader()
options = Options(connection='local', module_path='%s/' % (ROOT_DIR), forks=100, become=None, become_method=None, become_user=None, check=False,
diff=False, listhosts=True, listtasks=False, listtags=False, syntax=False)
passwords = dict(vault_pass='secret')
inventory = InventoryManager(loader=loader, sources=[inventory_path])
variable_manager = VariableManager(loader=loader, inventory=inventory)
executor = PlaybookExecutor(
playbooks=[playbook_path], inventory=inventory, variable_manager=variable_manager, loader=loader,
options=options, passwords=passwords)
results = executor.run()
print results
def main():
ansible_part()
sys.exit(main())