Ansible-playbook 条件判断when、pause(学习笔记二十三)

简介: 有一些模块,例如copy这个模块有一些机制能跳过本次模块的运行.其实我们也可以使用自己的条件语句去配置跳过模块,这样方便你服务能够选择使用不同的包管理(apt,yum)和不同的文件系统.

有一些模块,例如copy这个模块有一些机制能跳过本次模块的运行.其实我们也可以使用自己的条件语句去配置跳过模块,这样方便你服务能够选择使用不同的包管理(apt,yum)和不同的文件系统.并且你还可以使用set_fact这个模块做成更多的差异配置

你能够使用when这个关键字去达到跳过本次模块运行的效果,when关键字后面跟着的是python的表达式,在表达式中你能够使用任何的变量或者fact,当表达式的结果返回的是false,便会跳过本次的模块

下面一段配置就说明了如何在debian和redhat系统中选择apt还是yum包管理,并且如果不是以上两个系统,会用debug模块把系统打印出来

---

- name: Install VIM

  hosts: all

  tasks:

    - name: Install VIM via yum

      yum: name=vim-enhanced state=installed

      when: ansible_os_family == "RedHat"

    - name: Install VIM via apt

      apt: name=vim state=installed

      when: ansible_os_family == "Debian"

    - name: Unexpected OS family

      debug: msg="OS Family {{ ansible_os_family }} is not supported" fail=yes

      when: not ansible_os_family == "RedHat" or ansible_os_family == "Debian"

条件语句还有一种用法,它还可以让你当达到一定的条件的时候暂停下来,等待你的输入确认.一般情况下,当ansible遭遇到error时,它会直接结束运行.那其实你可以当遭遇到不是预期的情况的时候给使用pause模块,这样可以让用户自己决定是否继续运行任务

name: pause for unexpected conditions

pause: prompt="Unexpected OS"

when: ansible_os_family != "RedHat"

下面一些情景建议你使用条件语句做跳过动作

job里面有不同操作系统的机器

提示用户,然后再执行操作请求

提高性能,避免运行一个需要执行一段时间模块,而且你知道这个模块不会返回changed

目录
相关文章
|
Shell 网络安全 开发工具
|
XML NoSQL 关系型数据库
实现 Ansible 企业级用法 playbook| 学习笔记
快速学习实现 Ansible 企业级用法 playbook
205 0
实现 Ansible 企业级用法 playbook| 学习笔记
|
Shell Linux Python
[Ansible专栏]Ansible条件判断的介绍和使用
[Ansible专栏]Ansible条件判断的介绍和使用
|
关系型数据库 MySQL 应用服务中间件
|
缓存 运维 负载均衡
Ansible-playbook 的编写 | 学习笔记
快速学习Ansible-playbook 的编写
Ansible-playbook 的编写 | 学习笔记
|
NoSQL Shell 应用服务中间件
Ansible-playbook 应用变量(学习笔记二十)
文件 [root@ansible-server ansible]# tree ./ ./ ├── hosts └── var.yaml hosts 文件 [web] 192.
1108 0
|
JSON Shell 数据格式
Ansible-playbook 变量进阶(学习笔记二十五)
1、register结果返回到变量中 - name: debug test one host   hosts: 200.200.6.53   tasks:     - debug:         msg: "System {{ inventory_h...
1371 0
|
NoSQL Apache Redis
Ansible-playbook 基本语法与实例(学习笔记十九)
1、安装apache,做初始配置,并启动服务: 这个是你选择的主机 hosts: webservers 这个是变量 vars: http_port: 80 max_clients: 200 远端的执行权限 remote_user: root t...
1304 0