ansible入門


前言

    最近看了一下ansible,挺火的一個配置管理工具,對比老大哥puppet,使用起來要簡單一些,並且可以批量執行命令,對比同是python語言編寫的saltstack,不需要安裝客戶端(基於paramiko),也更靈活一些,尤其我們現有的登錄方式,通過跳板機加密鑰,改造成ansible成本很低,准備學習一下以后在生產上使用。

    ansible已被紅帽收購,目前出到2.0了,和紅帽的朋友聊了一下,這個配合現在大火的openstack(紅帽是其代碼最大貢獻者之一),看來以后會成為自動化運維的一個趨勢。

    官網地址http://docs.ansible.com/

安裝

最簡單的epel之后,yum install ansible

也可以用pip的方式

pip install ansible即可

如果像我們一樣服務器不能連接公網,需要手動下載一下python模塊ecdsa, pycrypto, paramiko, MarkupSafe, jinja2, PyYAML, ansible

目前安裝的版本是1.9.4

ansible --version
ansible 1.9.4

入門使用

首先把ssh密鑰搞好,這里就不說了,保證master和minion之間不通過密碼

定義主機和組:

vim /etc/ansible/hosts  #默認的文件位置,也可執行ansible時手動指定hosts文件,通過-i參數

[test]
10.199.2.45
10.199.2.46 [web] 10.199.2.[42:47] #=10.199.2.42\43\44\45\46\47 test.case.com #主機名定義

使用第一個模塊:

ansible test -m ping -u sre -s #-m接模塊名,因為我們使用的是sre賬戶登錄后通過sudo的方式,-u接用戶,-s表示sudo方式執行
ansible test:\!10.199.2.46 -m ping -u sre -s #:\!排除某個主機
ansible 10.199.2.46 -m ping -u sre -s #當然也可以直接接ip而不使用組進行

ansible自帶了很多模塊

可以通過ansible-doc -l 查看總共有哪些模塊,ansible-doc ping 顯示某個模塊的用法,ansible-doc -s ping 顯示某個模塊在playbooks中的代碼片段

遠程執行命令模塊:

遠程執行命令可能是ansible最常用也是最方便的一個功能,這里舉幾個例子

1.執行minion操作系統命令

ansible test -a 'w' -u sre -s #默認模塊command,實現執行遠程命令,-a接模塊參數

2.minion上執行master上腳本

master先創建腳本1.sh

#!/bin/bash

ls /tmp/
ansible test -m script -a '1.sh' -u sre -s  #script模塊相當於scp+shell,將本地腳本在遠端minion進行執行

3.minion執行minion上腳本,2.45遠端存在minion.sh,2.46不存在

ansible test -m shell -a '/tmp/minion.sh' -u sre -s 

shell和command模塊很類似,看幫助信息了解到command和shell功能基本一致,但shell可以使用環境變量、管道等,功能更強大

copy模塊 

ansible test -m copy -a 'src=1.sh dest=/tmp/ owner=root group=root mode=0755' -u sre -s
#將本地1.sh文件傳到遠端,如第二次執行此命令,如無更新,則遠端無更新,有更新,則遠端更新

yum模塊

ansible test -m yum -a "name=nc state=latest" -u sre -s

cron模塊

ansible test -m cron -a "name='test' job='ls /tmp' minute=*/2 hour=3,4,5" -u sre -s
#對端服務器crontab -l
#Ansible: test
*/2 3,4,5 * * * ls /tmp

ansible test -m cron -a "name='test' state=absent" -u sre -s #刪除該條cron

service模塊

ansible test -m service -a "name=ntpd state=started" -u sre -s     
ansible test -m service -a "name=ntpd state=stopped" -u sre -s     

user模塊

ansible test -m user -a "name=test123" -u sre -s  #創建用戶
ansible test -m user -a "name=test123 state=absent remove=yes" -u sre -s  #刪除用戶並刪除家目錄

lineinfile模塊

#用於文件內的內容處理
ansible ctx-lf -m lineinfile -a "dest=/tmp/sudoers line='appuser  ALL=(ALL)       NOPASSWD:ALL' insertafter=^sre" -u sre -s -i host  #在sudo文件中sre開頭之后加入line=的內容,insertafter可以寫正則或EOF(結尾),同理還有insertbefore也可以寫正則或BOF(開頭)
ansible ctx-lf -m lineinfile -a "dest=/tmp/sudoers state=absent regexp=^appuser" -u sre -s -i hosts  #去掉正則匹配的所有行
ansible ctx-lf -m lineinfile -a "dest=/tmp/sudoers regexp=^sre line='#sre  ALL=(ALL)       NOPASSWD:ALL'" -u sre -s -i hosts  #將sre開頭的最后匹配的一行前邊加上#
#也可以用()形式做替代變更,類似sed
ansible ctx-lf -m lineinfile -a "dest=/tmp/sudoers regexp=^(sre.*)$ line='#\1' backrefs=yes" -u sre -s -i hosts   #\1表示第一個()里的內容,注意這種用法需要backrefs為yes,開啟擴展正則匹配
ansible ctx-lf -m lineinfile -a "dest=/tmp/sudoers regexp=^(sre.*)$ line='123123' validate='visudo -cf %s'" -u sre -s -i hosts   #加入validate的驗證,比如sudo文件如果改錯了,可能影響整個系統的管理,加入驗證之后,如果修改的sudo文件格式錯誤,將不會保存

 進階一下,請看下一篇ansible playbook的基本介紹 http://www.cnblogs.com/caseast/p/5181910.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM