ansible中可以给task或playbook打tags,从而实现运行playbook中指定tag的task

Ansible中的tags

ansible中tag有以下几种定义:

  • always:该任务会一直被执行,除非用–skip-tags指定了该标签
  • never:除非–tags指定了该标签,否则都不会执行。–tags never 执行标记always和never的任务
  • 自定义tag

--tags/–skip-tags指令参数:

  • always/never/自定义tag
  • tagged:执行所有有标签的task,但不包括带never的task
  • untagged:执行所有没有标签的task和带always的task

看一个样例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@manager test-tags]# cat debug-tags.yaml
---
- name: test tags
hosts: all
tasks:
- name: test untagged
debug:
msg: "no tag"

- name: test tag always
debug:
msg: "always tag"
tags:
- always

- name: test tag never
debug:
msg: "never tag"
tags:
- never

- name: test tag customer
debug:
msg: "tagged tag"
tags:
- test-tagged

不指定–tags和–skip-tags

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@manager test-tags]# ansible-playbook -i hosts debug-tags.yaml

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test untagged] ***************************************************************************************************
ok: [10.100.235.228] => {
"msg": "no tag"
}

TASK [test tag always] *************************************************************************************************
ok: [10.100.235.228] => {
"msg": "always tag"
}

TASK [test tag customer] ***********************************************************************************************
ok: [10.100.235.228] => {
"msg": "tagged tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

指定–tags always

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@manager test-tags]# ansible-playbook -i hosts debug-tags.yaml --tags always

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test tag always] *************************************************************************************************
ok: [10.100.235.228] => {
"msg": "always tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

指定–tags never

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@manager test-tags]# ansible-playbook -i hosts debug-tags.yaml --tags never

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test tag always] *************************************************************************************************
ok: [10.100.235.228] => {
"msg": "always tag"
}

TASK [test tag never] **************************************************************************************************
ok: [10.100.235.228] => {
"msg": "never tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

指定–tags tagged

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@manager test-tags]# ansible-playbook -i hosts debug-tags.yaml --tags tagged

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test tag always] *************************************************************************************************
ok: [10.100.235.228] => {
"msg": "always tag"
}

TASK [test tag customer] ***********************************************************************************************
ok: [10.100.235.228] => {
"msg": "tagged tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

指定–tags untagged

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@manager test-tags]# ansible-playbook -i hosts debug-tags.yaml --tags uptagged

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test tag always] *************************************************************************************************
ok: [10.100.235.228] => {
"msg": "always tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

指定–skip-tags 自定义tag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@manager test-tags]# ansible-playbook -i hosts debug-tags.yaml --skip-tags test-tagged

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test untagged] ***************************************************************************************************
ok: [10.100.235.228] => {
"msg": "no tag"
}

TASK [test tag always] *************************************************************************************************
ok: [10.100.235.228] => {
"msg": "always tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

定义多个tag

定义多个tags

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@manager test-tags]# cat debug-tags.yaml
---
- name: test tags
hosts: all
tags:
- xadocker
tasks:
- name: test untagged
debug:
msg: "no tag"

- name: test tag
debug:
msg: "mytag"
tags:
- mytag

- name: test tag tag2
debug:
msg: "mytag mytag2"
tags:
- mytag
- mytag2

在剧本中定义tag

上面都是在tasks中定义tag,其实还可以在剧本中定义tag,此时该剧本中的所有task都会继承该tag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@manager test-tags]# cat debug-tags.yaml
---
- name: test tags
hosts: all
tags:
- xadocker
tasks:
- name: test untagged
debug:
msg: "no tag"

- name: test tag customer
debug:
msg: "tagged tag"
tags:
- test-tagged

测试运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@manager test-tags]# ansible-playbook -i hosts debug-tags.yaml --tags uptagged

PLAY [test tags] *******************************************************************************************************

PLAY RECAP *************************************************************************************************************

[root@k8s-master test-tags]# ansible-playbook -i hosts debug-tags.yaml --tags tagged

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test untagged] ***************************************************************************************************
ok: [10.100.235.228] => {
"msg": "no tag"
}

TASK [test tag customer] ***********************************************************************************************
ok: [10.100.235.228] => {
"msg": "tagged tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

[root@k8s-master test-tags]# ansible-playbook -i hosts debug-tags.yaml --tags xadocker

PLAY [test tags] *******************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [10.100.235.228]

TASK [test untagged] ***************************************************************************************************
ok: [10.100.235.228] => {
"msg": "no tag"
}

TASK [test tag customer] ***********************************************************************************************
ok: [10.100.235.228] => {
"msg": "tagged tag"
}

PLAY RECAP *************************************************************************************************************
10.100.235.228 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0