在 Ansible 中使用變量

Ansible 只是一個開源 IT 引擎,用於自動化遠程系統管理任務,例如供應任務、服務編排和應用程序部署,以及許多其他 IT 任務。

Ansible 是無代理的,因為不需要在目標節點上安裝任何軟件。 它有一個名為inventory 的文件,用於獲取它必須管理的節點的信息。

Ansible 使用 playbook 來描述自動化作業,而 playbook 使用 YAML,這是一種非常簡單的語言,易於人類理解、閱讀和編寫。 YAML 是一種人類可讀的數據序列化語言,經常用於配置文件。 但它可以用於存儲數據的許多應用程序中。 因為 YAML 是人類可讀的格式,所以即使是 IT 基礎設施支持人員也可以閱讀劇本並根據需要進行故障排除。

我們將涵蓋什麼?

在本教程中,我們將探索 Ansible 中使用的變量,並回顧這些變量在 Ansible 劇本中的一些用例。

以前的要求

要執行本教程中的各種示例,必須滿足以下要求:

1. Ansible 控制器節點(Ubuntu20.04 在我們的例子中)和一兩個目標節點。

2. 基本了解Ansible,編寫劇本。

如果你剛開始學習 Ansible,我們建議你先開始學習 Vagrant,然後使用 Vagrant 搭建一個基本的本地測試環境。 本實驗必須包含一個控制器節點和兩個目標節點。

Ansible 操作

Ansible 通過連接到目標節點並向它們發送稱為“Ansible 模塊”的小程序來工作。 之後,Ansible 運行這些模塊(通過 SSH)然後刪除它們。 不需要服務器、守護進程或數據庫,您的模塊庫可以存儲在任何計算機上。

管理節點是監督整個劇本如何執行的控制節點。 它是您從中操作配置的節點。 清單文件中提供了應運行 Ansible 模塊的主機列表。 管理節點通過 SSH 連接,在主機系統上運行小模塊,並安裝產品或軟件。

Ansible 的美妙之處在於它會在您安裝模塊後成功刪除它們。 它連接到主機系統,執行指令,如果安裝成功,則刪除複製到主機然後執行的代碼。

Ansible 變量

Ansible 中使用的變量和任何其他編程語言中的變量都非常相似。 變量可以來自劇本文件,可以傳遞給 CLI,或者我們可以使用“註冊”關鍵字來存儲任務的返回值。 您可以在模塊參數中的任何位置使用變量,在 p 中,使用 'when' 語句,當然也可以在循環內部通過給它一個值並使用它。 可以圍繞變量的值放置條件,並且劇本可以相應地使用它們。

有一些規則使變量名有效,例如它必須以字母開頭並且僅由字母、數字和下劃線組成。

劇本中的變量

我們可以通過多種方式定義變量以在 Ansible 任務中使用它們:

1. 從命令行:運行 ansible-playbook 命令時使用“--extra-vars”選項:

                      $ ansible-playbook sample.yml --extra-vars "my_vars=bar"

                    

2. 同樣,包含變量列表的文件 (JSON/YAML) 可以傳遞為:

                      $ ansible-playbook sample.yml --extra-vars "@my_vars_file.json"

                    

“my_vars_file.json”文件與劇本位於同一位置。

3. 通過引入“vars”部分,可以在主劇本中列出變量:

                      ---

- hosts: web

vars:

my_var2: my_val2

tasks:

# Display "Variable ‘my_var2’ is set to ‘my_val2’".

- debug: msg="Variable ‘my_var2’ is set to {{ my_var2 }}"

                    

4. 與上麵類似,我們可以使用 'vars_file' 部分來指定包含變量的文件:

                      ---

- hosts: web

vars_files:

- my_vars.yml

tasks:

# Display "Variable ‘my_var1’ is set to ‘my_val1’".

- debug: msg="Variable ‘my_var1’ is set to {{ my_var1 }}"

                    

庫存文件中的變量

在這種方法中,變量是在主機或組級別內聯指定的。 但是,Ansible 不建議使用清單文件來存儲變量。 請參考以下示例:

                      #Host-specific variables (inline definition).

[London]

web1.googlesyndication.com proxy_state=present

web2.googlesyndication.com proxy_state=absent

# Variables defined for the entire group.

[London:vars]

cdn_host=london.times.googlesyndication.com

compute_val=96
                    

註冊變量

註冊變量可用於存儲任務/命令在運行時返回的值,然後可用於其他任務。 例子:

                      ---

- hosts: all

gather_facts: no

become: false

tasks:

- name: Check the user name

ansible.builtin.shell: /usr/bin/whoami

register: login

- name: Display the user name using the output from previous task

debug: msg="Logged in as user {{ login.stdout }}"

                    

變量範圍由設置變量的位置決定。

它們被定義在三個方面:

1. 全局——這些變量是從命令行或通過 Ansible 配置文件設置的。

2. Game:這個變量是在遊戲級別定義的。

3. 主機:這些變量由清單、數據收集或任務在主機組和/或單個主機上定義。

結論

在本教程中,我們了解了 Ansible 中使用的各種類型的變量。 事實上,如果使用得當,它們對於提高代碼的靈活性和可理解性非常有用。

相關文章