簡(jiǎn)述
- 這篇主要實(shí)踐ansible的核心模塊 playbook
- 何為playbook?Ansible-playbook是日常應(yīng)用中使用頻率最高的命令孝偎,類似于Linux中的sh或source命令,用來執(zhí)行系列任務(wù)己肮。其工作機(jī)制:通過讀取預(yù)先編寫好的playbook文件實(shí)現(xiàn)集中處理任務(wù)。Ansible-playbook命令后跟yml格式的playbook文件菌瘪,playbook文件存放了要執(zhí)行的任務(wù)代碼须眷,命令使用方式如下:
Ansible-playbook playbook.yml
<!--playbook.yml文件要提前編寫好,建議使用絕對(duì)路徑-->
playbook規(guī)則
運(yùn)行規(guī)則
- 使用者使用Ansible或Ansible-Playbooks時(shí)鸣剪,在服務(wù)器終端輸入Ansible的Ad-Hoc命令集或Playbooks后组底,Ansible會(huì)遵循預(yù)選安排的規(guī)則將Playbooks逐步拆解為Play,再將Play組織成Ansible可以識(shí)別的任務(wù)筐骇,隨后調(diào)用任務(wù)涉及的所有模塊和插件债鸡,根據(jù)Inventory中定義的主機(jī)列表通過SSH將任務(wù)集以臨時(shí)文件或命令的形式傳輸?shù)竭h(yuǎn)程客戶端執(zhí)行并返回執(zhí)行結(jié)果,如果是臨時(shí)文件則執(zhí)行完畢后自動(dòng)刪除铛纬。
playbook語(yǔ)法
- playbook配置文件使用YAML語(yǔ)法厌均,具有簡(jiǎn)潔明了、結(jié)構(gòu)清晰等特點(diǎn)告唆。
- playbook配置文件類似于shell腳本棺弊,是一個(gè)YAML格式的文件晶密,用于保存針對(duì)特定需求的任務(wù)列表。
- 上面介紹的ansible命令雖然可以完成各種任務(wù)镊屎,但是當(dāng)配置一些復(fù)雜任務(wù)時(shí)惹挟,逐條輸入就顯得效率非常低下。更有效的方案是在playbook配置文件中放置所有的任務(wù)代碼缝驳,利用ansible-playbook命令執(zhí)行該文件连锯,可以實(shí)現(xiàn)自動(dòng)化運(yùn)維。
- YAML文件的擴(kuò)展名通常為.yaml或.yml用狱。
- YAML語(yǔ)法與其他高級(jí)語(yǔ)言類似运怖,其結(jié)構(gòu)通過縮進(jìn)來展示,通過“-”來代表項(xiàng)夏伊;“:”用來分隔鍵和值摇展;整個(gè)文件以“---”開頭并以“…”結(jié)尾,如下所示:
---
- hosts: web <!--針對(duì)web組中的操作-->
remote_user: root <!--遠(yuǎn)端執(zhí)行用戶身份為root-->
tasks: <!--任務(wù)列表-->
- name: adduser <!--任務(wù)名稱-->
user: name=user1 state=present <!--執(zhí)行user模塊溺忧,創(chuàng)建用戶-->
tags: <!--創(chuàng)建tag標(biāo)簽-->
- aaa <!--tag標(biāo)簽為aaa-->
- name: addgroup <!--任務(wù)名稱-->
group: name=root system=yes <!--執(zhí)行g(shù)roup模塊咏连,創(chuàng)建組-->
tags: <!--創(chuàng)建tag標(biāo)簽-->
- bbb <!--tag標(biāo)簽為bbb-->
- hosts: web2 <!--針對(duì)web2組中的操作-->
remote_user: root <!--遠(yuǎn)端執(zhí)行用戶身份為root-->
tasks: <!--任務(wù)列表-->
- name: copy file to web <!--任務(wù)名稱-->
copy: src=/etc/passwd dest=/home <!--執(zhí)行copy模塊,復(fù)制文件-->
tags: <!--創(chuàng)建tag標(biāo)簽-->
- ccc <!--tag標(biāo)簽為ccc-->
...
下面是實(shí)踐:給web組主機(jī)安裝Java1.8環(huán)境
- 思路就是先將Java壓縮包放到各個(gè)主機(jī)的,/tmp/ 文件夾下,再交給腳本,具體怎么批量去放,根據(jù)環(huán)境的不同擇優(yōu)使用,推薦ansible copy 模塊
- 話不多說,先上playbook Script 新建文件installJDK.yaml
---
# 針對(duì)web組中的操作
- hosts: web
remote_user: root
tasks:
- name: copy JDK to app dic
shell: mkdir /usr/app
- name: tar jdk
shell: tar -zxvf /tmp/jdk-8u311-linux-x64.tar.gz -C /usr/app/
- name: rename
shell: mv /usr/app/jdk1.8.0_311 /usr/app/java
- name: setting profile
shell: echo "export JAVA_HOME=/usr/app/java" >> /etc/profile &&
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile &&
echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib" >> /etc/profile &&
echo "安裝完畢B成K畹巍!\r下面進(jìn)行測(cè)試" &&
source /etc/profile &&
echo "java版本為:" &&
java -version &&
echo "Java環(huán)境安裝完成"
...
- 寫好腳本后,將腳本上傳至ansible所在機(jī)器,/etc/ansible/ 下
- 先檢查是否有錯(cuò)誤
ansible-playbook --syntax-check /etc/ansible/installJDK.yaml
# 沒有報(bào)錯(cuò)就是沒有語(yǔ)法錯(cuò)誤
ansible-playbook -C /etc/ansible/installJDK.yaml
ansible-playbook /etc/ansible/installJDK.yaml