Ansible 流程控制

1.判斷語(yǔ)句

  • 1.centos和ubuntu系統(tǒng)都需要安裝httpd, 判斷系統(tǒng).
  • 2.安裝軟件倉(cāng)庫(kù),只有web組的安裝webtatic其他的主機(jī)全部跳過(guò).
  • 3.TASK任務(wù), TASK1任務(wù)執(zhí)行成功,才會(huì)執(zhí)行TASK2
#根據(jù)不同的系統(tǒng),安裝不同的服務(wù)
- hosts: webservers
  tasks:
    - name: CentOS Installed Httpd Server
      yum:
        name: httpd
        state: present
      when: ( ansible_distribution == "CentOS" )

    - name: Ubuntu Installed Httpd Server
      yum:
        name: httpd2
        state: present
      when: ( ansible_distribution == "Ubuntu" )
      
[root@manager project1]# cat f16.yml 
- hosts: all
  tasks:
  - name: Add Nginx Yum Repository
    yum_repository:
      name: nginx
      description: Nginx Repository
      baseurl: http://nginx.org/packages/centos/7/$basearch/
    when: ( ansible_hostname is match ("web*"))


[root@manager project1]# cat f17.yml 
- hosts: webservers
  tasks:

    - name: Check Httpd Server
      command: systemctl is-active httpd
      register: Check_Httpd
      ignore_errors: yes

    #判斷Check_Httpd.rc是否等于0,如果為0則執(zhí)行任務(wù),否則不執(zhí)行
    - name: Restart Httpd Server
      systemd:
        name: httpd
        state: restarted
      when: ( Check_Httpd.rc == 0 )

2.循環(huán)語(yǔ)句

#一次啟動(dòng)多個(gè)服務(wù)
[root@manager project1]# cat f18.yml 
- hosts: webservers
  tasks:
    - name: Systemd Nginx Status
      systemd:
        name: "{{ item }}"    #調(diào)用的變量也不變,也是固定
        state: started

    #固定的語(yǔ)法格式
      with_items:
        - nginx
        - php-fpm


#一次拷貝多個(gè)文件
[root@manager project1]# cat f19.yml
- hosts: webservers
  tasks:
    - name: Configure nginx.conf
      copy:
        src: '{{ item.src }}'
        dest: '{{ item.dest }}'
        mode: '{{ item.mode }}'
      with_items:
        - { src: ./file/nginx.conf.j2, dest: /etc/nginx/nginx.conf, mode: '0644' }
        - { src: ./file/kold.oldxu.com.conf.j2, dest: /etc/nginx/conf.d/kold.oldxu.com.conf, mode: '0600' }



#創(chuàng)建多個(gè)用戶,一次創(chuàng)建多個(gè)? 3個(gè)用戶  TASK
[root@manager project1]# cat f20.yml 
- hosts: webservers
  tasks:
    - name: Create User
      user:
        name: "{{ item }}"

      with_items:
        - test1
        - test2
        - test3
        - test4


#1.創(chuàng)建tt1 --> bin  tt2 -->root tt3 --->adm   附加組
[root@manager project1]# cat  f20.yml 
- hosts: webservers
  tasks:
    - name: Create User
      user:
        name: "{{ item.name }}"
        groups: "{{ item.groups }}"

      with_items:
        - { name: tt1, groups: bin }
        - { name: tt2, groups: root }
        - { name: tt3, groups: adm }
        
        
        
1.標(biāo)準(zhǔn)循環(huán)                   --->居多
    item
    with_items:
       - test
2.字典循環(huán):                   --->居多
    itme.name
    with_items:
        - { name: test }


3.變量循環(huán)
- hosts: webservers
  tasks:
    - name: ensure a list of packages installed
      yum: name={{ packages }} state=present
      vars:
        packages:
          - httpd
          - httpd-tools

3.handlers

[root@manager project1]# cat f22.yml 
- hosts: webservers
  tasks:

    - name: Installed Nginx and PHP Packages
      yum:
        name: nginx
        state: present

    - name: Configure nginx.conf 
      template:
        src: ./file/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      #監(jiān)控-->changed狀態(tài)-->通知-->handlers--->name-->Restart Nginx Server
      notify: Restart Nginx Server
      #notify:
      #  - Restart Nginx Server
      #  - Restart php Server

    - name: Systemd Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes

當(dāng)nginx或php配置文件發(fā)生變更才會(huì)觸發(fā)此操作
  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted


3.handlers注意事項(xiàng)
    1.無(wú)論多少個(gè)task通知了相同的handlers,handlers僅會(huì)在所有tasks結(jié)束后運(yùn)行一次。
    2.只有task發(fā)生改變了才會(huì)通知handlers,沒(méi)有改變則不會(huì)觸發(fā)handlers.
    3.不能使用handlers替代tasks、因?yàn)閔andlers是一個(gè)特殊的tasks。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容