在直接使用 ansible 时候有-B -p 参数可以启用异步操作,然后返回一个 job_id 值

[root@master ansible]# ansible node1 -B  -P   -m yum -a "name=ansible" -vv
Using /etc/ansible/ansible.cfg as config file
META: ran handlers
192.168.77.129 | SUCCESS => {
"ansible_job_id": "23974611070.37468",
"changed": true,
"finished": ,
"results_file": "/root/.ansible_async/23974611070.37468",
"started":
} [root@master ansible]# ansible node1 -m async_status -a "jid=23974611070.37468"
192.168.77.129 | SUCCESS => {
"ansible_job_id": "23974611070.37468",
"changed": false,
"finished": ,
"msg": "",
"rc": ,
"results": [
"ansible-2.3.1.0-1.el6.noarch providing ansible is already installed"
]
}

playbook 也是可以指定参数启用异步的。

# asynctest.yml
--- - hosts: node1
tasks:
- shell: sleep 100 && hostname
async: 100
poll: 0
register: result - debug: var=result - async_status: jid={{ result.ansible_job_id }}
register: job_result
until: job_result.finished
retries: 30

那么在 ansible api 里对于 ad-hoc 和 playbook 怎么启用这个异步任务的,不然页面有时候要卡好久在那的。

def run_model(self, module_name, module_args, task_time=None, poll=None):
"""
run module from andible ad-hoc.
module_name: ansible module_name
module_args: ansible module args
task_time: 这个任务执行时间的上限值。即任务执行所用时间如果超出这个时间,则认为任务失败。这个需要大于0,等于 0 的时候不支持异步(默认值)。
poll: 任务异步执行时轮询的时间间隔。如果poll为0,就相当于一个不关心结果的任务。
"""
self.ips_cov_str() if task_time and poll:
play_source = dict(
name="Ansible Play",
hosts=self.ips,
gather_facts='no',
tasks=[dict(action=dict(module=module_name, args=module_args), async=task_time, poll=poll)]
)
else:
play_source = dict(
name="Ansible Play",
hosts=self.ips,
gather_facts='no',
tasks=[dict(action=dict(module=module_name, args=module_args))]
)
play = Play().load(play_source, variable_manager=self.variable_manager, loader=self.loader)
  .......

ansibleAPI怎么做异步的更多相关文章

  1. 用 Python 3 的 async / await 做异步编程

    前年我曾写过一篇<初探 Python 3 的异步 IO 编程>,当时只是初步接触了一下 yield from 语法和 asyncio 标准库.前些日子我在 V2EX 看到一篇<为什么 ...

  2. 使用过redis做异步队列么,你是怎么用的?有什么缺点?

    Redis设计主要是用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列. 它有几个阻塞式的API可以使用,正是这些阻塞式的API让其有能力做消息队列: 另外,做消息队列的其他特性例如FIF ...

  3. asp.net的web程序适用后台线程做异步任务

    耗时的任务适用异步线程来完成. 像记录日志,发邮件,发短信,通知其他系统等.可以进行封装,让后台线程来完成,不过最好适用消息队列,redis缓存等中间件,适用定时任务来做.可以保证消息不丢失. usi ...

  4. Celery-一个会做异步任务,定时任务的芹菜

    Celery 分布式任务队列 同步与异步 比如说你要去一个餐厅吃饭,你点完菜以后假设服务员告诉你,你点的菜,要两个小时才能做完,这个时候你可以有两个选择 一直在餐厅等着饭菜上桌 你可以回家等着,这个时 ...

  5. Django项目中使用celery做异步任务

    异步任务介绍 在写项目过程中经常会遇到一些耗时的任务, 比如:发送邮件.发送短信等等~.这些操作如果都同步执行耗时长对用户体验不友好,在这种情况下就可以把任务放在后台异步执行 celery就是用于处理 ...

  6. vue---结合elementui做异步数据分页

    使用vue+elementui来请求数据做分页: <el-col :span="24" class="toolbar pageBar"> <e ...

  7. spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)

    一,druid数据库连接池的功能? 1,Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 2,druid的官方站: http ...

  8. spring boot:使用log4j2做异步日志打印(spring boot 2.3.1)

    一,为什么要使用log4j2?     log4j2是log4j的升级版,     升级后更有优势:     性能更强/吞吐量大/支持异步     功能扩展/支持插件/支持自定义级别等     这些优 ...

  9. HDCMS做异步加载!

    控制器的写法: //ajax 请求新闻列表 public function ajaxnewsList(){ $data = Q('sum'); $newsList = M('xinwen')-> ...

随机推荐

  1. Java对象创建模式

    创建Java对象时,对于可为空的属性,创建对象的时候有3种模式:重叠构造器模式.JavaBeans模式.Builder模式(推荐).Stream模式(推荐).                     ...

  2. [并发编程] -- 内存模型(针对JSR-133内存模型)篇

    并发编程模型 1.两个关键问题 1)线程之间如何通信 共享内存程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信 消息传递程之间没有公共状态,线程之间必须通过发送消息来显式进行通信 2) ...

  3. Redis Desktop Manager安装

    Windows安装: 1.下载安装包 官网下载地址:https://redisdesktop.com/pricing 官网下载需要付费使用 再此附上一个免费的破解版本,绿色安全可用 链接:https: ...

  4. 字符编码笔记:ASCII,Unicode 和 UTF-8个人理解

    一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位(字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作 ...

  5. 获取DataGridview中某列的所有数据

    /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam& ...

  6. Invalid RNPermission 'ios.permission.xxx'. should be one of: ( )

    原因可能是配置配置问题, 我碰到的是Android上完美运行,iOS报错,原因是前期用的Android开发,iOS的配置项没有配完整 按照官方配置一遍 https://github.com/react ...

  7. python可变与不可变数据类型+深浅拷贝

    转自:https://www.cnblogs.com/miaomiaokaixin/p/11497813.html 一:学习内容 python3中六种数据类型 python赋值 python浅拷贝 p ...

  8. this指向面试题两则

    面试题1 let len = 10; function fn() { console.info(this.len) } fn(); // A let Person = { len: 5, say: f ...

  9. std:ios:sync_with_stdio (false)以及局限性

    如何在输入输出上提高一下效率emmmm #include<iostream> #include<stdio.h> #include<stdlib.h> #inclu ...

  10. Button基本用语

    1.self.btn2 = Button(root,image = photo,command = self.login) 使用 image 图片作为按钮,command 作为响应 2.self.bt ...