• Redhat(5)-ansible-loop-handler-errors-tags


    1.编写loop和条件任务
    2.实施handler
    3.处理Errors
    4.扩展-实施Tags

     


    1.编写Loop和条件任务
     

     1.1 loop
    条件查看:ansible.cfg
    a)变量定义  var.yml

     

    1. user1:jack
    2. user2:tom

    b)变量调用 config_user.yml

    1. ---
    2. - name:
    3. hosts: servera
    4. tasks:
    5. - name:
    6. user:
    7. name: "{{ user1 }}"
    8. state: present
    9. - name:
    10. user:
    11. name: "{{ user2 }}"
    12. state: present
    ansible-playbook config_user.yml
    1. ---
    2. - name:
    3. hosts: servera
    4. # vars:
    5. # users:
    6. # - jack
    7. # - tom
    8. tasks:
    9. - name: create user {{ item }} #此处不识别
    10. user:
    11. name: "{{ item }}"
    12. state: present
    13. loop:
    14. - jack
    15. - tom

     1.11循环-直接列表
     1.12.循环-变量 vars

    1. ---
    2. - name:
    3. hosts: servera
    4. vars:
    5. users:
    6. - jack
    7. - tom
    8. tasks:
    9. - name: create user {{ item }} #此处不识别
    10. user:
    11. name: "{{ item }}"
    12. state: present #添加 present 删除:absent
    13. loop:"{{ users }}"

     1.13.循环:列表+字典

    1. ---
    2. - name:
    3. hosts: servera
    4. vars:
    5. users:
    6. - name:jack #3.列表+字典
    7. uid:1011
    8. - name:tom
    9. uid:1012
    10. tasks:
    11. - name: create user {{ item }} #此处不识别
    12. user:
    13. name: "{{ item.name }}"
    14. uid: "{{ item.uid }}"
    15. state: present #添加 present 删除:absent
    16. loop:"{{ users }}"




     1.2条件判断
    字符串==,数字< 、>、...
    变量是否定义 min_memory is defined,min_memory is not defined
    memory avaliable,not memory avaliable

    1.准备条件:

    ansiblg.cfg

    1. [defaults]
    2. inventory=inventory
    3. remote_user=root

    inventory

    1. [servers]
    2. servera
    3. serverb

    vim ~/.vimrc
     

    set ts=2 paste

    1.21when+bool、数字

    1. ---
    2. - name:test
    3. hosts: servera
    4. gather_facts: no
    5. vars:
    6. run_my_task: true #0:false、no #1:TRUE,yes 不区分大小写
    7. tasks:
    8. - name: test when
    9. debug:
    10. msg:
    11. when: run_my_task #此处为bool值
    12. # when: run_my_task <15 #此处为数字

    1.22when+文件的路径:vars=/etc/hosts

    1. ---
    2. - name:test
    3. hosts: servera
    4. gather_facts: no
    5. vars:
    6. file_name: /etc/hosts
    7. tasks:
    8. - name: test when
    9. debug:
    10. msg:"{{ file_name}} is regular file"
    11. when: file_name is file
    12. #file:文件
    13. #directory:目录
    14. #link: 软链接
    15. #mount:挂载点
    16. #exist:路径

    1.23when+结果(succeeded+failed+changed+skiped)  

    1. ---
    2. - name:test
    3. hosts: servera
    4. gather_facts: no
    5. vars:
    6. doshell:"yes"
    7. tasks:
    8. - shell: cat /etc/hosts
    9. register:result
    10. ignore_errors:true
    11. when:doshell=="yes"
    12. - name: success
    13. debug:
    14. msg: success
    15. when: result is succeeded
    16. when: result is failed
    17. when: result is changed
    18. when: result is skipped
    19. #succeeded:成功
    20. #failed: 失败
    21. #changed: 改变
    22. #skiped: 跳过

    1.24 字符串大小写+奇数偶数(string +lower+upper+number+even+odd)
    1.25 变量值是否在另一个变量当中
    in ,not in

     

    1. ---
    2. - name:test
    3. hosts: servera
    4. gather_facts:no
    5. vars:
    6. my_special_user:devops
    7. superusers:
    8. - root
    9. - wheel
    10. tasks:
    11. - name:
    12. user:
    13. name:
    14. groups:
    15. append:yes
    16. when: my_special_user not in superusers

    1.26 多个条件
    and

     

    1. when: ansible kernel=="" and inventory_hostname in groups['']
    2. when:
    3. - ansible kernel==""
    4. - inventory_hostname in groups['']

    2.实施Handlers


    2.1由其他任务通知执行的任务 inactive 任务,通过notify调用。
        每次yum安装都重启。
     

    1. ---
    2. - name: deploy server
    3. hosts: servera
    4. tasks:
    5. - name: install packages
    6. yum:
    7. name: httpd
    8. state: present
    9. notify:
    10. - restart apache
    11. - name: enable httpd service
    12. service:
    13. name: httpd
    14. enabled: yes
    15. state: started
    16. - name: install httpd-manual
    17. yum:
    18. name: httpd-manual
    19. state: present
    20. notify:
    21. - restart apache
    22. handlers:
    23. - name: restart apache
    24. service:
    25. name: httpd
    26. state: restarted

    3.处理Errors


      3.1执行失败
      3.11- 忽略任务 error 
           yum:
               name:
               state:
           
    ignore_errors:yes     
              

    1. ---
    2. - name: deploy server
    3. hosts: servera
    4. gather_facts: no
    5. vars:
    6. doshell:"yes"
    7. tasks:
    8. - shell: cat /etc/hostsads
    9. register: result
    10. ignore_errors: true #忽略失败,执行debug failed
    11. when: doshell == "yes"
    12. - name: success
    13. debug:
    14. msg: success
    15. when: result is succeeded
    16. - name: failed
    17. debug:
    18. msg: failed
    19. when: result is failed
    20. - name: changed
    21. debug:
    22. msg: changed
    23. enabled: yes
    24. when: result is changed
    25. handlers:
    26. - name: restart apache
    27. service:
    28. name: httpd
    29. state: restarted

     3.12失败后handlers是不调用的,如果要执行        
         
    force_handlers:yes

    1. ---
    2. - name:test
    3. hosts:servera
    4. force_handlers: yes #即使失败也要执行
    5. tasks:
    6. - name: a task which always notifies its hander
    7. command: /bin/true
    8. notify: restart the sshd
    9. - name:
    10. yum:
    11. name: notapkg
    12. state: latest
    13. handlers:
    14. - name:
    15. service:
    16. name: sshd
    17. state: restarted

    3.2fail模块
        3.21
    fail模块后是不执行的。
         playbook 要么执行完成退出,要么执行完成退出。如果想中间退出就用fail.

    1. ---
    2. - name:test
    3. hosts:servera
    4. force_handlers: yes #即使失败也要执行
    5. gather_facts: no #不收集
    6. tasks:
    7. - name: a task which always notifies its hander
    8. command: /bin/true
    9. notify: restart the sshd
    10. - fail: #fail后是不执行的
    11. - debug:
    12. msg: hello
    13. handlers:
    14. - name:
    15. service:
    16. name: sshd
    17. state: restarted

    3.22执行任务失败条件
       fail与when配合使用
     
     -fail:
        when:

      或者 failed_when:

     

    1. --- name: test fail module
    2. hosts: servera
    3. tasks:
    4. - shell: /root/adduser
    5. register: command_result
    6. - fail:
    7. msg:" add user "
    8. when: "'failed' in command_result.stdout"
    1. --- name: test fail module
    2. hosts: servera
    3. tasks:
    4. - shell: /root/adduser
    5. register: command_result
    6. - failed_when:"'failed' in command_result.stdout"
    1. --- name: test fail module
    2. hosts: servera
    3. gather_facts: no
    4. tasks:
    5. - shell: /root/adduser
    6. register: command_result
    7. changed_when:"'success' in command_result.stdout"
    8. - debug:
    9. var: command_result
    10. - fail:
    11. msg: "add user"
    12. when:"'failed' in command_result.stdout"

    3.23指定任务变更条件
     changed_when:
     

    1. ---
    2. - name: test when #任务结果状态为改变
    3. hosts:servera
    4. gather_facts:no
    5. tasks:
    6. - name: test changed when
    7. shell: cat /etc/redhat.rel
    8. changed_when:false

    3.3 block:
    3.31多个任务都在when时触发。

    1. ---
    2. - name: block
    3. hosts: servera
    4. tasks:
    5. - block: #when与block对齐
    6. -debug:
    7. msg: task1
    8. -debug:
    9. msg: task2
    10. when: ansible_distrbution=="RedHat"

    3.32block -rescue(block中出错时执行)-always(block是否成功都会运行always)
     


    4.扩展-实施Tags
    4.1执行 tags标签 :         ansible-playbook tags.yml --list-tags
    4.2执行 tags webserver :ansible-playbook tags.yml --tags webserver
    4.3跳过 tags webserver : ansible-playbook tags.yml  --skip-tags webserver


     

    1. ---
    2. - name: test tags
    3. hosts: servera
    4. gather_facts: no
    5. tasks:
    6. - name: httpd is installed
    7. yum:
    8. name: httpd
    9. state: latest
    10. tags: webserver
    11. - name: postfix is installed
    12. yum:
    13. name: postfix
    14. state: latest
    15. tags: mailserver
    16. - name: always debug
    17. debug:
    18. msg: debug
    19. tags:
    20. - always


     

  • 相关阅读:
    QoS服务质量三DiffServ模型报文的标记及PHB
    java-php-python-ssm校园社团管理系统计算机毕业设计
    【力扣刷题】Day01——数组基础
    1130 - Host ‘17216.18083‘ is not allowed to connect to this MySQL server
    [附源码]java毕业设计基于的网上饮品店
    C++ - 类型转换 - static_cast - reinterpret_cast - const_cast - dynamic_cast
    如何在Java、C、Ruby语言中使用Newscatcher API
    水球图-利用动态波纹展示百分比
    读《vue3设计与实现》2- vue的diff算法核心
    macOS - 使用 chromedriver
  • 原文地址:https://blog.csdn.net/aggie4628/article/details/127586024