標籤基本上是附加到任務、角色、戲劇等的元數據。使用標籤具有節省時間和簡化運行和調試劇本的任務的巨大優勢。它還使腳本更有條理和健壯。
你涵蓋什麼?
本指南解釋瞭如何在 Ansible 劇本中使用標籤。我還看到了一些基本示例,展示了標籤可以根據需要執行的操作。
你需要什麼?
與之前的實驗一樣,運行本教程中顯示的示例需要滿足以下要求:
1. Ansible 應安裝在控制器節點上(本例中為 Ubuntu 20.04)。
2、你應該對Ansible是乾嘛的,怎麼寫playbook有一個基本的了解(當然你需要知道什麼是playbook)。
如果你剛剛開始學習 Ansible,我建議先學習 Vagrant 以及如何使用它來搭建一個基本的本地測試環境。設置由一個控制器節點和兩個目標節點組成的基本實驗室後,您可以運行這些示例。
Ansible標籤要求
通常您可能想要運行劇本的特定部分而不是整個劇本。這對於非常大的腳本非常有用。在這種情況下,標籤在劇本中用於運行或跳過任務。這是通過兩步方法完成的:
1. 將需要的標籤添加到目標任務中。
2. 根據選項卡選項運行或跳過任務。
可以為任務、塊、角色或整個劇集定義標籤。您很快就會在後面的示例中看到,“tags”關鍵字用於定義標籤。
使用標籤
1. 從一個基本的例子開始
在最基本的形式中,一項任務可以有一個或多個標籤。同樣,公共標籤可以鏈接到多個任務。例如,考慮以下劇本:
--- - hosts: all gather_facts: yes become: true tasks: - name: Update the system repository information (‘apt-get update’) ansible.builtin.apt: update_cache: yes tags: ubuntu - name: Run the equivalent of ‘apt-get dist-upgrade’ to upgrade the system as a separate step ansible.builtin.apt: upgrade: dist tags: [ ubuntu, distup ] - name: Install the apache web server and ntp program ansible.builtin.apt: name: - apache2 - ntp state: present tags: - ntp - webservers - ubuntu - name: Restart apache ansible.builtin.service: name: apache2 state: restarted tags: - ubuntu - RestartApache
給定的劇本有四個任務。
1. 第一個任務只有一個標籤,而其他任務有多個標籤。
2. “ubuntu”標籤是與所有四個任務關聯的公共標籤。
如果您對多個任務使用標籤(標籤重用),則鏈接到該標籤的所有任務都將運行。為此,請在命令行中指定“–tags”標誌。
假設您運行了一次上一個劇本。 它只是重新啟動 Apache 服務而不做任何其他事情。在這種情況下,您應該按以下方式運行您的劇本 (my-playbook.yml):
$ ansible-playbook myplaybook.yml -i /path/to/inventory/file --tags RestartApache
2.跳過劇本中的標籤
如果你想跳過任務的執行,Ansible 提供了“–skip-tags”參數。 劇本的其餘部分運行良好。在前面的例子中,讓我們忽略升級系統的任務(任務:2)。為此,將“ansible-playbook”命令更改為:
$ ansible-playbook myplaybook.yml -i /path/to/inventory/file --skip-tags distup
3. ‘每次’ 和一個“從不”的標籤
Ansible 有兩個保留標籤用於兩個特定目的。這些是“從不”和“總是”標籤。 “always”標籤的目的是始終運行與其鏈接的任務。 “never”標籤與“always”標籤相反,跳過與之相關的任務。以下示例演示了這一點。
--- - hosts: all gather_facts: yes become: true tasks: - name: The Ansible 'always' tag example debug: msg: "I will be always shown here" tags: - always - name: The Ansible 'never' tag example debug: msg: "I will never shown up until you specifically allow me" tags: - never
在之前的劇本中,第一個任務設置為始終運行,但第二個任務設置為從不運行。
如果要跳過標記為“始終”的任務,則必須在命令行中將此行為明確指定為“–skip-tags always”。之前的劇本允許我們跳過第一個任務。
$ ansible-playbook myplaybook.yml -i /path/to/inventory/file --skip-tags always
同樣,標有“never”的任務將不會運行,除非標有“–tags never”。 第二個任務可以這樣完成:
$ ansible-playbook myplaybook.yml -i /path/to/inventory/file --tags never
結論是
擁有結構良好的劇本對於自動化過程的靈活性很重要。與許多其他方法一樣,Ansible 提供標籤來實現此功能。