Ansible社区目前非常活跃,从1.x到2.x,以及2.x以后的版本都有一些变化,Ansible官方并不支持Python API,不保证API向后兼容。2.0版本重写了大部分Python API,
官网上说2.0后使用Ansible API有些复杂了。
由于最开始没有重视版本间的差异,本地git clone了最新的dev分支代码,按照dev分支的实现用Python调用Ansible API,结果放到运行环境上就报找不到import的module。最后发现运行环境上的是2.3.2.0版本的Ansible,API跟最新的dev分支有很大不同,所以只好把本地代码切换到2.3 stable版本。下面的代码实现了用Python调用Ansible在本机执行playbook的功能,但仅支持2.3版本,代码参考ansible/cli/playbook.py,实际上就是从命令行的执行逻辑中抽取出来的。
!/usr/bin/env python
import os
import sys
from collections import namedtuple
from ansible.parsing.dataloader import DataLoader
from ansible.vars import VariableManager
from ansible.inventory import Inventory
from ansible.utils.vars import load_extra_vars
from ans