ansible簡介

leisurem發表於2016-04-19

[TOC] 本文簡要介紹ansible的一些情況,更為詳細的使用指南,會逐步分享。

簡介

ansible是一個自動化運維的工具,它可以方便的配置系統,部署軟體包,管理機器等等。 ansible可以讓你方便的在新搭建的測試環境上配置自己需要的基礎軟體,在客戶現場你可以通過ansible實現一建化安裝,作為自己的開發環境,ansible,可以讓你專注於開發,開發環境的配置僅需要改動配置檔案即可完成,而無需去手工執行各種管理複雜的安裝配置命令。 而與其它devops軟體相比,ansible顯得更為輕量化,無需配置client,由於使用python寫成,原始碼清晰易讀,不僅自帶一大批的模組,可以方便擴充套件,也支援第三方語言的擴充套件。

安裝

ansible支援多種形式安裝,作為一個軟體,它可以通過原始碼安裝,apt,yum,portage,pkg安裝,同時,它作為一個python包,支援pip和easy_install形式安裝。 ubuntu下安裝如下:

$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible

pip 安裝如下

$ sudo pip install ansible

清單

清單是ansible中的一個檔案列表檔案,用於指定管理配置哪些機器。 ansible的清單檔案通常位於/etc/ansible/hosts 一個常用的例子如下: > mail.example.com > [webservers] foo.example.com bar.example.com > [dbservers] one.example.com two.example.com three.example.com > ntp_server: acme.example.org

被管理的主機可以通過域名的形式直接指定,如mail伺服器,也可以通過分組的方式給出,如webservers和dbservers,別名的方式也是支援的,如ntpserver。

密碼有三種方式指定,一是配置無密碼登陸,二是通過ansible_ssh_pass在hosts檔案中指定,還有一種方式是執行命令時用-k的方式,要求輸入密碼。

命令列執行

ansible可以通過命令列的方式即時輸入命令管理叢集,也可以通過playbook 的方式批量化執行(有點兒像python,可以走repl也可以通過py檔案執行)

重啟

下面的命令可以重啟整個儲存伺服器叢集,按10個一組併發執行命令,如果叢集裡有30臺機器,就是分三批執行。 > $ ansible storageserver -a "/sbin/reboot" -f 10

任意命令

可以通過shell模組執行在指定的伺服器中執行任意命令,下面的命令會檢視所有raleigh機房中機器的終端. > $ ansible raleigh -m shell -a 'echo $TERM'

檔案操作

如前文提及,ansible中自帶了功能強大的各種模組,對於檔案操作,copy模組,file自然可以一展身手。

下面的命令,會把本地的hosts檔案拷貝到atlanta機房中的所有機器 $ ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"

下面的命令,會改名所有webserver中指定檔案的許可權 $ ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"

包管理

yum和apt都被ansible所支援,下面的命令分別會安裝acme1.5的版本,安裝acme最新版,解除安裝acme > $ ansible webservers -m yum -a "name=acme-1.5 state=present" $ ansible webservers -m yum -a "name=acme state=latest" $ ansible webservers -m yum -a "name=acme state=absent"

playbook

playbook是ansible中批量執行命令的檔案,基於yaml格式,類似於chef中的cookbook。 下面先用一個例子演示一下,更具體的會分幾篇文章來描述細節。

--- - hosts: webservers remote_user: root tasks: - name: test connection ping: remote_user: root

其中hosts表示對哪些主機進行操作,remote_user表示用什麼使用者來進行操作。 下面的tasks則是對任務的定義,name是獨一無人的一個任務名(如果有多個同名task,只執行第一個),接著是task的任務,這邊是執行ping命令,接下來是定義這個task執行用的身份,比如root。

後面會分章節,詳細介紹ansible。