ansible - 有没有更好的方法来重组没有“include_tasks”的剧本并同时运行任务?
问题描述
我需要一种方法来加快我的剧本,也许是更好的逻辑重组。它现在按顺序运行。任务很简单——从 AWX 运行将备份 VM 列表的 playbook。
我在 AWX 额外变量中提供了一个虚拟机列表:
backupList:
- vmName: VM1
backupAge: 2d
- vmName: VM2
backupAge: 5d
- vmName: VM3
backupAge: 1d
backupDirectory: /vmfs/volumes/NFS_BACKUPS
第一个剧本很简单:
- name: Process VM backup here
include_tasks: processBackup.yml
vars:
vm_name: "{{ item.vmName }}"
backupAge: "{{ item.backupAge }}"
with_items: "{{ backupList }}"
它通过使用“include_tasks”调用第二个剧本来读取额外的变量并循环,其中所有功能都被写入:克隆虚拟机,复制到 NFS 服务器并确保我们保留定义数量的备份副本。
基本上使用不同的 VM 名称和备份时间执行相同的一组任务。在这种配置中,它是按顺序执行的,需要很长时间,尤其是复制到备份服务器。
所以,我想知道是否有更好的方法来重构代码以同时为每个 VM 名称运行任务?
解决方案
这是我最终得到的解决方案,它适用于我的示例。我在 AWX 清单中创建了一组名为“backup”的主机,其中包含我需要备份的那些 VM 的主机名的 IP。我从模板中移动了额外的变量并将它们放在组中的每个主机下,所以它看起来像这样(每个 IP 的值不同):
---
vmName: VM1
backupAge: 2d
backupDirectory: /vmfs/volumes/NFS_BACKUPS
现在,当 ansible 迭代抛出“备份”组中的主机列表时,它也可以访问自己的变量。另外,在模板中启用分叉后,我获得了 ansible 的自然线程功能。
我的第二个剧本没有改变,但第一个剧本(又名驱动程序)发生了一些变化——我不再需要“<code>with_items”了:
- name: Backup VMs to NFS server
hosts: backup
gather_facts: no
tasks:
- name: Process VM backup here
include_tasks: processBackup.yml
vars:
vm_name: "{{ vmName }}"
backupAge: "{{ backupAge }}"
delegate_to: localhost
希望它会帮助某人:)
推荐阅读
- python - 应用于 Pandas 系列的 Json_normalize 在“str”和“int”实例之间返回“>”不支持
- spring-boot - 使用 DataSource 时获得过多的角色连接
- python - 带有自定义文件名的气流记录?
- oracle - oracle online recovery 不会改变归档的数据库
- c++ - CMake 包含/源路径有效配置
- java - 是否可以使用 Java 反射从注入的 DEX 中获取应用程序的类对象?
- python - 删除标点符号后从文本文件中打印唯一单词列表,并找到最长的单词
- ios - 为什么我的导航控制器的动画类型会发生变化?
- python - 二分搜索在我的 python 代码中不起作用
- linux - 如何将命令的输出获取到变量中?