一、介紹
特性
(1)、no agents:不需要在被管控主機上安裝任何客戶端;
(2)、no server:無服務器端,使用時直接運行命令即可;
(3)、modules in any languages:基於模塊工作,可使用任意語言開發模塊;
(4)、yaml,not code:使用yaml語言定制劇本playbook;
(5)、ssh by default:基於SSH工作;
(6)、strong multi-tier solution:可實現多級指揮。
優點
(1)、輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;
(2)、批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行;
(3)、使用python編寫,維護更簡單,ruby語法過於復雜;
(4)、支持sudo。
二、安裝
因為ansible已經被redhat收購,所以可以直接用yum安裝,先通過yum list |grep ansible看一下yum源,然后安裝
yum install ansible ansible-doc -y
安裝好之后,通過ssh-keygen來創建密鑰,把生成的公鑰放到對應目標機器對應的用戶下面。
修改ansible配置文件,vim /etc/ansible/hosts,添加一個組(相當於是進行分組操作,如web、db組),組下面為對應機器ip或者主機名(需在/etc/hosts里面配置)
三、ansible遠程執行命令
ansible testhost -m command -a "hostname"
PS:testhost 為定義的一個組(這個組下面所有機器都會執行),-m command 通過command這個模塊來操作,-a "hostname"為操作的命令,也可以用shell來代替command
shell模塊,還支持遠程執行命令並且帶管道
ansible testhost -m shell -a "cat /etc/passwd |wc -l"
四、ansible拷貝文件或目錄
ansible testhost -m copy -a "src=/etc/passwd dest=/tmp/ansible/1.txt owner=root group=root mode=0755"
PS:把文件分發到目標機器上面,如果目標機器不存在/tmp/ansible這個目錄,則分發失敗,如果存在則把passwd重命名為1.txt,如果dest=/tmp/ansible,則分發之后,文件名不變
ansible testhost -m copy -a "src=/etc/ansible dest=/tmp/ansible owner=root group=root mode=0755"
PS:把目錄分發到目標機器上面,不管dest里面定義的ansible目錄是否存在,都會把原目錄放在該目錄下面,相當於/tmp/ansible/ansible
五、ansible遠程執行腳本
1.把腳本分發到各個機器上面去
ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
2.批量執行該shell腳本
ansible testhost -m shell -a "/tmp/test.sh"
六、ansible管理任務計划
1.添加cron計划
ansible testhost -m cron -a "name='test cron' job='/bin/touch /tmp/1.txt' minute=10 month=12"
PS: 表示在crontab里面添加一條記錄為:
#Ansible:test cron 10 * * 12 * /bin/touch /tmp/1.txt
minute表示分鍾,hour表示小時,day表示日期,month表示月份,weekday表示周,如果沒寫則默認為 *
2.刪除cron計划
ansible testhost -m cron -a "name='test cron' state=absent"
PS: 只能刪除該crontab,不能修改,也不能自己crontab -e去修改,不然ansible會操作不了該crontab
七、ansible安裝、刪除rpm包等管理
ansible testhost -m yum -a "name=nginx state=installed"
PS: 相當於yum intall nginx -y,state默認為installed,如果state=removed表示卸載該rpm包
ansible testhost -m service -a "name=nginx state=started enabled=yes"
PS:啟動nginx服務,state可以為started/restarted/stopped/reloaded,enabled為yes表示開機啟動
8、ansible-doc
1. 列出所有的模塊
ansible-doc -l
2.查看指定模塊的文檔
ansible-doc modulename