文章目錄
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
提供了不錯的處理手段。我建議大家可以學一下,很有好處的。
參考文檔
隨緣求贊
如果我的文章對大家產生了幫忙,可以在文章底部點個贊或者收藏;
如果有好的討論,可以留言;
如果想繼續查看我以後的文章,可以左上角點擊關注