playbook编程
需求说明
编写python程序
利用该程序执行前面课程中的playbook
导入模块
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
def runpb(hosts_list, playbooks):
# 初始化需要的对象
Options = namedtuple('Options',
['connection',
'remote_user',
'ask_sudo_pass',
'verbosity',
'ask_pass',
'module_path',
'forks',
'become',
'become_method',
'become_user',
'check',
'listhosts',
'listtasks',
'listtags',
'syntax',
'sudo_user',
'sudo',
'diff'])
# 初始化需要的对象
options = Options(connection='smart',
remote_user='root',
ask_pass=None,
sudo_user=None,
forks=5,
sudo=None,
ask_sudo_pass=False,
verbosity=5,
module_path=None,
become=None,
become_method=None,
become_user=None,
check=False,
diff=False,
listhosts=None,
listtasks=None,
listtags=None,
syntax=None)
# 用来加载解析yaml文件或JSON内容,并且支持vault的解密
loader = DataLoader()
# 设置密码,需要是dict类型
passwords = dict()
# 根据inventory加载对应变量,此处参数可以有两种格式:hosts文件或ip列表
inventory = InventoryManager(loader=loader, sources=hosts_list)
# 管理变量的类,包括主机,组,扩展等变量
variable_manager = VariableManager(loader=loader, inventory=inventory)
# playbooks就填写yml文件
playbook = PlaybookExecutor(
playbooks=playbooks,
inventory=inventory,
variable_manager=variable_manager,
loader=loader,
options=options,
passwords=passwords
)
#开始执行
result = playbook.run()
return result
if __name__ == '__main__':
print(runpb(['myansible/hosts'], playbooks=['myansible/lamp.yml']))