5.5_Ansible中的任务执行控制

##1.循环##

#循环迭代任务#

(1)简单循环

复制代码
loop:
  - value1    ##赋值列表
  - value2
  - ...

{{item}}      ##迭代变量名称

#实例#
---
- name: create file
  hosts: 172.25.0.254
  tasks:
    - name: file module
      file:
        name: /mnt/{{item}}
        state: present
      
      loop:
        - westos_file1
        - westos_file2

(2)循环散列或字典列表

复制代码
---
- name: create file
  hosts: 172.25.0.254
  tasks:
    - name: file module
      service:
        name: "{{ item.name}}"
        state: "{{ item.state }}"
      
      loop:
        - name: httpd
          state: started
        - name: vsftpd
          state: stopped

测试:

安装并开启vsftpd、apache、dns,并在火墙中允许这些服务访问。

##2.条件##

复制代码
when:
  - 条件1
  - 条件2 

#条件判断#
 =    value == "字符串",value == 数字
 <    value <  数字
 >    value >  数字
 <=   value <= 数字
 >=   value >= 数字 
 !=   value != 数字
 is defined value   value is defined        变量存在
 is not defined     value is not defined    变量不存在
 in                 value is in value       变量为   
not in              value is not in value   变量不为
bool变量 为true      value                   value的值为true
bool变量 false       not value               value的值为false
                     value in value2        value的值在value2列表中

复制代码
#多条条件组合#
when:
  条件1 and 条件2
  - 条件1
  - 条件2

when:
  条件1 or 条件2
 
when: >
  条件1
  or
  条件2

测试题:

建立playbook ~/ansibles/lvm.yml要求如下:

*建立大小为1500M名为exam_lvm的lvm 在westos组中

*如果westos不存在请输出:

vg westos is not exist

*如果westos大小不足1500M请输出:

vg westos is less then 1500M

并建立800M大小的lvm

##3.触发器##

notify: 触发器当遇到更改时触发handlers

handlers:触发器触发后执行的动作

复制代码
#实例#---- name: create virtualhost for web server
  hosts: 172.25.0.254
  vars_files:
    ./vhost_list.yml
  tasks:
    - name: create document
      file:
        path: "{{web2.document}}"
        state: directory
    - name: create vhost.conf
      copy:
        dest: /etc/httpd/conf.d/vhost.conf
        content:
          "<VirtualHost *:{{web1.port}}>\n\tServerName {{web1.name}}\n\tDocumentRoot 
{{web1.document}}\n\tCustomLog logs/{{web1.name}}.log combined\n</VirtualHost>\n\n<VirtualHost *:
 {{web2.port}}>\n\tServerName {{web2.name}}\n\tDocumentRoot {{web2.document}}\n\tCustomLog logs/
 {{web2.name}}.log combined\n</VirtualHost>"
      notify:
        restart apache
 
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

#4.处理失败任务#

(1)ignore_errors

#作用:

当play遇到任务失败是会终止

ignore_errors: yes将会忽略任务失败使下面的任务继续运行

复制代码
#实例#
- name: test
  dnf:
    name: westos
    state: latest
  ignore_errors: yes
  
- name: create file
  file:
    path: /mnt/westos
    state: touch

(2)force_handlers#

#作用:

#当任务失败后play被终止也会调用触发器进程

复制代码
#example
---
- name: apache change port
  hosts: 172.25.0.254
  force_handlers: yes
  vars:
    http_port: 80
  tasks:
    - name: configure apache conf file
      lineinfile:
        path: /etc/httpd/conf/httpd.conf
        regexp: "^Listen"
        line: "Listen {{ http_port }}"
      notify: restart apache
    
    - name: install error
      dnf:
        name: westos
        state: latest
 
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted
        enabled: yes

(3)changed_when#

#作用:

#控制任务报告它已进行更改

复制代码
#实例
---
- name: apache change port
  hosts: 172.25.0.254
  force_handlers: yes
  vars:
    http_port: 8080
  tasks:
    - name: configure apache conf file
      lineinfile:
        path: /etc/httpd/conf/httpd.conf
        regexp: "^Listen"
        line: "Listen {{ http_port }}"
      changed_when: true
      notify: restart apache
  
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted
        enabled: yes

(4)failed_when#

#当符合条件时强制任务失败

复制代码
---
  - name: test
  hosts: 172.25.0.254
  tasks:
    - name: shell
      shell: echo hello
      register: westos
      failed_when: "'hello' in westos.stdout"

(5)block

block: ##定义要运行的任务

rescue: ##定义当block句子中出现失败任务后运行的任务

always: ##定义最终独立运行的任务

#测试练习#

挂载/dev/cdrom到/mnt/isodir里

如果/mnt/isodir不存在 -----> /mnt/isodir is not exist -----> create /mnt/isodir

如果/mnt/isodir存在 -----> 直接挂载

相关推荐
风送雨16 分钟前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
model20051 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
yuhaiqun19892 小时前
学服务器训练AI模型:5步路径助力高效入门
运维·服务器·人工智能·笔记·机器学习·ai
阿杰 AJie2 小时前
主流传输 /通信协议的【使用场景 + 详细使用说明】大全
服务器·tcp/ip
工程师老罗2 小时前
龙芯2k0300 PMON取消Linux自启动
linux·运维·服务器
千百元3 小时前
centos如何删除恶心定时任务
linux·运维·centos
skywalk81633 小时前
网站证书自动续订失败的问题解决,原来是续订指令certbot renew出错,导致crontab定时任务续订失败
运维·服务器·证书·certbot
额呃呃3 小时前
游戏服务器和一般高性能服务器的区别
运维·服务器·游戏
liwulin05063 小时前
【JAVA】创建一个不需要依赖的websocket服务器接收音频文件
java·服务器·websocket
gaize12133 小时前
服务器分类及区别划分!多样化服务器用途体系架构及层次分类
运维·服务器·架构