ansible - 按顺序导入多个剧本
问题描述
我在 playbook.yml 中有这个
- import_playbook: A.yml
- import_playbook: B.yml
- import_playbook: C.yml
主持人:
[hostA]
178.112.32.12
178.112.32.13
[hostC]
178.112.32.14
A.yml
- hosts:
- hostA
serial: 1
name: 'A'
roles:
- roles/roleA
B.yml
- hosts:
- hostA
serial: 1
name: 'B'
roles:
- roles/roleB1
- roles/roleB2
yml
- hosts:
- hostC
serial: 1
name: 'C'
roles:
- roles/roleC1
- roles/roleC2
- roles/roleC3
我想按主机ip(带序列号)顺序运行A、B和C playbook,即:
178.112.32.12 - roleA
178.112.32.12 - roleB1
178.112.32.12 - roleB2
178.112.32.14 - roleC1
178.112.32.14 - roleC2
178.112.32.14 - roleC3
and only after
178.112.32.13 - roleA
178.112.32.13 - roleB1
178.112.32.13 - roleB2
178.112.32.14 - roleC1
178.112.32.14 - roleC2
178.112.32.14 - roleC3
基本上,我想按导入顺序和一个主机运行剧本(第一个 *.12,第二个:*.13)
我怎样才能做到这一点?
解决方案
根据您获得的数据动态创建剧本。例如(我不确定这是否是正确的顺序。如果不是,请满足您的需要。)
shell> cat pb-list.txt
178.112.32.12 - roleA
178.112.32.12 - roleB1
178.112.32.12 - roleB2
178.112.32.14 - roleC1
178.112.32.14 - roleC2
178.112.32.14 - roleC3
178.112.32.13 - roleA
178.112.32.13 - roleB1
178.112.32.13 - roleB2
178.112.32.14 - roleC1
178.112.32.14 - roleC2
178.112.32.14 - roleC3
下面的剧本
- hosts: localhost
tasks:
- set_fact:
pbl: "{{ lookup('file', 'pb-list.txt').splitlines()|list }}"
- copy:
dest: playbook.yml
content: |
{% for line in pbl %}
- hosts: {{ line.split('-').0|trim }}
roles: roles/{{ line.split('-').1|trim }}
{% endfor %}
给出可以做你想做的事情的剧本
shell> cat playbook.yml
- hosts: 178.112.32.12
roles: roles/roleA
- hosts: 178.112.32.12
roles: roles/roleB1
- hosts: 178.112.32.12
roles: roles/roleB2
- hosts: 178.112.32.14
roles: roles/roleC1
- hosts: 178.112.32.14
roles: roles/roleC2
- hosts: 178.112.32.14
roles: roles/roleC3
- hosts: 178.112.32.13
roles: roles/roleA
- hosts: 178.112.32.13
roles: roles/roleB1
- hosts: 178.112.32.13
roles: roles/roleB2
- hosts: 178.112.32.14
roles: roles/roleC1
- hosts: 178.112.32.14
roles: roles/roleC2
- hosts: 178.112.32.14
roles: roles/roleC3
这会将您的问题减少到 pb-list.txt 文件的生成。
推荐阅读
- angular - Angular 8 / Typescript在调用数据时设置接口的属性
- spotify-scio - 如何处理自定义案例类的编码器
- math - 不使用 sqrt 计算二次方程的平方解
- excel - 无法将电子邮件移动到另一个文件夹错误 438 对象不支持此属性或方法
- google-chrome-extension - 安装后无法在 Edge 扩展中执行内容脚本
- ios - SwiftUI Segmented Picker 元素为灰色且禁用
- python-3.x - 使用 python 中的另一个列表取某些索引的平均值
- javascript - 对等体未使用 webrtc-swarm 在 WebRTC 中接收任何数据
- c++ - 从 C++ 文件中打印一定数量的行
- android-ndk - 如何在 jni 中获取作业的最后一个字符?