ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能,那麼除了ansible以外還有什麼自運維工具嗎?
答案是有的,好比安裝系統咱們使用過的PEX、cobbler,之後會學習的虛擬化系統,kvm、xen、vmwar,應用部署類的puppet、ansible、saltstack(中大型規模),命令執行類的ansible、fabric、ffunc/shell(中小型規模),ansible彙集以上部署和命令執行於一身,可以完整輕易的實現應用部署和批量命令功能,因此咱們今天來講一下ansible。
咱們能夠看到這是ansible的架構圖:
Ansible:Ansible核心程序。
HostInventory:記錄由Ansible管理的主機信息,包括端口、密碼、ip等。
Playbooks:「劇本」YAML格式文件,多個任務定義在一個文件中,定義主機須要調用哪些模塊來完成的功能。
CoreModules:核心模塊,主要操做是經過調用核心模塊來完成管理任務。
CustomModules:自定義模塊,完成核心模塊沒法完成的功能,支持多種語言。
ConnectionPlugins:鏈接插件,Ansible和Host通訊使用
ansible有兩種任務執行模式,和咱們bash shell差很少相對應,一種是ad-hoc模式,是一種點對點的,每次只能輸入一條語句,和咱們的command差很少,而另外一種是playbook,也就是劇本,和咱們的shell腳本差很少,都是單個的小命令,組合解決複雜的問題。
理論部分說了一大堆,那麼咱們的ansible怎麼搭建配置呢?
首先安裝:方式兩種。
1 yum安裝(方便快捷,不易錯)
yum install ansible –y
2 pip程序安裝(複雜先進,不易管理)
yum install python-pip
pip install ansible
而後,是咱們的配置方面,咱們發現咱們的ansible的配置文件和命令都不算多,並且很簡單的結構,而咱們的lib庫文件,各類py模塊文件數不勝數,當一個熟練掌握ansible的運維人員對複雜的運維環境管理時,能夠很輕鬆的調用。
查看/etc/ansible/文件夾下只有兩個文件和一個文件夾,其中一個文件夾爲roles(角色),當咱們作playbook(劇本)時,能夠給roles定製一些特殊用法,放入文件中去,咱們這裏只須要配置一個hosts文件便可,其餘默認就行,畢竟實驗環境,生產環境會有收集統計的數據來肯定某項的值爲多少,咱們在hosts文件中定義一個組,加入兩個成員。
vim /etc/ansible/hosts
[web]
172.17.254.112
172.17.254.113
加入以後咱們使得本機能夠免密登陸到這兩臺上
1 ssh-keygen -t rsa -P ''
2 ssh-copy-id root@172.17.254.112
ssh-copy-id root@172.17.254.113
而後咱們使用命令查看該組下的成員:ansible web --list-hosts
還可使用ping模塊,測試是否通訊:ansible web -m ping
下面咱們來介紹一下ansible的經常使用命令用法:
格式:ansible host-pattern [options]
options:
-a MODULE_ARGS 模塊的參數,若是執行默認COMMAND的模塊, 便是命令參數
-B SECONDS 後臺運行超時時間
-C 測試一下,並不會改變什麼,不過可能預測一些錯誤
-f FORKS 並行任務數,當主機多時,能夠適當調整
--list-hosts 查看當前組下主機信息
-m MODULE_NAME 調用模塊執行
-T TIMEOUT 指定ssh默認超時時間
-v[vvvv] 詳細信息,v的多少取決於信息的詳細程度
上面咱們看了那麼多選項,不過模塊的調用咱們仍是不瞭解的,那麼咱們-m 能夠跟那些模塊呢?
1 ping模塊,測試主機是否通
ansible all -m ping #all表明全部主機
2 command模塊,至關於bash執行命令同樣,不過不可使用管道符 "|"
ansible all -m command -a ‘ifconfig’
command還有一些經常使用的action:
chdir # 在執行命令以前,先切換到該目錄
-a 'chdir=/etc/nginx/ ls' #查詢/etc/nginx/文件夾下的文件
creates # 一個文件名,當這個文件存在,則該命令不執行,能夠用來作判斷
executable # 切換shell來執行命令,須要使用命令的絕對路徑
free_form # 要執行的Linux指令,通常使用Ansible的-a參數代替。
removes # 一個文件名,這個文件不存在,則該命令不執行,與creates相反的判斷
3 shell 模塊,在遠程主機上調用shell解釋器
ansible all -m shell -a 'cat /etc/passwd |grep root'
4 copy 模塊,複製文件到遠程主機,能夠改權限等
用法有兩種
1 複製本機文件到遠程主機
-a "src= dest= "
2 寫內容給遠程主機(-a 'content="hello word" dest=/PATH mode=644')
-a "content= dest= "
copy模塊有一些經常使用選項:
backup:在覆蓋以前,將源文件備份,備份文件包含時間信息。有兩個選項:yes|no
directory_mode:遞歸設定目錄的權限,默認爲系統默認權限
force:若是目標主機包含該文件,但內容不一樣,若是設置爲yes,則強制覆蓋,若是爲no,則只有當目標主機的目標位置不存在該文件時,才複製。默認爲yes
others:全部的file模塊(下一個模板)裏的選項均可以在這裏使用
5 file 模板設置文件屬性
建立目錄:-a 「path= state=directory」
建立連接文件:-a 「path= src= state=link」
刪除文件:-a 「path= state=absent」
選項:
force:須要在兩種狀況下強制建立軟連接,一種是源文件不存在,但以後會創建的狀況下;另外一種是目標軟連接已存在,須要先取消以前的軟鏈,而後建立新的軟鏈,有兩個選項:yes|no
group:定義文件/目錄的屬組 mode:定義文件/目錄的權限
owner:定義文件/目錄的屬主 path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效 src:被連接的源文件路徑,只應用於state=link的狀況
state:
directory:若是目錄不存在,就建立目錄
file:即便文件不存在,也不會被建立
link:建立軟連接
hard:建立硬連接
touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間
absent:刪除目錄、文件或者取消連接文件
6 fetch 從遠程主機拉文件
dest:用來存放文件的目錄
Src:在遠程拉取的文件,而且必須是一個file,不能是目錄
7 cron 管理cron計劃任務
經常使用用法:-m cron -a "name= minute= job= "
action: cron backup= # 若是設置,建立一個crontab備份 【yes|no】
cron_file= #若是指定, 使用這個文件cron.d,而不是單個用戶
crontab
day= #日應該運行的工做( 1-31, , /2, )
hour= # 小時 ( 0-23, , /2, )
minute= #分鐘( 0-59, , /2, )
month= # 月( 1-12, , /2, )
weekday # 周 ( 0-6 for Sunday-Saturday,, )
job= #指明運行的命令是什麼
name= #定時任務描述
reboot # 任務在重啓時運行,不建議使用,建議使用special_time
special_time #特殊的時間範圍,參數:reboot(重啓時),annually(每一年),monthly(每個月),weekly(每週),daily(天天),hourly(每小時)
state #指定狀態,present表示添加定時任務,也是默認設置,absent表示刪除定時任務
user # 以哪一個用戶的身份執行
8 yum安裝軟件
name= #所安裝的包的名稱
state= #present安裝, latest安裝最新的, absent 卸載軟件。
update_cache #強制更新yum的緩存
9 service服務程序管理
enabled #設置開機啓動。
name= #服務名稱
runlevel #開機啓動的級別,通常不用指定。
sleep #在重啓服務的過程當中,是否等待。如在服務關閉之後等待2秒再啓動。
state #started啓動服務, stopped中止服務, restarted重啓服務, reloaded重載配置
10 user模塊管理
comment # 用戶的描述信息
createhome # 是否建立家目錄
force # 在使用state=absent是, 行爲與userdel –force一致.
group # 指定基本組
groups # 指定附加組,若是指定爲(groups=)表示刪除全部組
home # 指定用戶家目錄
move_home # 若是設置爲home=時, 試圖將用戶主目錄移動到指定的目錄
name # 指定用戶名
non_unique # 該選項容許改變非惟一的用戶ID值
password # 指定用戶密碼(不可使用明文)
remove # 在使用state=absent時, 行爲是與userdel –remove一致
shell # 指定默認shell
state # 設置賬號狀態,不指定爲建立,指定值爲absent表示刪除
system # 當建立一個用戶,設置這個用戶是系統用戶。這個設置不能更改現有用戶
uid # 指定用戶的uid
update_password # 更新用戶密碼
11 group 用戶組管理(用戶模塊玩熟)
gid # 設置組的GID號
name= # 管理組的名稱
state # 指定組狀態,默認爲建立,設置值爲absent爲刪除
system # 設置值爲yes,表示爲建立系統組
12 script在指定節點運行服務端的腳本
ansible web -m script -a ‘/root/test.sh’
13 setup模塊(重要)
setup模塊,主要用於獲取主機信息,在playbooks裏常常會用到的一個參數gather_facts就與該模塊相關,可使用filter來查看指定信息。
ansible web -m setup -a 'filter=mem*' #查看web組中的內存相關信息
setup模塊還提供了facts組件,用於採集被管機器設備信息的一個功能,facts就是變量,內建變量 ,使用時{{ ansible_processor_vcpus }} ,不過要在模板中使用,使用方法,下回分解。python