真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ansible自動(dòng)運(yùn)維工具之a(chǎn)nsible-playbook詳解

一、Playbook簡(jiǎn)介

創(chuàng)新互聯(lián)公司是專業(yè)的婁煩網(wǎng)站建設(shè)公司,婁煩接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行婁煩網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

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。

二、playbook的核心元素

playbook的核心元素包含:

  • hosts:任務(wù)的目標(biāo)主機(jī),多個(gè)主機(jī)用冒號(hào)分隔,一般調(diào)用/etc/ansible/hosts中的分組信息。
  • remote_user:遠(yuǎn)程主機(jī)上,運(yùn)行此任務(wù)的默認(rèn)身份為root。
  • tasks:任務(wù),即定義的具體任務(wù),由模塊定義的操作列表。
  • handlers:觸發(fā)器,類似tasks,只是在特定的條件下才會(huì)觸發(fā)的任務(wù)。某任務(wù)的狀態(tài)在運(yùn)行后為changed時(shí),可通過(guò)“notify”通知給相應(yīng)的handlers進(jìn)行觸發(fā)執(zhí)行。
  • roles:角色,將hosts剝離出去,由tasks、handlers等所組成的一種特定的結(jié)構(gòu)集合。

三、playbook格式

playbook需要注意的事項(xiàng):

  • playbook由YMAL語(yǔ)言編寫(xiě)。YAML參考了其他多種語(yǔ)言,包括:XML、C語(yǔ)言、Python、Perl等。MAL格式是類似于JSON的文件格式,便于人理解和閱讀,同時(shí)便于書(shū)寫(xiě)。
  • 通過(guò)“-”來(lái)代表項(xiàng),通過(guò)冒號(hào) “ :”來(lái)分隔鍵和值,整個(gè)文件以“---”開(kāi)始并以“...”結(jié)束。
  • 所有的“-”和“ : ”后面均由空格,而且要嚴(yán)格注意縮進(jìn)和對(duì)齊,否則語(yǔ)法可能能會(huì)報(bào)錯(cuò)。
  • 每次在執(zhí)行playbook文件之前,一定要使用“-C”選項(xiàng)來(lái)進(jìn)行預(yù)測(cè)試。該選項(xiàng)會(huì)執(zhí)行一遍playbook文件,但不會(huì)對(duì)目標(biāo)主機(jī)進(jìn)行任何更改,若語(yǔ)法有錯(cuò)或目標(biāo)主機(jī)缺少某個(gè)文件,都將報(bào)錯(cuò)提示。

1、執(zhí)行簡(jiǎn)單的playbook文件:

[root@ansible ~]# grep -v ^# /etc/ansible/hosts | grep -v ^$              #查看hosts中的分組信息
[web1]
192.168.1.2
[web2]
192.168.1.3
[root@ansible ~]# vim /etc/ansible/a.yml        #創(chuàng)建a.yml文件,寫(xiě)入以下內(nèi)容
---
- hosts: web1                   #針對(duì)web1組中的操作
  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
...

我這里編寫(xiě)的playbook文件如下:
ansible自動(dòng)運(yùn)維工具之a(chǎn)nsible-playbook詳解
playbook文件定義的任務(wù)需要通過(guò)ansible-playbook命令進(jìn)行調(diào)用并執(zhí)行,ansible-playbook命令用法如下:

[root@ansible ~]# ansible-playbook  [ option ]/etc/ansible/a.yml
其中option中的功能包括:
* --syntax-check:檢測(cè)yaml文件的語(yǔ)法。
* -C:預(yù)測(cè)試,不會(huì)改變目標(biāo)主機(jī)的任何設(shè)置。
* --list-tasks:列出yaml文件的任務(wù)列表。
* --list-hosts:列出yaml文件影響的主機(jī)列表。
* --list-tags:列出yaml文件中的標(biāo)簽。
* -t TAGS:表示只執(zhí)行指定標(biāo)簽的任務(wù)。
* --skip-tags=SKIP_TAGS:表示出了指定標(biāo)簽的任務(wù),執(zhí)行其他任務(wù)。
* --start-at-task=START_AT:從指定任務(wù)開(kāi)始往下運(yùn)行。

執(zhí)行a.yml文件的示例如下:

[root@ansible ~]# ansible-playbook --syntax-check /etc/ansible/a.yml    #語(yǔ)法檢測(cè)

playbook: /etc/ansible/a.yml       #表示沒(méi)有報(bào)錯(cuò)
[root@ansible ~]# ansible-playbook -C /etc/ansible/a.yml         #對(duì)a.yml進(jìn)行預(yù)測(cè)試
                                  .................#省略部分內(nèi)容
192.168.1.2       : ok=3    changed=1    unreachable=0    failed=0   
192.168.1.3       : ok=2    changed=1    unreachable=0    failed=0   
#返回結(jié)果表示沒(méi)有錯(cuò)誤,全部可以執(zhí)行成功。
[root@ansible ~]# ansible-playbook --list-hosts /etc/ansible/a.yml    #列出a.yml文件中的主機(jī)
[root@ansible ~]# ansible-playbook --list-tasks /etc/ansible/a.yml       #列出任務(wù)
[root@ansible ~]# ansible-playbook --list-tags /etc/ansible/a.yml            #列出標(biāo)簽
[root@ansible ~]# ansible-playbook /etc/ansible/a.yml                #執(zhí)行任務(wù)
[root@ansible ~]# ssh 192.168.1.2 tail -1 /etc/passwd              #確認(rèn)執(zhí)行結(jié)果
user1:x:1001:1001::/home/user1:/bin/bash
[root@ansible ~]# ssh 192.168.1.3 ls -ld /home/passwd
-rw-r--r--. 1 root root 2342 7月  23 16:06 /home/passwd
#一般情況先執(zhí)行“-C”命令進(jìn)行預(yù)測(cè)試,沒(méi)有問(wèn)題后再執(zhí)行.yml文件。

有一個(gè)在線的ansible-playbook語(yǔ)法檢測(cè)工具,可以更直觀的檢查出語(yǔ)法中的錯(cuò)誤,感興趣可以看一下:http://www.yamllint.com/
2、觸發(fā)器

需要觸發(fā)才能執(zhí)行的任務(wù),當(dāng)之前在tasks中的任務(wù)執(zhí)行成功后,若希望在此基礎(chǔ)上觸發(fā)其他任務(wù),這就需要定義handlers。例如,當(dāng)通過(guò)ansible的模塊對(duì)目標(biāo)主機(jī)的配置文件進(jìn)行修改之后,如果任務(wù)執(zhí)行成功,可以觸發(fā)一個(gè)觸發(fā)器,在觸發(fā)器中定義目標(biāo)主機(jī)的服務(wù)重啟操作,以便配置文件生效。handlers觸發(fā)器具有如下特點(diǎn):

  • handlers是ansible提供的條件機(jī)制之一。handlers和task很類似,但是它只在被task通知的時(shí)候才會(huì)觸發(fā)執(zhí)行。
  • handlers只會(huì)在所有任務(wù)執(zhí)行完成后執(zhí)行。而且即使被通知了很多次,它也只會(huì)執(zhí)行一次。

handlers觸發(fā)器的使用示例如下:

[root@ansible ~]# ssh 192.168.1.2 netstat -anpt | grep 80                  #查詢1.2主機(jī)監(jiān)聽(tīng)的端口
tcp6       0      0 :::80         :::*          LISTEN      94858/httpd 
#可以看到是監(jiān)聽(tīng)80端口,現(xiàn)在通過(guò)腳本改為8080端口,并使其生效。
[root@ansible ~]# vim /etc/ansible/httpd.yml          #編輯httpd.yml文件,寫(xiě)入以下內(nèi)容

---
- hosts: web1
  remote_user: root
  tasks:
        - name: change port
          command: sed -i 's/Listen\ 80/Listen\ 8080/g' /etc/httpd/conf/httpd.conf
          notify:                                        #配置觸發(fā)條件
                - restart httpd server     #完成該任務(wù)后調(diào)用名為“restart httpd server”的觸發(fā)器
  handlers:                                          #配置觸發(fā)器
        - name: restart httpd server  #指定觸發(fā)器名字,要和上面“notify”指定的觸發(fā)器名字一樣
          service: name=httpd state=restarted           #觸發(fā)任務(wù)為重啟httpd服務(wù)。
...
#編寫(xiě)完成后,保存退出即可。
[root@ansible ~]# ansible-playbook -C /etc/ansible/httpd.yml           #進(jìn)行預(yù)測(cè)試。
[root@ansible ~]# ansible-playbook  /etc/ansible/httpd.yml               #執(zhí)行腳本。
[root@ansible ~]# ssh 192.168.1.2 netstat -anpt | grep 8080        #遠(yuǎn)端主機(jī)已經(jīng)運(yùn)行8080端口
tcp6       0      0 :::8080        :::*         LISTEN      103594/httpd

3、角色

將多種不同的tasks的文件集中存儲(chǔ)在某個(gè)目錄下,則該目錄就是角色。角色一般存放在/etc/ansible/roles/目錄下,可通過(guò)ansible的配置文件來(lái)調(diào)整默認(rèn)的角色目錄,/etc/ansible/roles/目錄下有很多子目錄,其中每一個(gè)子目錄對(duì)應(yīng)一個(gè)角色,每個(gè)角色也有自己的目錄結(jié)構(gòu),結(jié)構(gòu)如下:
ansible自動(dòng)運(yùn)維工具之a(chǎn)nsible-playbook詳解

/etc/ansible/roles/為角色集合,該目錄下有自定義的各個(gè)子目錄:

  • mariadb:MySQL角色。
  • Apache:httpd角色。
  • Nginx:Nginx角色。
  • 每個(gè)角色的定義,以特定的層級(jí)目錄結(jié)構(gòu)進(jìn)行組織。以mariadb(mysql角色)為例:
  • files:存放由copy或script等模塊調(diào)用的文件。
  • templates:存放template模塊查找所需要的模板文件的目錄,如mysql配置文件模板。
  • tasks:任務(wù)存放的目錄。
  • handlers:存放相關(guān)觸發(fā)執(zhí)行的目錄。
  • vars:變量存放的目錄。
  • meta:用于存放此角色元數(shù)據(jù)。
  • default:默認(rèn)變量存放的目錄,文件中定義了此角色使用的默認(rèn)變量。

上面的目錄中,tasks、handlers、vars、meta、default至少應(yīng)該包含一個(gè)main.yml文件,該目錄下也可以有其他.yml文件,但是需要在main.yml文件中用include指令將其他.yml文件包含進(jìn)來(lái)。
.
有了角色后,可以直接在yaml文件(playbook配置文件)中調(diào)用角色,示例如下:

---
- hosts: web1
  remote_user: root
  roles:            
  - mysql        #調(diào)用角色名
  - httpd             #調(diào)用角色名
...

可以只調(diào)用一個(gè)角色,也可以調(diào)用多個(gè)角色,當(dāng)定義了角色后,用ansible-playbook PALYBOOK文件執(zhí)行即可。此時(shí)ansible會(huì)到角色集合的目錄(/etc/ansible/roles)去找mysql和httpd目錄,然后依次運(yùn)行mysql和httpd目錄下的所有代碼。
.
下面來(lái)個(gè)安裝及配置mariadb數(shù)據(jù)庫(kù)的實(shí)例:

需求分析:

  • 要求被管理主機(jī)上自動(dòng)安裝mariadb,安裝完成后上傳提前準(zhǔn)備好的配置文件至遠(yuǎn)端主機(jī),重啟服務(wù),然后新建testdb數(shù)據(jù)庫(kù),并允許test用戶對(duì)其擁有所有權(quán)限。
  • 被管理主機(jī)配置yum倉(cāng)庫(kù),自行配置,若被管理端可以連接互聯(lián)網(wǎng),那么直接將yum倉(cāng)庫(kù)指向互聯(lián)網(wǎng)即可。

開(kāi)始在ansible服務(wù)器上實(shí)施:

[root@ansible /]# mkdir -pv /etc/ansible/roles/mariadb/{files,tasks,handlers}
mkdir: 已創(chuàng)建目錄 "/etc/ansible/roles/mariadb"
mkdir: 已創(chuàng)建目錄 "/etc/ansible/roles/mariadb/files"
mkdir: 已創(chuàng)建目錄 "/etc/ansible/roles/mariadb/tasks"
mkdir: 已創(chuàng)建目錄 "/etc/ansible/roles/mariadb/handlers"
[root@ansible /]# cd /etc/ansible/roles/mariadb/tasks/       #切換至指定目錄
[root@ansible tasks]# ls
[root@ansible tasks]# vim main.yml                     #編寫(xiě)main.yml文件
---
- name: install mariadb
  yum: name=mariadb-server state=present
- name: move config file
  shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"
- name: provide a new config file
  copy: src=my.cnf dest=/etc/my.cnf
- name: reload mariadb
  shell: systemctl restart mariadb
- name: create database testdb
  shell: mysql -u root -e "create database testdb;grant all on testdb.* to 'test'@'192.168.1.%' identified by 'test123';flush privileges;"
  notify:
  - restart mariadb
...
#編寫(xiě)完畢,保存退出即可。
[root@ansible tasks]# cd ../handlers/            #切換至觸發(fā)器目錄
[root@ansible handlers]# vim main.yml              #編寫(xiě)main.yml文件,寫(xiě)入以下內(nèi)容
---
- name: restart mariadb
  service: name=mariadb state=restarted
...
#編寫(xiě)完畢,保存退出即可。
[root@ansible handlers]# cd ../files     #進(jìn)入mariadb角色文件夾的files
[root@ansible files]# pwd
/etc/ansible/roles/mariadb/files
[root@ansible files]# ls            #準(zhǔn)備好配置好的mysql數(shù)據(jù)庫(kù)配置文件,需要分發(fā)到遠(yuǎn)程主機(jī)的
my.cnf
[root@ansible files]# cd /etc/ansible/
[root@ansible ansible]# vim mariadb.yml         #編寫(xiě).yml文件
---
- hosts: web
  remote_user: root
  roles:
  - mariadb
...
##編寫(xiě)完畢,保存退出即可。
[root@ansible ansible]# ansible-playbook -C mariadb.yml          #進(jìn)行預(yù)檢測(cè)
                                  ........................          #省略部分內(nèi)容
PLAY RECAP ***************************************************************************
192.168.1.2                : ok=3    changed=1    unreachable=0    failed=0 
#返回結(jié)果表示沒(méi)問(wèn)題
[root@ansible ansible]# ansible-playbook mariadb.yml           #執(zhí)行安裝

待安裝完成后,在遠(yuǎn)端主機(jī)上查看是否已經(jīng)創(chuàng)建了testdb數(shù)據(jù)庫(kù),并測(cè)試以test用戶登錄,自行測(cè)試吧。


網(wǎng)頁(yè)標(biāo)題:ansible自動(dòng)運(yùn)維工具之a(chǎn)nsible-playbook詳解
鏈接URL:http://weahome.cn/article/pjigjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部