是否可以在ansible中异步本地_操作?

是否可以在ansible中异步本地_操作?,ansible,Ansible,我用Ansible提供流浪机器。现在我希望playbook解压缩数据库转储,将其导入vm,然后重新压缩 在正常模式下,这不是什么大问题,但由于我的转储可能相当大,解压缩/压缩操作需要很多时间。我想使用这里描述的火忘法 这个想法是: 开火,忘掉垃圾堆 [执行所有其他操作,如软件包安装、配置和ecc] 回到帐篷里去 进口转储 点火并忘记卸载再压缩 如果我尝试使用本地_操作bunzip,它将因错误而死亡:意外错误:无法确定jid 是否可以执行异步本地任务 编辑 任务列表示例 # start async

我用Ansible提供流浪机器。现在我希望playbook解压缩数据库转储,将其导入vm,然后重新压缩

在正常模式下,这不是什么大问题,但由于我的转储可能相当大,解压缩/压缩操作需要很多时间。我想使用这里描述的火忘法

这个想法是:

开火,忘掉垃圾堆 [执行所有其他操作,如软件包安装、配置和ecc] 回到帐篷里去 进口转储 点火并忘记卸载再压缩 如果我尝试使用本地_操作bunzip,它将因错误而死亡:意外错误:无法确定jid

是否可以执行异步本地任务

编辑

任务列表示例

# start async unzip
- name: bunzip dump
    command: bunzip2 /vagrant/vagrant_provision/dump.sql.bz2
    async: 10000
    poll: 0
    register: bunzip_status

#[... do other things ...]

# connect back to unzip and wait for it to end
- name: Check for dump bunzip
    async_status: jid={{ bunzip_status.ansible_job_id }}
    register: bunzip_result
    until: bunzip_result.finished
    retries: 80

#[... Import db ...]

# Fire and forget dump recompression
  - name: Recompress dump
    command: bzip2 /vagrant/vagrant_provision/dump.sql
    async: 10000
    poll: 0
现在。。因为我用它来提供一个流浪环境,所以我通过将我的剧本和文件放在流浪共享文件夹中,并通过绝对路径引用它们,部分解决了这个问题,它起到了作用

但问题是:是否有可能将一个本地\u操作,甚至只是一个委托\u异步到


在这种情况下,使用local_操作来远程执行归档/取消归档允许我使用分配给vm的所有CPU 4和1来执行这些操作,并且我甚至可以在最终重新压缩期间关闭vm,而不必等待它完成。

我已经到了可以随时使用的程度后台/异步Ansible中的命令,以便我可以验证该命令是否正常运行

根据您所描述的内容,您需要想出一种方法,在达到步骤3时通知Ansible。为此,您可能需要创建一个Ansible可以查找的临时标志文件。所以,要做你描述的事情,我可能会做以下几点:

首先,我要创建一个包装器脚本来解压文件,只是为了让事情更干净一点。它将在bunzip完成时创建我提到的标志文件。下面是一个简单的例子:

#!/bin/bash
rm -f /tmp/bunzip.done
bunzip /path/to/file.bz2
touch /tmp/bunzip.done
exit
然后,我会在Ansible内的屏幕会话中执行此操作,就像这样,我在本例中使用sudo,因为我通常也会对特定用户执行sudo屏幕会话:

- name: invoke bunzip script
  local_action: command /usr/bin/screen -d -m sudo -u someuser /path/to/bzip_script.sh
  async: True
  poll: 0
在这一点上,你可以在Ansible内做任何你需要做的事情。一旦进入第3步,您将需要执行以下操作:

- name: wait for bunzip if it is still running
  local_action: wait_for path=/tmp/bunzip.done state=present

只要wait_for脚本返回时没有错误,此时您应该能够安全地引用bunzipped数据。等待默认值为300秒超时,因此如果预计bunzip需要更长时间,则可能需要增加该超时。

为什么要bunzip本地\u操作,而不是使用将文件解压缩到目标服务器的非归档模块?使用它之后,您不必重新压缩它。@Mxx我试图异步非归档模块,但出现错误,因此尝试使用命令。对我来说,使用unarchive或命令bunzip也是一样的。唯一的问题是,我的磁盘空间非常有限,未归档创建了另一个文件,而bzip在进程结束时只剩下一个文件。您知道Ansible有async_状态模块来检查异步任务吗?我从来没有想过使用screen查看正在发生的事情,这是一个聪明的想法,可以变得有用,特别是在测试剧本时。。。但在我看来,这并不是一种可行的做事方式。我更想知道这个工具的用途。