基于Ansible剧本中标签的串行行为

  • 本文关键字:标签 Ansible 基于 ansible
  • 更新时间 :
  • 英文 :


我运行一个剧本,其中包含一个角色,并执行,所以它对主机文件中的第一个服务器运行一次,然后对主机文件中25%的服务器执行,最后,它对其余的服务器执行。

我想实现的是:

  • 如果我运行剧本没有任何标签或task1,它应该在所有服务器上运行一次。
  • 如果我用标签task2运行剧本,它会分批运行剧本(按照serial)。

目前,它将始终分批运行。

我有以下剧本:

剧本:

- hosts: all
serial:
- 1
- "25%"
- "100%"
roles:
- playbook2

playbook2角色:

- name: task 1
shell: [do something]
tags: task1
- name: task 2
shell: [do more]
tags: task2

您可以根据标签的内容模板serialomit,并使用特殊变量ansible_run_tags

你的serial参数,那么应该是

serial: "{{ ['1', '25%', '100%'] if 'task2' in ansible_run_tags else omit }}"

给定剧本:

- hosts: _nodes
gather_facts: no
serial: "{{ ['1', '25%', '100%'] if 'task2' in ansible_run_tags else omit }}"
tasks:
- debug:
tags:
- task2
- debug:
tags:
- task2

当不带标签运行时,它将在三个主机上产生:

PLAY [_nodes] ***********************************************************
TASK [debug] ************************************************************
ok: [node2] => 
msg: Hello world!
ok: [node3] => 
msg: Hello world!
ok: [node1] => 
msg: Hello world!
TASK [debug] ************************************************************
ok: [node2] => 
msg: Hello world!
ok: [node3] => 
msg: Hello world!
ok: [node1] => 
msg: Hello world!

当与--tags task2一起运行时,它将产生:

PLAY [_nodes] ***********************************************************
TASK [debug] ************************************************************
ok: [node2] => 
msg: Hello world!
TASK [debug] ************************************************************
ok: [node2] => 
msg: Hello world!
PLAY [_nodes] ***********************************************************
TASK [debug] ************************************************************
ok: [node3] => 
msg: Hello world!
TASK [debug] ************************************************************
ok: [node3] => 
msg: Hello world!
PLAY [_nodes] ***********************************************************
TASK [debug] ************************************************************
ok: [node1] => 
msg: Hello world!
TASK [debug] ************************************************************
ok: [node1] => 
msg: Hello world!

最新更新