ansible變量--第四天

playbook條件語句

一:判斷語句when
    根據(jù)不同的操作系統(tǒng)進(jìn)行判斷   Apache 
        centOS   httpd 
        Ubuntu   httpd2
    根據(jù)不同的主機(jī)名稱進(jìn)行判斷

[root@manager ansible_tasks]# cat t1.yml

  • hosts: webservers
    tasks:
    • name: Installed HTTP Server
      yum:
      name: httpd
      state: present
      when: (ansible_distribution == "CentOS")
      判斷:如果是centos就執(zhí)行httpd恩溅。
    • name: Installed HTTP Server
      yum:
      name: httpd2
      state: present
      when: (ansible_distribution == "Ubuntu")
      判斷:如果是ubuntu就執(zhí)行httpd2.

實(shí)例:如果有100臺(tái)服務(wù)器,只需要其中的10臺(tái)安裝nginx套么,那么我們就可以將這10臺(tái)主機(jī)放在一個(gè)web組富玷,然后只安裝web組里的攀涵。
就需要做判斷:
[root@manager ansible_tasks]# cat t2.yml

  • hosts: all
    tasks:
    • name: Installed Nginx Web Server
      yum:
      name: nginx
      state: present
      when: ( ansible_hostname is match("web*"))
      意思:是web的都安裝抖格,不是web的都跳過钝腺。

when: ( ansible_hostname is match("web")) or ( ansible_hostname is match("web"))
意思是:web和lb都安裝龄捡。or是或的意思


二:循環(huán)語句loop|with_item

    一個(gè)tasks安裝多個(gè)軟件  (列表)     

[root@manager ansible_tasks]# cat t3.yml

  • hosts: webservers
    tasks:
    • name: Install Rpm All
      yum:
      name: "{{ item }}"
      state: present
      loop:

      • httpd
      • httpd-tools

      一個(gè)tasks啟動(dòng)多個(gè)服務(wù) (列表)
      [root@manager ansible_tasks]# cat t4.yml

  • hosts: webservers
    tasks:
    • name: Started Nginx And PHP_FPM Server
      systemd:
      name: "{{ item }}"
      state: started
      enabled: yes
      loop:

      • nginx
      • php-fpm

      一個(gè)tasks拷貝多個(gè)文件 (字典)
      [root@manager ansible_tasks]# cat t5.yml

  • hosts: webservers
    tasks:
    • name: Configure Rsync Deamon
      copy:
      src: "{{ item.src }}"
      dest: "{{ item.dest }}"
      mode: "{{ item.mode }}"
      loop:
      • { src: rsyncd.conf.j2, dest: /opt/rsyncd.conf, mode: "0644" }
      • { src: rsync.pass.j2, dest: /opt/rsync.pass, mode: "0600" }
批量創(chuàng)建用戶啦辐,使用key values字典的方式
testuser1   基本組 bin         8989    /bin/bash
testuser2   基本組 root        7878    /bin/sh

[root@manager ansible_tasks]# cat t6.yml

  • hosts: webservers
    tasks:
    • name: Create Users
      user:
      name: "{{ item.name }}"
      uid: "{{ item.uid }}"
      group: "{{ item.group }}"
      shell: "{{ item.shell }}"
      loop:
      • { name: testuser1 , uid: 8989 , group: bin , shell: /bin/bash }
      • { name: testuser2 , uid: 7878 , group: root , shell: /bin/sh }

三:觸發(fā)器 Handlers


四:標(biāo)簽 Tag
[root@manager ansible_tasks]# cat t7.yml

  • hosts: webservers
    tasks:

    • name: Install Nfs Server
      yum:
      name: nfs-utils
      state: present
      tags: install_nfs
    • name: Service Nfs Server
      service:
      name: nfs-server
      state: started
      enabled: yes
      tags: start_nfs

    指定執(zhí)行 playbook中的某一個(gè)標(biāo)簽 ( 通常是用來快速解決問題 )
    [root@manager ansible_tasks]# ansible-playbook t7.yml -t install_nfs
    指定排除某個(gè)tags谓传,其余都正常執(zhí)行
    [root@manager ansible_tasks]# ansible-playbook t7.yml --skip-tags install_nfs


五:包含 Include | include_tasks

[root@manager ansible_tasks]# cat restart_nginx.yml

  • name: Restart Nginx Server
    systemd:
    name: nginx
    state: restarted
    [root@manager ansible_tasks]# cat a_project.yml
  • hosts: webservers
    tasks:
    • name: A Project command
      command: echo "A"

    • name: Restart Nginx
      include: restart_nginx.yml
      [root@manager ansible_tasks]# cat b_project.yml

  • hosts: webservers
    tasks:
    • name: B Project command
      command: echo "B"

    • name: Restart Nginx
      include: restart_nginx.yml


六:忽略錯(cuò)誤 Ignore_errors

[root@manager ansible_tasks]# cat errors.yml

  • hosts: webservers
    tasks:
    • name: Shell Command
      command: /bin/false
      ignore_errors: yes #忽略錯(cuò)誤
    • name: Create File
      file:
      path: /tmp/oldux_tt
      state: touch

gnore_errors使用:當(dāng)我們發(fā)現(xiàn) 某個(gè)task 偶爾會(huì)執(zhí)行失敗,但該task并不影響后續(xù)的tasks正常運(yùn)行芹关,那么此時(shí)可以 添加一個(gè)ignore_errors忽略經(jīng)常出錯(cuò)的這個(gè)task

七: 異常處理

1.控制task報(bào)告的狀態(tài)续挟,不一定必須是"changed"
[root@manager ansible_tasks]# cat t8.yml

  • hosts: webservers
    tasks:
    • name: Get Nginx Port Status
      shell: netstat -lntp | grep nginx
      register: ngx_status
      changed_when: false #(該tasks任務(wù)不會(huì)發(fā)生changed提示了)
    • name: Debug Nginx Status
      debug:
      msg: "{{ ngx_status.stdout_lines }}"

2.使用changed_when檢查tasks任務(wù)返回的結(jié)果
[root@manager ansible_tasks]# cat t9.yml

  • hosts: webservers
    tasks:

    • name: Install Nginx Server
      yum:
      name: nginx
      state: present
      tags: Install_Nginx_Server

    • name: Configure Nginx Server
      copy:
      src: ./nginx.conf.j2
      dest: /etc/nginx/nginx.conf
      notify: Restart Nginx Server

    • name: Check Nginx Configure File
      shell: nginx -t
      register: check_ngx #將nginx -t的結(jié)果存儲(chǔ)至check_ngx變量中
      changed_when:

      • false #由于沒有在被控端執(zhí)行任何操作,所以可以將其修改為false侥衬,這個(gè)任務(wù)每次執(zhí)行就ok狀態(tài)
      • check_ngx.stdout.find('successful') #檢查變量中是否存在successful的字符串诗祸,如果存在則繼續(xù),不存在則停止轴总,并報(bào)錯(cuò)直颅。
    • name: Started Nginx Server
      systemd:
      name: nginx
      state: started
      enabled: yes

    handlers:

    • name: Restart Nginx Server
      systemd:
      name: nginx
      state: restarted
      配置文件一旦拷貝錯(cuò)誤,在重啟的時(shí)候就會(huì)報(bào)錯(cuò)怀樟,服務(wù)掛掉功偿,
      所以這個(gè)判斷做語法判斷是非常有限,又可以檢測(cè)往堡,又可以不影響服務(wù)的使用械荷。
      它會(huì)在出現(xiàn)語法錯(cuò)誤之后就停止執(zhí)行。也就不會(huì)在去加載啟動(dòng)模塊投蝉。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末养葵,一起剝皮案震驚了整個(gè)濱河市征堪,隨后出現(xiàn)的幾起案子瘩缆,更是在濱河造成了極大的恐慌,老刑警劉巖佃蚜,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庸娱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡谐算,警方通過查閱死者的電腦和手機(jī)熟尉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洲脂,“玉大人斤儿,你說我怎么就攤上這事剧包。” “怎么了往果?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵疆液,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我陕贮,道長(zhǎng)堕油,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任肮之,我火速辦了婚禮掉缺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘戈擒。我一直安慰自己眶明,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布筐高。 她就那樣靜靜地躺著赘来,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凯傲。 梳的紋絲不亂的頭發(fā)上犬辰,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音冰单,去河邊找鬼幌缝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诫欠,可吹牛的內(nèi)容都是我干的涵卵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荒叼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼轿偎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起被廓,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤坏晦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嫁乘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昆婿,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蜓斧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仓蛆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挎春,死狀恐怖看疙,靈堂內(nèi)的尸體忽然破棺而出豆拨,到底是詐尸還是另有隱情,我是刑警寧澤能庆,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布辽装,位于F島的核電站,受9級(jí)特大地震影響相味,放射性物質(zhì)發(fā)生泄漏拾积。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一丰涉、第九天 我趴在偏房一處隱蔽的房頂上張望拓巧。 院中可真熱鬧,春花似錦一死、人聲如沸肛度。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽承耿。三九已至,卻和暖如春伪煤,著一層夾襖步出監(jiān)牢的瞬間加袋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工抱既, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留职烧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓防泵,卻偏偏與公主長(zhǎng)得像蚀之,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捷泞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355