在 Ansible 中使用變量


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

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

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

你涵蓋什麼?

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

先決條件

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

1. Ansible 控制器節點(本例中為 Ubuntu 20.04)和一個或兩個目標節點。

2.熟悉Ansible的基礎知識並編寫腳本。

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

使用 Ansible

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

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

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

變量

Ansible 中使用的變量與其他編程語言中的變量非常相似。該變量可以從 playbook 文件訪問,傳遞給 CLI,或與“register”關鍵字一起使用以存儲任務的返回值。通過指定一個值並在模塊參數、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.example.com proxy_state=present

web2.example.com proxy_state=absent

# Variables defined for the entire group.

[London:vars]

cdn_host=london.times.example.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. 回放:這個變量是在回放級別定義的。

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

結論是

在本教程中,您了解了 Ansible 中使用的不同類型的變量。事實上,如果以正確的方式使用它們,它們可以非常有助於使您的代碼更加靈活和易於理解。