術語表

下面是一系列的 Ansible 文件中的術語。

在主介面檢視文件,瞭解這些術語的上下文環境,不過這裡是一個好的資源測試你對 Ansible 元件的瞭解和更好的理解他們是如何組合起來的。你可能在想回顧 Ansible 知識的時候看看這裡,在郵件中出現一些術語的時候參考一下這個文件。

動作(Action)

一個動作屬於一個任務的一部分,指定執行的模組,然後傳遞參數給此模組。每個任務之一一個動作,但是它可以有不同的參數。

Ad Hoc

指的是使用 /usr/bin/ansible 執行 Ansible 直接執行一些命令,而不是使用 /usr/bin/ansible-playbook 執行劇本。一個 ad-hoc 命令例子,可以是在你的基礎設施裡面重啟50臺機器。任何你可以做的東西, ad-hoc 都可以實現通過寫一個劇本, 劇本肯定也組合了其它的一些操作。

Async

指的是一個任務配置為執行在後臺,而不是等它完成。如果你有一個很長的任務要執行,而且時長可能超出 SSH 登入時長, 那麼執行那個任務在 async 方式比較有意義。Async 方式可以每隔一段時間 poll 一次,等待此任務完成。它可以調整為把任務踢出去,然後不再理會它,以便後來使用。Async方式可以在 /usr/bin/ansible 和 /usr/bin/ansible-playbook下面。

Callback Plugin

指一些使用者編寫的程式碼可以從 Ansible 執行結果獲取資料,並做出一些處理。 一些提供的在 Github 項目上的事例實現了自定義日誌,發郵件,甚至播放聲音效果。

Check Mode

指的是執行 Ansible 使用 --ckeck 選項,但是系統本身卻不作出任何改變,僅僅輸出可能發生的改變。這就像在其它系統上叫做 “dry run”的方式, 使用者應該被警告因為這個方式沒考慮到命令失敗的問題,或者衝突影響。使用這個可以知道哪些東西可能會發生,但是這不是一個好的替代 staging 環境。

Connection Type, Connection Plugin

Ansible 預設用可插撥的庫和遠端系統通訊。 Ansible 支援天然的 OpenSSH (‘ssh’) 或者 Python 實現的 ‘paramiko’ 庫。如果你在使用最近的 Ansible 版本,最好使用 OpenSSH ,同時支援 Kerberos 和 jump hosts。這在文件開始部分就有提到。也有一些加速方式的連線類型,但是必須 bootstrapped 基於SSH類型的連線,但是它非常快,就像在本地系統上執行一樣。使用者也可以寫他們自己的連線類型外掛。

Conditionals

一個條件式是根據一個表示式正確或錯誤判斷是否在一個機器上執行給定的任務。 Ansible 的條件表示式由 ‘when’ 提供,在playbook文件裡面有討論。

Diff Mode

--diff``標識可以傳遞給 Ansible 來展示模板檔案如何改變的,或者使用 ``--check 模式時它們可能發生的改變 。這些 diffs 統一為diff格式。

Facts

Facts 是發現遠端節點的資訊。當它們被用在模板的時候, facts只能被引用,而不能被設定。Facts是當執行 plays 時候執行內部的’setup’模組自動收集的。你不需要明確的呼叫 setup 模組,它自己執行,但是當你想節省時間的時候你可以禁止它。為了方便使用者轉向其他系統配置工具, fact 模組可以拉取 facts 從 Chef的’ohai’ 和 Puppet的’facter’工具。

Filter Plugin

過濾外掛式大多數使用者從來不需要了解的東西。這允許創在新的 Jinja2 過濾,而這隻對那些知道什麼是 Jinja2 過濾的人有幫助。如果你需要他們,你可以從 API docs 部分學習如何寫他們。

Forks

Ansible 與遠端節點交流是通過並行的機制,並行機制的方式可以通過傳遞 ``–forks``參數設定,或者在配置檔案裡面編輯。預設是保守的5個執行緒。如果你有足夠的記憶體,你可以很容易的設定為50或者更多值。

Gather Facts (Boolean)

上面已經提到了Facts。有時候在執行多個 playbook ,可能不想收集一些fact ,而且以後也不會用到這些值。在playbook裡面設定 gather_facts:False 指示跳過收集 facts。

Globbing

Globbing 是一個一種基於通配符的方式挑選許多主機,而不是明確指定主機的名字,或者它們的組名。例如 ,使用 “www*”,來匹配所有以 “www” 開頭的所有主機。這個理念直接被吸收進 Func 。除此之外,不同的 set 操作也可以通過 globbing 實現。

Group

組由幾個主機組成,可以方便的當做一個目標看待,同時可以共享變數。

Group Vars

group_vars 檔案位於一個目錄下面,同時在 inventory 旁邊,有一個可選的檔名在每個組後面。這是一個方便的位置來存放變數,提供給每個組,由其是複雜的資料結構,因此這些變數不需要嵌入在 inventory 檔案或 playbook 檔案裡面。

Handlers

Handler 僅僅是普通的任務在Ansible playbook裡面(請參考tasks)。但是僅僅當任務包含 “notify” 指令和指示它改變了一些東西的時候才執行。例如,如果一個配置檔案改變了,然後任務引用這個配置檔案模板通知伺服器重啟 handler 。這意味著服務可以被反彈僅僅他們需要重啟的時候。Handler 不僅僅可以用於重啟服務,但是重啟服務是最通用的用法。

Host

一個host 只是簡單的 Ansible 管理的遠端機器。它們可以被分配私有的變數,可以被組織為一個組。所有的組有可以訪問一個名字,也可以是IP地址,如果他們在預設的SSH埠不能訪問,可以指定一個一個可選的埠號

Host Specifier

每一個 Play 對映為一系列的 tasks (可以是定義的role,purpose,或系統指令) 到一些系統的集合

“hosts:” 指令在每個play中通常叫做主機指定。

它可以挑選一個系統,一個或更多組,甚至一些主機在其他組不在某個組裡面,但是在另外一個組裡面。

Host Vars

就像”Group Vars”,一個名稱為 “host_vars/” 的目錄在 inventory 檔案旁,可以在 invetory 檔案的主機名後面包含這個檔案,使用 YAML 格式。這提供一個方便的位置分配變數給這個主機而不要在 inventory 檔案裡面嵌入太多變數。Host Vars 檔案還可以用於定義複雜的在 inventory 檔案裡面不斷出現的資料結構。

Lazy Evaluation

總的來說, Ansible 評估任何變數在 playbook 內容在最新的可能的時間裡,也就是意味著如果你定義了一個數據結構,這個資料結構自身也可以定義變數值在裡面,然後每件事情就像你期望的那樣工作。 這也意味著 變數字元串可以包含其它的變數在字元串裡面。

Lookup Plugin

一個查詢外掛是從外界得到資料進入 Ansible 。這些東西就像 “with_items” ,一個基礎的迴圈外掛,但是也有其它的查詢外掛就像 “with_file”, 從檔案載入資料,甚至有一些逡巡環境變數, DNS 文字記錄,或者鍵值儲存。 查詢外掛也可以被 templates 訪問 ,{{ lookup('file','/path/to/file') }}.

Multi-Tier

IT 系統不是一次在同一時間只管理一個系統,而是在多個系統之間互動,一組系統,在一個定義好的順序裡面。例如,一個 web server 可能需要在資料庫伺服器之前更新,web server的部分內容又要在 THAT 資料庫服務之後更新,同時不同的負載均衡器和監控伺服器也需要被聯絡到。 Ansible 看待系統為整個工作流和拓撲,而不是簡單的一次一個系統。

Idempotency

改變類的命令僅僅在他們需要使用的時候才被使用,最好描述系統的狀態而不是如何到達系統某個狀態的過程。打個比方,從美國的卡羅萊納州到加利福尼亞州包括駕駛很長一段距離的車,但是如果我是在阿拉斯加州,則需要乘坐地鐵。 Ansible的資源就像你說,“把我放到加利福尼亞”然後決定如何到達那裡。如果你已經在加利福尼亞,沒有什麼會發生,然後他會讓你知道什麼都沒有發生,不需要改變什麼東西。

Includes

Playbook 檔案可以包含其它的 plays,任務列表也可以擴充套件在其它檔案的外部任務,就像處理器。 Include 可以被參數化的,也就是裝載檔案可以傳遞變數。例如,一個Include 表演設定Wordpress 部落格站點,需要傳遞”user”參數,然後這個表演(play)可以 include 多於一次的部落格站點,例如叫做 “alice” 和 “bob”

Inventory

一個描述主機和組的 Ansible 檔案。Inventory 可以通過 “Inventory Script” 提供,有時也叫做 “External Inventory Script”

Inventory Script

一個簡單的從外部資源尋找主機,主機組的成員,和變數資訊的程式 – 可以是個 SQL 資料庫,一個 CMDB 解決方案,或者是 LDAP。這個概念來自 Puppet (叫”External Nodes Classifier”),工作方式也是類似的。

Jinja2

Jinja2 是 Ansible 模板的首選語言。它非常簡單,很容易閱讀和書寫。

JSON

Ansible 從遠端機器上返回的資料使用 JSON 類型。這使得模組可以使用任何語言編寫,而不僅僅是Python。

Library

許多模組的集合供 /usr/bin/ansible 或 Ansible Playbook 使用。

Limit Groups

通過傳遞 --limit somegroup 參數給 ansible 或 ansible-playbook ,命令可以限制為一些主機的子集 。 例如這可以使目標為全部的伺服器到只允許一個伺服器執行 playbook 。

Local Connection

通過在 playbook 中使用 “connection:local” ,或者傳遞 “-c local” 給 /usr/bin/ansible ,這指明瞭我們正在管理本地主機而不是遠端機器。

Local Action

local_action 指令在 playbook 意味著給予的步驟僅僅會在本地機器上執行, 但是這變數 ‘{{ ansible_hostname }}’可以被傳遞到遠端機器引用。這可以被用於觸發器,例如,rsync 操作。

Loops

通常來說, Ansible 不是一個程式語言。它跟喜歡聲明,儘管不同的結果像 “with_items” 使得指定的任務重複的實驗多個 items 在一個列表裡面。特定的模組,例如 yum 和 apt ,對這更喜歡,可以安裝多個包,然後加速了配置的總時間。

Modules

Module 是 Ansible 執行遠端機器的單元。模組可以使用通過 /usr/bin/ansible 或者 /usr/bin/ansible-playbook 。模組可以通過任何語言編寫包括 Perl,Bash,Ruby,但是使用Python 可以利用一些有用的社群庫程式碼。模組僅僅返回一些 JSON 格式資料或簡單的 key=value 集合。一旦模組在遠端執行之後,他們就被移除了,隱私不需 daemon 長時間執行。Ansible 把模組的集合看做 ‘library’

Notify

等級改變的事件和通知處理任務需要在 play 的最後執行。如果一個 handler 被多個任務通知,它會仍然僅僅執行一次。 Handler僅僅按照列表執行一次,而不是他們被notified 的順序。

Orchestration

一些軟體自動化系統使用這個單詞意味著不同的事情。 Ansible使用它作為一個導演執導一個曲子。一個數據中心或雲架構充滿多個系統,表演很多角色 – web servers,database servers,負載均衡器,監控系統, 持續整合系統等。在具體表演過程中,必須要安排好特定的步驟。一些系統執行一些步驟,然後其它系統,然後先前的系統執行更多的步驟。同時,傳送郵件也可能是需要的到 web service 聯絡人。 Ansible 編排了所有過程的模型。

paramiko

預設, Ansible 管理機器使用 SSH。而 Ansible 預設使用的 python 提供的庫叫 paramiko。 paramiko庫非常的快和很容易管理,渴望支援 Kerberos 或 jump Host 的使用者轉向使用 SSH 作為連線類型了。在他們的 playbook裡面使用 “-c ssh” 選項即可。

Playbooks

Playbooks 是一種語言,Ansible 用於編排,配置,管理和部署吸引。他們被叫做 Playbooks 的部分原因是依據它行為的類比,使用它應該是一件有趣的事情。他們不是 工作書。

Plays

一個 playbook 就是一系列的 plays。一個 play 就是在一些主機中挑選指定的主機和主機組,然後執行任務在這些主機上,定義這些主機的角色和他們會怎麼樣表演。

Pull Mode

Pull 模式是節點每隔 N 分鐘檢查特定的主機。它使用 ansible-pull 程式,pull模式有很多選擇性。Ansible-pull 在任務計劃中檢查配置指令熟悉怒,使用連線外掛,在本地管理機器。

Push Mode

push 模式是 Ansible 的預設模式。事實上,這也不算是個模式 – 你不去想它的時候 ansible 就是這麼工作的。Push 方式通過複雜的編排程序,而不要等到節點檢查,對節點有個很好的粒度控制。

Register Variable

Ansible 執行的結果可以儲存在一個變數裡面以便模板或條件語句使用,用於定義這個變數的關鍵字叫做 ‘register’。你可以定義無限制的變數名用於 registertion.

Resource Model

Ansible 模組工作在資源上。例如,file 模組會挑選指定的檔案然後確保資源的屬性匹配指定的模型。例如,我們想改變 /etc/motd 的屬主為 ‘root’,如果它還沒設定為 root,或者設定許可權為‘0644’,如果還沒有設定為 0644 。資源模型是冪等性( ‘idemotent’ )意味著改變命令不會執行除非需要的時候,Ansible會把系統變為期望的狀態而不管當前的狀態是什麼。

Roles

一個 Role 可以包含特定的變數值,特定的任務,特定的觸發器等東西。因為 Role 的檔案結構,roles 可以是再次利用的單元,可以讓你在其它 playbooks 中共享一些行為。

Rolling Update

一次處理某組主機的 N 個節點,避免一次全部更新導致系統離線。 例如,在一個 500 節點的 web 拓撲裡,最好一次更新 10~20 臺機器一次。Ansible 中的 ‘seria’ 關鍵字控制 rolling updtae的池。預設是一次全部處理。OS 配置可以不使用 rolling update 模型,但是可以這麼做。

Runner

Ansible 核心的元件是 /usr/bin/ansible 指令,它背後有強大的力量,激發 playbook 中的每個任務。 Runner 一般是 Ansible 開發者經常談論的,但是它對使用者來說不是經常用到的詞彙。

Serial

參考 “Rolling Update”.

Sudo


Ansible 不要求一定用 root 登入,它是無守護程序模式的(這可能是個安全問題,在敏感的環境裡面)。 Ansible可以記錄一些執行 sudo 命令的操作,可以執行無密碼的和有密碼的 sudo。 一些操作不需要使用 sudo (像 scp 檔案傳輸)可以通過 Ansible 的 copy,template,和 fetch 模組實現。

SSH (Native)

OpenSSH 作為 Ansible 的傳輸被指定使用 “-c ssh”,這可以很有用當你想登陸通過 Kerberized SSH 或者 SSH jump hosts 等待。在 1.2.1版本,ssh被用作預設,之前使用 ‘paramiko’ 作為預設。使用一個客戶端 支援 ControlMaster 和 ControlPersist 是被推薦的對於管理大量主機。如果你不需要使用 Kerbers,jump hosts或者其它的特性, 選擇 paramiko 是不錯的選擇。Ansible 會發出警告,如果它沒有檢測到 ControlMaster/ControlPersist 相容性。

Tags

Ansible 允許給playbook裡面的資源通過自定義的關鍵字打上標籤,然後只執行與關鍵字一致的部分程式碼。 例如,可能有個完成的 OS 配置,然後特定的步驟標記為 “ntp” ,然後執行 “ntp” 步驟來重新配置時間伺服器資訊。

Tasks

Playbooks 包含 Tasks, Tasks 結合一個動作使用一個名稱和一些可選的關鍵字。處理器也是 tasks,但是他們是特殊的 tasks 不執行,除非他們被通知一個 tasks 報道的遠端吸引變化。

Templates

Ansible 很容易的傳輸檔案到遠端系統上面,但是它經常需要替換一些變數在其它的檔案裡面。變數可以來自 清單檔案,Host Vars, Group Vars,或者 Facts。Templates 使用 Jinja2 模板引擎同樣可以包含邏輯控制像迴圈和 if 語句。

Transport

Ansible 使用 “Connection Plugins” 定義可用的傳輸類型。這只是 Ansible 如何到達管理的系統。Rransports 包括 paramiko, SSH (using OpenSSH), 和 local.

When

一個可選的關鍵字來決定這個任務是不是應該指向,如果再 “when:” 關鍵字這裡的表示式是是不正確的,這個任務會被忽略。

Van Halen

沒有其它的原因,Michael 真的很喜歡他們,所有的 Ansible 版本代號都是以 Van Halen 的歌曲命名。

Vars (Variables)

和 Facts 相反, 變數是一些值,或字典,列表的名稱(可以是標量值–整數,布爾型,或字元串,字典,列表),然後變數可以應用在模板和劇本里面。他們是聲明的東西,不是獲取遠端系統的當前狀態或性質(這是Facts)

YAML

Ansible 不想強迫人們編寫程式語言的程式碼實現自動化基礎設施部署,所以 Ansible 使用YAML來定義劇本還配置語言和變數檔案。YAML很棒因為它有很少的語法,然後非常乾淨,容易瀏覽。對人來說,這是一個很好的資料格式的配置檔案,機器也可讀。YAML非常流行在動態語言社群,程式語言也有庫可用來序列化這種語言.

See also

常見問題
常問到的問題
Playbooks
Playbook 介紹
最佳實踐
最好的聯絡見習
User Mailing List
Have a question? Stop by the google group!
irc.freenode.net
#ansible IRC chat channel