python异步调用ansible sdk

news2024/9/9 1:15:20

1、背景:

最近有个需求,运维平台(python+vue开发的)需要做一个批量任务功能,打算采用ansible_runner这个sdk去实现。然后发现网上关于这个sdk的说明太模糊了,根本不具备参考价值

2、教程:

注意事项
1、这个sdk只能在linux环境运行
2、需要在linux环境中部署ansible

首先通过查看这个包,可以发现有好几个方法

run                  ## 运行playbook
run_async      ## 异步运行playbook
run_command   ## 运行命令
run_command_async   ## 异步运行命令
get_plugin_docs    ##获取模块的说明文档,和ansible-doc相似
get_plugin_docs_async  ##异步获取模块的说明文档
get_plugin_list  ##获取模块列表
get_role_list  ##获取角色模块列表
get_role_argspec  #用于获取特定角色(role)的参数规范
get_inventory  ##获取inventory
get_ansible_config  ##获取配置

可以看到 其实主要分为两大类,同步和异步

下面用run、run_async 两个方法来举例:

run: 同步执行,调用该方法后会阻塞,直到 playbook 执行完成;执行结果一次性返回
run_async:异步执行,调用该方法后不会阻塞,playbook 会在后台运行;实时执行结果

选型:由于在生产中我们往往需要并发执行多种任务,且需要实时观测执行的进度,所以采用run_async方法做开发

3、案例:

功能需求:前端选择 需要执行的playbook,选择需要执行的主机,然后运行任务,并且实时返回结果。

由于这个功能设计到的代码比较多,所以这里介绍了一个简单的demo

import ansible_runner

def run_playbook(playbook_name, hosts, username, password):
    # 工作目錄
    data_dir = "/tmp/demo"
    # 设置环境变量
    envvars = {
        "ANSIBLE_FORKS": 1,
    }

    inventory = {
        "all": {
            "hosts": {
                host: {
                    "ansible_user": username,
                    "ansible_password": password
                } for host in hosts
            }
        }
    }

    # 运行 Ansible playbook 异步
    thread,runner = ansible_runner.run_async(
        private_data_dir=data_dir,
        playbook=playbook_name,
        inventory=inventory,
        quiet=True,
        envvars=envvars
    )



    # 处理并打印事件日志
    try:
        for event in runner.events:
            if 'stdout' in event and event['stdout']:
                print(event['stdout'])
    except Exception as e:
        raise Exception(f"Playbook execution failed: {str(e)}")

    # 等待线程完成
    thread.join()

    # 检查最终状态
    if runner.rc != 0:
        raise Exception(f"Playbook execution failed: {runner.rc}")

# 示例主机列表
hosts = ['10.10.100.100', '10.10.100.101']
username = 'ops'
password = '123456'

playbook_path="/opt/ansible-api/example_playbook.yml"

# 运行 playbook 并打印日志
try:
    run_playbook(playbook_path, hosts, username, password)
except Exception as e:
    print(f"Error: {e}")


example_playbook.yml

---
- name: Execute a simple shell command
  hosts: all
  gather_facts: no
  become_method: sudo

  tasks:
    - name: Run a shell command1
      shell: echo "!!!!!!!!!!!!!"

    - name: Run a shell command2
      shell: for i in {1..5};do sleep 1 && echo $i;done

    - name: Run a shell command3
      shell: lll

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化极限学习机,实现回归预测,三种算法对比,MATLAB代码免费获取

本期将原始蜣螂算法、减法优化器算法、鲸鱼优化算法进行应用。对极限学习机进行优化实现股票回归预测,三种算法相互对比。 股票预测案例 股票数据特征有:开盘价,盘中最高价,盘中最低价,收盘价等。预测值为股票价格。股…

大白话讲清楚GPT嵌入(Embedding)的基本原理

嵌入(Embedding)是机器学习中的一个基本概念,尤其是在自然语言处理 (NLP) 领域,但它们也广泛应用于其他领域。通常,嵌入是一种将离散的分类数据转换为连续向量的方法,通常在高维空间中,将复杂、…

Jmeter之逻辑控制器(事务控制器+仅一次控制器+吞吐量控制器)-第八天

一.逻辑控制器 1.1事务控制器 事务,其实可以理解为完成一个业务所调用所有接口的集合,当然可以是单个接口,也可以是多个相互关联的串联接口。 所以在进行性能测试时,在用于多接口串联的场景时,需要汇总统计该多个接…

强烈建议产品经理学习AI大模型!

随着GPT大热 “AI大模型”无疑是最火爆的话题! Google、百度、腾讯等等巨头互联网公司, 无不在布局人工智能技术和市场, 甚至还有60k*16的高薪,挖掘AI大模型人才! 非技术岗的AIGC产品经理, **薪资水平…

html+css+js前端作业和平精英官网1个页面(带js)

htmlcssjs前端作业和平精英官网1个页面(带js)有轮播图tab切换等功能 下载地址 https://download.csdn.net/download/qq_42431718/89597007 目录1 目录2 项目视频 htmlcssjs前端作业和平精英官网1个页面(带js) 页面1

leetcode 2236.判断根节点是否等于字节点

1.题目要求: 给你一个 二叉树 的根结点 root,该二叉树由恰好 3 个结点组成:根结点、左子结点和右子结点。如果根结点值等于两个子结点值之和,返回 true ,否则返回 false 。2.思路: 直接数组前序遍历,然后判断后面两个…

前端开发的十字路口,薪的出口会是AI吗?

前言 在数字化转型的浪潮中,前端开发一直扮演着至关重要的角色,它连接着用户与产品之间的桥梁。然而,随着技术的不断进步和社会经济环境的变化,前端开发领域也面临着前所未有的挑战和机遇。 前端开发的困境 前端开发领域的竞争…

大模型LLM- 微调P-Tuning v1

P-tuning v1 一文小结 这篇文章介绍了一种名为P-Tuning的新方法,用于改善预训练语言模型(PLMs)在自然语言理解(NLU)任务中的性能和稳定性。P-Tuning通过将可训练的连续提示嵌入(continuous prompt embeddi…

Javascript前端面试基础(八)

window.onload和$(document).ready区别 window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕 window.onload 触发时机:window.onload 事件会在整个页面&#xf…

【案例】区分是平行眼还是交叉眼,以及平行眼学习方法

案例一: 交叉眼:看到凸出的“灌水”,即文字好像显示在屏幕前面。PS:看的时候眼睛是斗鸡眼,容易疲劳 平行眼:看到凹陷的“灌水”,即文字好像显示在屏幕后面。PS:看的时候眼睛是平视…

前端JavaScript处理小数精度问题(最佳实践)

前言: 针对于小数精度问题,本次我们主要推荐两种方式,一种是简单的函数封装,一种是使用第三方库big.js。 方法一: 自封装函数搭配parseFloat和toFixed解决小数精度问题,仅适用于解决一般性小数精度问题&…

Java面试八股之简述spring的自动装配

简述spring的自动装配 Spring框架的自动装配(Autowiring)是一种机制,它允许Spring IoC容器自动满足Bean的依赖关系,而无需显式指定依赖注入的方式。这极大地简化了配置,并有助于减少配置错误。 Spring支持多种自动装…

硅纪元视角 | 苹果AI训练数据大曝光,坚持用户隐私第一

在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…

鲁迅曾经说过?现在没有中间派!以后也没有!——早读(逆天打工人爬取热门微信文章解读)

今天用了AI的风格模方,鲁迅的,开头那一小段改写,大家觉得如何? 引言Python 代码第一篇 续上第二篇 十点读书 “新型不孝”正在蔓延,很多父母浑然不知,还逢人就炫耀子女有出息结尾 引言 最近 我发觉自己的作…

手摸手教你撕碎西门子S7通讯协议02--socket连接

1、S7协议通讯流程回顾 1)建立Socket连接:进行TCP三次握手 这里是指要建立socket的tcp连接,是tcp连接而不是udp连接,tcp连接是可靠连接,tcp连接就是要有稳定的IP地址,它是通过字节方式进行通讯&#xff…

OpenSSL SSL_connect: Connection was reset in connection to github.com:443

OpenSSL SSL_connect: Connection was reset in connection to github.com:443 目录 OpenSSL SSL_connect: Connection was reset in connection to github.com:443 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

云计算 华为云服务

配置虚拟私有云 云平台架管理 跳板机配置 ansible 管理主机 dnf install -y ansible-core glibc-langpack-zh ssh-keygenchmod 0400 /root/.ssh/id_rsa ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.1.125 ansible --version 代理 Yum 仓库 dnf install -y nginx vim /et…

MySQL使用教程 最最最实用的零基础教程 直接从安装开始教!!!!

数据构成了我们日益数字化的社会基础。想象一下,从移动应用和银行系统到搜索引擎,再到如 ChatGPT 这样的先进人工智能聊天机器人,这些工具若没有数据支撑,将寸步难行。你有没有好奇过这些海量数据都存放在哪里呢?答案正…

虚拟现实辅助工程技术在电气安全培训中的变革力量

近年来,随着数字化进程的不断加快,虚拟现实辅助工程(VAE)技术在各行各业中的应用愈发广泛。在电气安全培训领域,虚拟现实辅助工程技术正逐渐成为一种具有变革力量的工具。这项技术的引入不仅为电气工作者提供了更为安全…

会计财务公司代理小程序源码系统 带手机端 完整的源代码包以及搭建部署教程

系统概述 会计财务公司代理小程序源码系统是一款专为会计财务公司量身定制的小程序解决方案。该系统结合了财务管理、代理记账、税务筹划等核心功能,旨在帮助企业提高工作效率,优化客户服务体验。通过这款小程序,企业可以为客户提供更加便捷…