新手上路

前言

現在你已經閱讀了 Installation 安裝指南並安裝了Ansible.是時候通過一些命令開始深入瞭解Ansible了.

我們最先展示的並非那強大的集配置,部署,自動化於一身的playbook. Playbooks 相關內容將在另一章節中講述.

本章節講述如何進行初始化.一旦你有了這些概念,請去閱讀 Introduction To Ad-Hoc Commands 以獲取更多細節,然後你就能去深入playbook並探索它最有趣的部分.

遠端連線概述


在我們開始前要先理解Ansible是如何通過SSH與遠端伺服器連線是很重要的.

Ansible 1.3及之後的版本預設會在本地的 OpenSSH可用時會嘗試用其進行遠端通訊.這會啟用ControlPersist(一個性能特性),Kerberos,和在~/.ssh/config中的配置選項如 Jump Host setup.然而,當你使用Linux企業版6作為主控機(紅帽企業版及其衍生版如CentOS),其OpenSSH版本可能過於老舊無法支援ControlPersist. 在這些作業系統中,Ansible將會退回並採用 paramiko (由Python實現的高質量OpenSSH庫). 如果你希望能夠使用像是Kerberized SSH之類的特性,煩請考慮使用Fedora, OS X, 或 Ubuntu 作為你的主控機直到相關平臺上有更新版本的OpenSSH可供使用,或者啟用Ansible的“accelerated mode”.參見 Accelerated Mode.

在Ansible 1.2 及之前的版本,預設將會使用 paramiko. 本地OpenSSH必須通過-c ssh 或者 在配置檔案中設定.

你偶爾會遇到不支援SFTP的裝置.雖然這很少見,但你會有概率中獎.你可以通過在配置檔案(Ansible的配置檔案)中切換至 SCP模式來與之連結.

說起遠端裝置,Ansible會預設假定你使用 SSH Key(我們推薦這種)但是密碼也一樣可以.通過在需要的地方新增 –ask-pass選項 來啟用密碼驗證.如果使用了sudo 特性,當sudo需要密碼時,也同樣適當的提供了–ask-sudo-pass選項.

也許這是常識,但也值得分享:任何管理系統受益於被管理的機器在主控機附近執行.如果在雲中執行,可以考慮在使用雲中的一臺機器來執行Ansible.

作為一個進階話題,Ansible不止支援SSH來遠端連線.連線方式是外掛化的而且還有許多本地化管理的選項諸如管理 chroot, lxc, 和 jail containers.一個叫做‘ansible-pull’的模式能夠反轉主控關係並使遠端系統通過定期從中央git目錄檢出 並 拉取 配置指令來實現背景連線通訊.

你的第一條命令

現在你已經安裝了Ansible,是時候從一些基本知識開始了. 編輯(或建立)/etc/ansible/hosts 並在其中加入一個或多個遠端系統.你的public SSH key必須在這些系統的``authorized_keys``中:

192.168.1.50
aserver.example.org
bserver.example.org

這裡有個節點設定檔案(inventory file)將會在 Inventory檔案 中得到深入說明. 我們假定你使用SSH Key來授權.為了避免在建立SSH連線時,重複輸入密碼你可以這麼 做:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

(根據你的建立方式,你也許希望使用Ansible的 --private-key 選項,通過指定pem檔案來代替SSH Key來授權) 現在ping 你的所有節點:

$ ansible all -m ping

Ansible會像SSH那樣試圖用你的當前使用者名稱來連線你的遠端機器.要覆寫遠端使用者名稱,只需使用’-u’參數. 如果你想訪問 sudo模式,這裡也有標識(flags)來實現:

# as bruce
$ ansible all -m ping -u bruce
# as bruce, sudoing to root
$ ansible all -m ping -u bruce --sudo
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce --sudo --sudo-user batman

(如果你碰巧想要使用其他sudo的實現方式,你可以通過修改Ansible的配置檔案來實現.也可以通過傳遞標識給sudo(如-H)來設定.) 現在對你的所有節點執行一個命令:

$ ansible all -a "/bin/echo hello"

恭喜你!你剛剛通過Ansible連線了你的所有節點.很快你就會閱讀更多的關於現實案例 Introduction To Ad-Hoc Commands 並探索可以通過不同的模組做什麼以及研究Ansible的playbook語言

Playbooks .Ansible不只是能執行命令,它同樣也擁有強大的配置管理和部署特性.雖然還有更多內容等待你的探索,但你基礎設施已經能完全工作了!

公鑰認證

Ansible1.2.1及其之後的版本都會預設啟用公鑰認證.

如果有個主機重新安裝並在“known_hosts”中有了不同的key,這會提示一個錯誤資訊直到被糾正為止.在使用Ansible時,你可能不想遇到這樣的情況:如果有個主機沒有在“known_hosts”中被初始化將會導致在互動使用Ansible或定時執行Ansible時對key資訊的確認提示.

如果你想禁用此項行為並明白其含義,你能夠通過編輯 /etc/ansible/ansible.cfg or ~/.ansible.cfg來實現:

[defaults]
host_key_checking = False

或者你也可以通過設定環境變數來實現:

$ export ANSIBLE_HOST_KEY_CHECKING=False

同樣注意在paramiko 模式中 公鑰認證 相當的慢.因此,當使用這項特性時,切換至’SSH’是推薦做法.

Ansible將會對遠端系統模組參數記錄在遠端的syslog中,除非一個任務或者play被標記了“no_log: True”屬性,稍後解釋. 在主控機上啟用基本的日誌功能參見 Ansible的配置檔案 文件 並 在配置檔案中設定’log_path’.企業使用者可能也對 Ansible Tower 感興趣.

塔提供了非常實用資料庫日誌.它使一次次向下鑽取並檢視基於主機,項目,和特定的結果整合為可能———— 同時提供了圖形和 RESTful API.

See also

Inventory檔案
More information about inventory
Introduction To Ad-Hoc Commands
Examples of basic commands
Playbooks
Learning Ansible’s configuration management language
Mailing List
Questions? Help? Ideas? Stop by the list on Google Groups
irc.freenode.net
#ansible IRC chat channel