返回顶部
首页 > 资讯 > 后端开发 > Python >Python调用ansible2.4
  • 906
分享到

Python调用ansible2.4

Python 2023-01-31 02:01:02 906人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

代码如下:#!/usr/bin/env python import JSON import shutil from collections import namedtuple from ansible.parsing.dataloade

代码如下:

#!/usr/bin/env python

import JSON
import shutil
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.task_queue_manager import TaskQueueManager
from ansible.executor.playbook_executor import PlaybookExecutor
from ansible.plugins.callback import CallbackBase
import ansible.constants as C


class ResultCallback(CallbackBase):
    def __init__(self, *args, **kwargs):
        # super(ResultsCollector, self).__init__(*args, **kwargs)
        self.host_ok = {}
        self.host_unreachable = {}
        self.host_failed = {}

    def v2_runner_on_unreachable(self, result):
        self.host_unreachable[result._host.get_name()] = result

    def v2_runner_on_ok(self, result, *args, **kwargs):
        self.host_ok[result._host.get_name()] = result

    def v2_runner_on_failed(self, result, *args, **kwargs):
        self.host_failed[result._host.get_name()] = result


class Ansibleapi(object):
    def __init__(self):
        self.Options = namedtuple('Options',
                             ['connection',
                              'remote_user',
                              'ask_sudo_pass',
                              'verbosity',
                              'ack_pass',
                              'module_path',
                              'forks',
                              'become',
                              'become_method',
                              'become_user',
                              'check',
                              'listhosts',
                              'listtasks',
                              'listtags',
                              'syntax',
                              'sudo_user',
                              'sudo',
                              'diff'])
        
        self.ops = self.Options(connection='smart',
                              remote_user=None,
                              ack_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)

        self.loader = DataLoader()
        self.passWords = dict()
        self.results_callback = ResultCallback()
        self.inventory = InventoryManager(loader=self.loader, sources=['/etc/ansible/inventory/hosts'])
        self.variable_manager = VariableManager(loader=self.loader, inventory=self.inventory)

    def runansible(self,host_list, task_list):

        play_source = dict(
            name="Ansible Play",
            hosts=host_list,
            gather_facts='no',
            tasks=task_list
        )
        play = Play().load(play_source, variable_manager=self.variable_manager, loader=self.loader)

        tqm = None
        try:
            tqm = TaskQueueManager(
                inventory=self.inventory,
                variable_manager=self.variable_manager,
                loader=self.loader,
                options=self.ops,
                passwords=self.passwords,
                stdout_callback=self.results_callback,
                run_additional_callbacks=C.DEFAULT_LOAD_CALLBACK_PLUGINS,
                run_tree=False,
            )
            result = tqm.run(play)
        finally:
            if tqm is not None:
                tqm.cleanup()
            shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)

        results_raw = {}
        results_raw['success'] = {}
        results_raw['failed'] = {}
        results_raw['unreachable'] = {}

        for host, result in self.results_callback.host_ok.items():
            results_raw['success'][host] = json.dumps(result._result)

        for host, result in self.results_callback.host_failed.items():
            results_raw['failed'][host] = result._result['msg']

        for host, result in self.results_callback.host_unreachable.items():
            results_raw['unreachable'][host] = result._result['msg']

        print results_raw


    def playbookrun(self, playbook_path):

        self.variable_manager.extra_vars = {'customer': 'test', 'disabled': 'yes'}
        playbook = PlaybookExecutor(playbooks=playbook_path,
                                    inventory=self.inventory,
                                    variable_manager=self.variable_manager,
                                    loader=self.loader, options=self.ops, passwords=self.passwords)
        result = playbook.run()
        return result


if __name__ == "__main__":
    a = AnsibleApi()
    host_list = ['100.101.23.153']
    tasks_list = [
        dict(action=dict(module='command', args='ls')),
        # dict(action=dict(module='shell', args='Python sleep.py')),
        # dict(action=dict(module='synchronize', args='src=/home/op/test dest=/home/op/ delete=yes')),
    ]
    a.runansible(host_list,tasks_list)
    a.playbookrun(playbook_path=['/etc/ansible/test.yml'])

test.yml

---  
- hosts: all  
  remote_user: root  
  tasks:  
    - name: Test ansible api  
      shell: touch a.txt

执行结果:

{'failed': {}, 'success': {u'100.101.23.153': '{"_ansible_parsed": true, "stderr_lines": [], "changed": true, "end": "2018-03-29 14:32:16.038750", "_ansible_no_log": false, "stdout": "Desktop\\nDocuments\\nDownloads\\nMusic\\nPictures\\nPublic\\nTemplates\\nVideos\\nbin\\nhosts\\ninst-sys\\ntest.txt", "cmd": ["ls"], "start": "2018-03-29 14:32:15.863760", "delta": "0:00:00.174990", "stderr": "", "rc": 0, "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": false, "_raw_params": "ls", "removes": null, "warn": true, "chdir": null, "stdin": null}}, "stdout_lines": ["Desktop", "Documents", "Downloads", "Music", "Pictures", "Public", "Templates", "Videos", "bin", "hosts", "inst-sys", "test.txt"]}'}, 'unreachable': {}}

PLAY [all] **********************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************
ok: [100.101.23.153]

TASK [Test ansible api] *********************************************************************************************************************************************************************************
fatal: [100.101.23.153]: FAILED! => {"changed": true, "cmd": "assdds", "delta": "0:00:00.173921", "end": "2018-03-29 14:32:24.685301", "msg": "non-zero return code", "rc": 127, "start": "2018-03-29 14:32:24.511380", "stderr": "/bin/sh: assdds: command not found", "stderr_lines": ["/bin/sh: assdds: command not found"], "stdout": "", "stdout_lines": []}
	to retry, use: --limit @/etc/ansible/main.retry

PLAY RECAP **********************************************************************************************************************************************************************************************
100.101.23.153             : ok=1    changed=0    unreachable=0    failed=1   

--结束END--

本文标题: Python调用ansible2.4

本文链接: https://lsjlt.com/news/186209.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python调用ansible2.4
    代码如下:#!/usr/bin/env python import json import shutil from collections import namedtuple from ansible.parsing.dataloade...
    99+
    2023-01-31
    Python
  • python调用调用Linux命令
    如何调用Linux命令下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的:import commandsexitcode...
    99+
    2023-01-31
    命令 python Linux
  • python调用golang并回调
    最近折腾python交互,也真够呛的,一连玩了好几天,被虐的不要不要的。天天各种百度,Google之间。好吧,废话少说,转入我们的正题。其实,py调用go一般的函数,只是第一道坎,正主其实是py调用go,并且go还回调py!!!网上其实这...
    99+
    2023-01-31
    回调 python golang
  • C# 调用Python
    一、简介 IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性...
    99+
    2023-10-07
    c# python
  • Python调用DLL
    C语言中的函数默认是__cdecl调用,C++中可用__stdcall来显示声明调用,但也可以用extern “C” 用python调用dll时需要根据不同的调用约定而使用不同的函数。但是不管什么调用,最后都必须用extern “C”...
    99+
    2023-01-31
    Python DLL
  • python调用tcl
          今天遇到一个问题,一个设备的接口API都是tcl脚本形式的,但是我的code都是python的,然后python需要调用tcl。以下是简单的解决方法。 先写一个tcl脚本(求阶乘)helloworld.tcl: #!usr/bi...
    99+
    2023-01-31
    python tcl
  • python调用PHP
    . 调用php 方法一: import subprocess #simple caller, disguard output subprocess.call("php /path/to/my/old/script.php")...
    99+
    2023-01-31
    python PHP
  • python调用caffe
    首先需要安装caffe for python,安装过程可以参考:http://blog.csdn.net/u011961856/article/details/76557509 python 中调用caffe库函数为: import ca...
    99+
    2023-01-31
    python caffe
  • Python调用autoit
    1. 安装pywin32模块,地址:http://sourceforge.net/projects/pywin32/  选择对应的版本下载 2.从autoit3\AutoItX下找到AutoItX3_x64.dll AutoitX.dll...
    99+
    2023-01-31
    Python autoit
  • Python调用Mysql
     最近在学习Python,发现Python的众多类库给Python开发带来了极大的便利性。 由于项目中使用Mysql,就考虑尝试使用Python调用Mysql,方便写一些调试用的小程序代码。花了半天差了些资料,自己动手,做了个简单的demo...
    99+
    2023-01-31
    Python Mysql
  • android 调用 python
    我这里使用AS,如果使用ec开发的直接看 http://www.srplab.com/cn/index.html 官方下载的开发包 里面有demo,我下载了可以跑通; 不管是不是AS和ec,开始还是去看下CLE官网的开发...
    99+
    2023-01-31
    android python
  • php调用python
    php文件: <php $program="/usr/bin/python ./a.py "; #注意使用绝对路径 $g='b'; $p=exec($program.$g);echo $p; pythond文件:#!usr/bin/...
    99+
    2023-01-31
    php python
  • Golang调用Python
    摘要: Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言。Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 ![干他一炮...
    99+
    2023-01-31
    Golang Python
  • python 调用grep
    #因为我现在还有找到在大量文件查找python实现的好方法。 #实现采用了grep的方法。 #使用了os.popen而不是subprocess中的Popen,因为前者的参数更简单 #不知subprocess中的Popen是否有更好的地方?...
    99+
    2023-01-31
    python grep
  • Python SOAP 调用
    python编写SOAP服务   SOAP简介引用 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是一种标准化的通讯规范,主要用于Web服务(web service)中。SOAP的出...
    99+
    2023-01-31
    Python SOAP
  • Python调用:'get_column
    在学习《Python编程快速上手》12.3.4:列字母和数字之间的转换按照书上的代码做练习,结果输出如下:ImportError: cannot import name 'get_column_letter'导入错误:不能导入'get_co...
    99+
    2023-01-31
    Python get_column
  • scala调用python
    scala项目中调用python的几种方法 首先在工程目录某个地方建立了一个python文件 test.py import sys def addNum(a, b): return a + b if __name__...
    99+
    2023-01-31
    scala python
  • python调用api接口教程(Python调用ChatGPT-3.5-API)
    要在Python中调用ChatGPT-3.5-API,您需要使用Python的请求库和json库来发送HTTP请求和处理返回的JSO...
    99+
    2023-09-22
    python
  • 利用Python调用HBASE
    利用Python调用HBASE的 需要安装thrift hbase-thrift 启动hbase的thrift服务:bin/hbase-daemon.sh start thrift 默认端口是9090mysql 到hbase的数据同步: 1...
    99+
    2023-01-31
    Python HBASE
  • python调用java API
    使用JPype来让python调用java API。 JPype的下载地址:https://pypi.python.org/pypi/JPype1 JPype的帮助文档:http://jpype.readthedocs.io/e...
    99+
    2023-01-31
    python java API
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作