在本次的章節(jié)里,凍仁將簡(jiǎn)單地介紹 Ansible 基本觀念和怎么安裝、設(shè)定 Ansible。
在 Ansible 的世界里,我們會(huì)通過 inventory 檔案來定義有哪些 Managed node (被控端),并借由 SSH 和 Python 進(jìn)行溝通。
換句話說,當(dāng) Control Machine (主控端) 可以用 SSH 連上 Managed node,且被連上的機(jī)器里有預(yù)載 Python 時(shí),Ansible 就可以運(yùn)作了!
Control Machine
指的是我們主要會(huì)在上面操作 Ansible 的機(jī)器,凍仁喜歡用主控端來形容它。它可以是我們平時(shí)用的電腦、手機(jī) 1 或機(jī)房里的某一臺(tái)機(jī)器,也可以把它想成是一般 Lab 練習(xí)里的 Workstation
。
Managed node
則是被 Ansible 操縱的機(jī)器,凍仁喜歡用被控端來形容它。在很多的 Lab 練習(xí)里會(huì)用 Server
來稱呼它。
在一般的情況下,我們只需在 Control Machine 里安裝 Ansible 即可,因?yàn)?GNU/Linux 和 macOS 的 Managed node 都早已預(yù)載了 Python 2.5 以上的版本,且開通了 SSH 連線的條件。
若想拿 Ansible 來管 Windows 的話,則需進(jìn)行較多的設(shè)置。大家可參考凍仁先前分享的 Ansible - Roles & Windows 簡(jiǎn)報(bào)和官方文件。
礙于文章篇幅,這里只會(huì)提到凍仁較常用的環(huán)境,其余的部份還請(qǐng)參考官方文件和 Ansible 臺(tái)灣使用者社群所維護(hù)的 Ansible 安裝教學(xué)。
目前最新釋出的 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
請(qǐng)先安裝 homebrew,已安裝者請(qǐng)略過。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝 Ansible。
$ brew install ansible
Ansible 近來的釋出速度很快,若想追求較新的版本可改用 Pip 的方式進(jìn)行安裝,較不建議初學(xué)者使用。
需請(qǐng)先安裝 pip,已安裝者請(qǐng)略過。
# Debian, Ubuntu
$ sudo apt-get install -y python-pip
# CentOS
$ sudo yum install -y python-pip
# macOS
$ sudo easy_install pip
升級(jí) pip。
$ sudo pip install -U pip
安裝 Ansible。
$ sudo pip install ansible
正常在 Managed Node 我們都會(huì)安裝 OpenSSH server 和開通連線權(quán)限以便于遠(yuǎn)端管理,OpenSSH 這邊凍仁就不多加贅述了。
Python 的部份呢?雖說現(xiàn)代的 GNU/Linux 大多都早已內(nèi)建了,可 Ansible 預(yù)設(shè)使用的 Python 是 2.x 的版本,這在 Ubuntu 16.04 預(yù)載 Python 3.4 的環(huán)境上需做些調(diào)整,詳情請(qǐng)參閱 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 里,我們只需使用內(nèi)建的 OpenSSH server 和 Python 即可,詳情請(qǐng)參考 Apple 官方的 OS X El Capitan: 允許遠(yuǎn)端電腦取用您的 Mac 一文進(jìn)行設(shè)置。
我們可以借由 ansible.cfg
來設(shè)定預(yù)設(shè)的 inventory 檔案的路徑、遠(yuǎn)端使用者名稱和 SSH 金鑰路徑等相關(guān)設(shè)定。
/etc/ansible/
的目錄底下找到 Ansible 的設(shè)定檔。ansible.cfg
和 hosts
這兩個(gè)檔案與其它的 Playbooks
放在同個(gè)專案目錄底下,然后通過版本控制系統(tǒng) (例如 Git) 把它們一起儲(chǔ)存起來,以實(shí)現(xiàn) Ansible 的 Infrastructure as Code!inventory
就單字本身有詳細(xì)目錄、清單和列表的意思。在這里我們可以把它當(dāng)成是一份主機(jī)列表,我們可通過它對(duì)定義每個(gè) Managed Node 的代號(hào)、IP 位址、連線相關(guān)資訊和群組。
若有對(duì) Control Machine 本機(jī)操作的需求,建議于 /etc/ansible/hosts
補(bǔ)上 local 的設(shè)定。
# 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'
當(dāng)已上的設(shè)置都完成了,您可以試著在終端機(jī)里用 Ansible 呼叫本機(jī)印出 Hello World
。
$ ansible localhost -m command -a 'echo Hello World.'
localhost | SUCCESS | rc=0 >>
Hello World.
歡迎來到 Ansible 的世界!:D
1. 相信在這個(gè)智慧型手機(jī)里盛行的時(shí)代,要在手機(jī)里裝個(gè) Python 和 OpenSSH 一定不是什么難事 (笑)。在臺(tái)灣還有人整合了 Ansible 與聊天機(jī)器人 (Chatbot),這樣出門在外只要有手機(jī)和網(wǎng)絡(luò)就可以遠(yuǎn)端工作了!(詳情請(qǐng)參考從 DevOps 到 ChatOps:War Room、Bots 與 Automation 的簡(jiǎn)報(bào)) ?
2. Ansible 已在 2.2 時(shí)加入了 Python 3 Support 的功能,感謝友人 @maxsolar 的 feedback,這下凍仁可以少寫一篇文章了! ?
更多建議: