Ansible学习01-条件判断
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible学习01-条件判断相关的知识,希望对你有一定的参考价值。
When 语句
有时候用户有可能需要某一个主机越过某一个特定的步骤.这个过程就可以简单的像在某一个特定版本的系统上 少装了一个包一样或者像在一个满了的文件系统上执行清理操作一样. 这些操作在Ansible上,若使用when
语句都异常简单.When语句包含Jinja2表达式 实际上真的很简单:
tasks:
- name: "yum install lrzsz"
command: /sbin/shutdown -t now
when: ansible_os_family == "Centos"
解释
当系统是centos的时候才会执行上面的command,否则是不会执行的
系统类型: **ansible docker -m setup ** 来查看
例子:
[email protected]:~# ansible docker -m setup|grep os_family
"ansible_os_family": "RedHat",
"ansible_os_family": "Debian",
文件判断:
tasks:
- command: /bin/false
register: result
ignore_errors: True
- command: /bin/something
when: result|failed
- command: /bin/something_else
when: result|success
- command: /bin/still/something_else
when: result|skipped
解释
当第一个command返回值为failed
第二个在返回值为failed的时候执行,否则执行第三个,当为命令为skipped的时候执行第三个
或者使用vars来实现
vars:
epic: true
一个条件选择执行也许看起来像这样:
tasks:
- shell: echo "This certainly is epic!"
when: epic
或者像这样:
tasks:
- shell: echo "This certainly isn‘t epic!"
when: not epic
如果一个变量不存在,你可以使用Jinja2的`defined`命令跳过或略过.例如:
tasks:
- shell: echo "I‘ve got ‘{{ foo }}‘ and am not afraid to use it!"
when: foo is defined
- fail: msg="Bailing out. this play requires ‘bar‘"
when: bar is not defined
例子:
- hosts: docker
remote_user: root
vars:
epic: true
tasks:
- name: file exeit
shell: ls /home/sh
register: result
ignore_errors: True
- file: path=/home/sh state=directory mode=644
when: result|failed #如果文件不存在 会创建
- file: path=/opt/sh state=directory mode=644
when: epic
#我现在是/opt/sh目录不存在,/home/sh目录存在
[email protected]:/data/sh# ls /opt/sh
ls: 无法访问/opt/sh: 没有那个文件或目录
[email protected]:/data/sh# ls /home/sh/
![](http://i2.51cto.com/images/blog/201812/13/ca5b8c55aa74a71eb2d4e7e3c9f08b12.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
剩下的失败和skipped需要自己去实现了
note当同时使用when
和with_items
句对于不同项目将会单独处理
tasks:
- command: echo {{ item }}
with_items: [ 0, 2, 4, 6, 8, 10 ]
when: item > 5
应用于role里面
- hosts: webservers
roles:
- { role: debian_stock_config, when: ansible_os_family == ‘Debian‘ }
以上是关于Ansible学习01-条件判断的主要内容,如果未能解决你的问题,请参考以下文章