在本次的章節裡,凍仁將簡單地介紹 Ansible 基本觀念和怎麼安裝、設定 Ansible。
在 Ansible 的世界裡,我們會透過 inventory 檔案來定義有哪些 Managed node (被控端),並藉由 SSH 和 Python 進行溝通。
換句話說,當 Control Machine (主控端) 可以用 SSH 連上 Managed node,且被連上的機器裡有預載 Python 時,Ansible 就可以運作了!
-
Control Machine
指的是我們主要會在上面操作 Ansible 的機器,凍仁喜歡用主控端來形容它。它可以是我們平時用的電腦、手機 1 或機房裡的某一台機器,也可以把它想成是一般 Lab 練習裡的Workstation
。 -
Managed node
則是被 Ansible 操縱的機器,凍仁喜歡用被控端來形容它。在很多的 Lab 練習裡會用Server
來稱呼它。
在一般的情況下,我們只需在 Control Machine 裡安裝 Ansible 即可,因為 GNU/Linux 和 macOS 的 Managed node 都早已預載了 Python 2.5 以上的版本,且開通了 SSH 連線的條件。
若想拿 Ansible 來管 Windows 了話,則需進行較多的設置。大家可參考凍仁先前分享的 Ansible - Roles & Windows 簡報和官方文件。
礙於文章篇幅,這裡只會提到凍仁較常用的環境,其餘的部份還請參考官方文件和 Ansible 台灣使用者社群所維護的 Ansible 安裝教學。
目前最新釋出的 Ansible 版本為 v2.2.0.0。
- 安裝
add-apt-repository
必要套件。
$ sudo apt-get install -y python-software-properties software-properties-common
- 使用 Ansible 官方的 PPA 套件來源。
$ sudo add-apt-repository -y ppa:ansible/ansible; sudo apt-get update
- 安裝 Ansible。
$ sudo apt-get install -y ansible
- 新增
epel-release
第三方套件來源。
$ sudo yum install -y epel-release
- 安裝 Ansible。
$ sudo yum install -y ansible
- 請先安裝 homebrew,已安裝者請略過。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安裝 Ansible。
$ brew install ansible
Ansible 近來的釋出速度很快,若想追求較新的版本可改用 Pip 的方式進行安裝,較不建議初學者使用。
- 需請先安裝 pip,已安裝者請略過。
# Debian, Ubuntu
$ sudo apt-get install -y python-pip
# CentOS
$ sudo yum install -y python-pip
# macOS
$ sudo easy_install pip
- 升級 pip。
$ sudo pip install -U pip
- 安裝 Ansible。
$ sudo pip install ansible
正常在 Managed Node 我們都會安裝 OpenSSH server 和開通連線權限以便於遠端管理,OpenSSH 這邊凍仁就不多加贅述了。
Python 的部份呢?雖說現代的 GNU/Linux 大多都早已內建了,可 Ansible 預設使用的 Python 是 2.x 的版本,這在 Ubuntu 16.04 預載 Python 3.4 的環境上需做些調整,詳情請參閱 Python 3 Support | Ansible Documentation 一文。2
-
Ubuntu.
$ sudo apt-get install -y openssh-server python2.7
-
CentOS.
$ sudo yum install -y openssh-server python
-
macOS: 在 macOS 10.11 裡,我們只需使用內建的 OpenSSH server 和 Python 即可,詳情請參考 Apple 官方的 OS X El Capitan: 允許遠端電腦取用您的 Mac 一文進行設置。
我們可以藉由 ansible.cfg
來設定預設的 inventory 檔案的路徑、遠端使用者名稱和 SSH 金鑰路徑等相關設定。
▲ hostfile
參數即將在 Ansible 2.8.0 被移除,若您是使 Ansible 2.4.0 以上的版本,請改用 inventory
,詳情請參考官方文件。
- 安裝好 Ansible 後,我們可以在
/etc/ansible/
的目錄底下找到 Ansible 的設定檔。 - 通常我們較偏愛把
ansible.cfg
和hosts
這兩個檔案與其它的Playbooks
放在同個專案目錄底下,然後透過版本控制系統 (例如 Git) 把它們一起儲存起來,以實現 Ansible 的 Infrastructure as Code!
inventory
就單字本身有詳細目錄、清單和列表的意思。在這裡我們可以把它當成是一份主機列表,我們可透過它對定義每個 Managed Node 的代號、IP 位址、連線相關資訊和群組。
- 若有對 Control Machine 本機操作的需求,建議於
/etc/ansible/hosts
補上 local 的設定。
# For root user.
$ /bin/echo -e "[local]\nlocalhost ansible_connection=local" >> /etc/ansible/hosts
# For sudo user.
$ sudo su -c '/bin/echo -e "[local]\nlocalhost ansible_connection=local" >> /etc/ansible/hosts'
當已上的設置都完成了,您可以試著在終端機裡用 Ansible 呼叫本機印出 Hello World
。
$ ansible localhost -m command -a 'echo Hello World.'
localhost | SUCCESS | rc=0 >>
Hello World.
歡迎來到 Ansible 的世界!:D
Footnotes
-
相信在這個智慧型手機裡盛行的時代,要在手機裡裝個 Python 和 OpenSSH 一定不是什麼難事 (笑)。在台灣還有人整合了 Ansible 與聊天機器人 (Chatbot),這樣出門在外只要有手機和網路就可以遠端工作了!(詳情請參考從 DevOps 到 ChatOps:War Room、Bots 與 Automation 的簡報) ↩
-
Ansible 已在 2.2 時加入了 Python 3 Support 的功能,感謝友人 @maxsolar 的 feedback,這下凍仁可以少寫一篇文章了! ↩