文章目录
ansible系列文章
ansible学习系列之tags的使用
ansible学习系列之顺利启动后台程序
ansible学习系列之make模块的使用
ansible学习系列之become的使用
ansible学习系列之lineinfile模块的使用
场景
最近一段时间,准备使用Ansible编写批量部署脚本,比如多主机批量部署程序,并实现批量启动、终止程序等功能。那怎么在一个role
里面就可以实现这些要求呢?那么这个时候可以考虑tags
来实现这种情况。
环境
软件 | 版本 |
---|---|
Ansible | 2.9.4 |
Python | 2.7.5 |
Centos | 7 |
原因
在一个比较大的ansible-playbook
里面,如果要实现某部分脚本的话,ansible
提供了Tags
这个属性来进行划分。详细的文档可以查看官方文档里面的 playbooks_tags。
尝试
接下来就是进行一些试验。
编写Role
脚本
我这里是写测试样例,所以role
是tagTest
,项目层级的话,是以下:
tagTest
├── tasks
│ ├── file2.yml
│ ├── file.yml
│ └── main.yml
这里展示具体的文件内容:
[root@namenode01 tasks]# cat file.yml
- name: test1
shell: echo test1
tags:
- test1
- name: test2
shell: echo test2
tags:
- test2
[root@namenode01 tasks]# cat file2.yml
- name: test1
shell: echo test1-1
tags:
- test1
- name: test3
shell: echo test3
tags:
- test3
[root@namenode01 tasks]# cat main.yml
- import_tasks: file.yml
when: ansible_os_family == "RedHat"
- import_tasks: file2.yml
when: ansible_os_family == "RedHat"
tags:
- test1
[root@namenode01 tasks]# pwd
/etc/ansible/roles/tagTest/tasks
使用不同标签进行测试
使用test1
标签进行测试
-
脚本
[root@namenode01 ansible-script]# ansible-playbook -i hosts_test2 --tags test1 test-tag.yml --verbose
-
结果
Using /etc/ansible/ansible.cfg as config file PLAY [test] ******************************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************* ok: [172.168.63.59] ok: [172.168.63.61] ok: [172.168.63.60] TASK [tagTest : test1] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test1", "delta": "0:00:00.063203", "end": "2020-04-13 15:38:03.050230", "rc": 0, "start": "2020-04-13 15:38:02.987027", "stderr": "", "stderr_lines": [], "stdout": "test1", "stdout_lines": ["test1"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test1", "delta": "0:00:00.065364", "end": "2020-04-13 15:38:03.080510", "rc": 0, "start": "2020-04-13 15:38:03.015146", "stderr": "", "stderr_lines": [], "stdout": "test1", "stdout_lines": ["test1"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test1", "delta": "0:00:00.058939", "end": "2020-04-13 15:38:03.962310", "rc": 0, "start": "2020-04-13 15:38:03.903371", "stderr": "", "stderr_lines": [], "stdout": "test1", "stdout_lines": ["test1"]} TASK [tagTest : test1] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test1-1", "delta": "0:00:00.063451", "end": "2020-04-13 15:38:04.472465", "rc": 0, "start": "2020-04-13 15:38:04.409014", "stderr": "", "stderr_lines": [], "stdout": "test1-1", "stdout_lines": ["test1-1"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test1-1", "delta": "0:00:00.064136", "end": "2020-04-13 15:38:04.532075", "rc": 0, "start": "2020-04-13 15:38:04.467939", "stderr": "", "stderr_lines": [], "stdout": "test1-1", "stdout_lines": ["test1-1"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test1-1", "delta": "0:00:00.059969", "end": "2020-04-13 15:38:05.368457", "rc": 0, "start": "2020-04-13 15:38:05.308488", "stderr": "", "stderr_lines": [], "stdout": "test1-1", "stdout_lines": ["test1-1"]} TASK [tagTest : test3] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.062303", "end": "2020-04-13 15:38:05.896648", "rc": 0, "start": "2020-04-13 15:38:05.834345", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.066197", "end": "2020-04-13 15:38:05.936347", "rc": 0, "start": "2020-04-13 15:38:05.870150", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.059126", "end": "2020-04-13 15:38:06.799436", "rc": 0, "start": "2020-04-13 15:38:06.740310", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} PLAY RECAP ********************************************************************************************************************************************************* 172.168.63.59 : ok=4 changed=3 unreachable=0 failed=0 172.168.63.60 : ok=4 changed=3 unreachable=0 failed=0 172.168.63.61 : ok=4 changed=3 unreachable=0 failed=0
使用test2
标签进行测试
-
脚本
[root@namenode01 ansible-script]# ansible-playbook -i hosts_test2 --tags test2 test-tag.yml --verbose
-
结果
Using /etc/ansible/ansible.cfg as config file PLAY [test] ******************************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************* ok: [172.168.63.61] ok: [172.168.63.59] ok: [172.168.63.60] TASK [tagTest : test2] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test2", "delta": "0:00:00.063807", "end": "2020-04-13 15:36:40.430624", "rc": 0, "start": "2020-04-13 15:36:40.366817", "stderr": "", "stderr_lines": [], "stdout": "test2", "stdout_lines": ["test2"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test2", "delta": "0:00:00.063950", "end": "2020-04-13 15:36:40.432991", "rc": 0, "start": "2020-04-13 15:36:40.369041", "stderr": "", "stderr_lines": [], "stdout": "test2", "stdout_lines": ["test2"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test2", "delta": "0:00:00.060464", "end": "2020-04-13 15:36:41.352903", "rc": 0, "start": "2020-04-13 15:36:41.292439", "stderr": "", "stderr_lines": [], "stdout": "test2", "stdout_lines": ["test2"]} PLAY RECAP ********************************************************************************************************************************************************* 172.168.63.59 : ok=2 changed=1 unreachable=0 failed=0 172.168.63.60 : ok=2 changed=1 unreachable=0 failed=0 172.168.63.61 : ok=2 changed=1 unreachable=0 failed=0
使用test3
标签进行测试
-
脚本
[root@namenode01 ansible-script]# ansible-playbook -i hosts_test3 --tags test1 test-tag.yml --verbose
-
结果
Using /etc/ansible/ansible.cfg as config file PLAY [test] ******************************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************* ok: [172.168.63.59] ok: [172.168.63.61] ok: [172.168.63.60] TASK [tagTest : test3] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.062268", "end": "2020-04-13 15:37:50.524353", "rc": 0, "start": "2020-04-13 15:37:50.462085", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.063547", "end": "2020-04-13 15:37:50.563405", "rc": 0, "start": "2020-04-13 15:37:50.499858", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.061710", "end": "2020-04-13 15:37:51.493069", "rc": 0, "start": "2020-04-13 15:37:51.431359", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} PLAY RECAP ********************************************************************************************************************************************************* 172.168.63.59 : ok=2 changed=1 unreachable=0 failed=0 172.168.63.60 : ok=2 changed=1 unreachable=0 failed=0 172.168.63.61 : ok=2 changed=1 unreachable=0 failed=0
不使用标签进行测试
-
脚本
[root@namenode01 ansible-script]# ansible-playbook -i hosts_test2 test-tag.yml --verbose
-
结果
Using /etc/ansible/ansible.cfg as config file PLAY [test] ******************************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************* ok: [172.168.63.61] ok: [172.168.63.59] ok: [172.168.63.60] TASK [tagTest : test1] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test1", "delta": "0:00:00.063505", "end": "2020-04-13 15:40:12.165152", "rc": 0, "start": "2020-04-13 15:40:12.101647", "stderr": "", "stderr_lines": [], "stdout": "test1", "stdout_lines": ["test1"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test1", "delta": "0:00:00.084014", "end": "2020-04-13 15:40:12.175715", "rc": 0, "start": "2020-04-13 15:40:12.091701", "stderr": "", "stderr_lines": [], "stdout": "test1", "stdout_lines": ["test1"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test1", "delta": "0:00:00.080854", "end": "2020-04-13 15:40:13.160343", "rc": 0, "start": "2020-04-13 15:40:13.079489", "stderr": "", "stderr_lines": [], "stdout": "test1", "stdout_lines": ["test1"]} TASK [tagTest : test2] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test2", "delta": "0:00:00.069887", "end": "2020-04-13 15:40:13.678837", "rc": 0, "start": "2020-04-13 15:40:13.608950", "stderr": "", "stderr_lines": [], "stdout": "test2", "stdout_lines": ["test2"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test2", "delta": "0:00:00.065877", "end": "2020-04-13 15:40:13.738946", "rc": 0, "start": "2020-04-13 15:40:13.673069", "stderr": "", "stderr_lines": [], "stdout": "test2", "stdout_lines": ["test2"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test2", "delta": "0:00:00.070286", "end": "2020-04-13 15:40:14.603479", "rc": 0, "start": "2020-04-13 15:40:14.533193", "stderr": "", "stderr_lines": [], "stdout": "test2", "stdout_lines": ["test2"]} TASK [tagTest : test1] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test1-1", "delta": "0:00:00.069873", "end": "2020-04-13 15:40:15.180646", "rc": 0, "start": "2020-04-13 15:40:15.110773", "stderr": "", "stderr_lines": [], "stdout": "test1-1", "stdout_lines": ["test1-1"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test1-1", "delta": "0:00:00.070462", "end": "2020-04-13 15:40:15.211153", "rc": 0, "start": "2020-04-13 15:40:15.140691", "stderr": "", "stderr_lines": [], "stdout": "test1-1", "stdout_lines": ["test1-1"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test1-1", "delta": "0:00:00.062694", "end": "2020-04-13 15:40:16.162865", "rc": 0, "start": "2020-04-13 15:40:16.100171", "stderr": "", "stderr_lines": [], "stdout": "test1-1", "stdout_lines": ["test1-1"]} TASK [tagTest : test3] ********************************************************************************************************************************************* changed: [172.168.63.59] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.066313", "end": "2020-04-13 15:40:16.691095", "rc": 0, "start": "2020-04-13 15:40:16.624782", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} changed: [172.168.63.61] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.066483", "end": "2020-04-13 15:40:16.740898", "rc": 0, "start": "2020-04-13 15:40:16.674415", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} changed: [172.168.63.60] => {"changed": true, "cmd": "echo test3", "delta": "0:00:00.059252", "end": "2020-04-13 15:40:17.580180", "rc": 0, "start": "2020-04-13 15:40:17.520928", "stderr": "", "stderr_lines": [], "stdout": "test3", "stdout_lines": ["test3"]} PLAY RECAP ********************************************************************************************************************************************************* 172.168.63.59 : ok=5 changed=4 unreachable=0 failed=0 172.168.63.60 : ok=5 changed=4 unreachable=0 failed=0 172.168.63.61 : ok=5 changed=4 unreachable=0 failed=0
结果
都已经跑通,从上面的测试我们可以得到以下几点:
- 如果只是在
tasks
里面的某个细节文件里面指定了tag
,并且脚本执行的时候,有指定特定的tag
,就会根据tag
只执行对应的脚本; tag
存在继承关系,作用域大的角色会覆盖作用域小的角色。即如果在main.yml
指定了某个文件为某个tag
,那某个文件里面的脚本都会执行,而不会根据文件里面那个tag
来进行过滤;- 如果没有指定tag,则全部脚本都会执行;
总结
使用ansible
编写批量部署的脚本,很节省时间。如果大家有弄过运维,特别是机器数一多,如果不断登录再执行操作,会很痛苦的。ansible
提供了不错的处理手段。我建议大家可以学一下,很有好处的。
参考文档
随缘求赞
如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以左上角点击关注