运维日常

playbook编程

2019-11-15  本文已影响0人  大白菜的猪猪

需求说明

编写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']))

上一篇 下一篇

猜你喜欢

热点阅读