首页 > 解决方案 > 按顺序导入多个剧本

问题描述

我在 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)

我怎样才能做到这一点?

标签: ansible

解决方案


根据您获得的数据动态创建剧本。例如(我不确定这是否是正确的顺序。如果不是,请满足您的需要。)

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 文件的生成。


推荐阅读