ansible的Conditionals 和 loops 和salt-stack比起来真的太强大了。 salt-stack使用判断循环,好像,只能使用模板里面的判断和循环。 而ansible本身自带了适用于各种场景的判断循环插件。。
不但如此,像loops,我们还可以自己编写插件,满足我们的实际需求。
先说说Conditionals吧
Conditionals相对loops来说,简单,就一个关键字when
和咱们其他的程序语言的条件判断一个样,when 后面也是加一个bool值,或者bool值的结果
下面举个小例子,看看when和loops的用法,
结果执行起来太多了,就不贴出来了。 把脚本贴出来,大伙可以自己执行下
---
- hosts: salt-master
tasks:
- name: with_items,参数为列表,列表元素为字符串或字典
debug: msg=‘{{item.name}} and {{item.age}}‘
with_items:
- {name: ‘lixc‘,age: 25}
- {name: ‘liss‘,age: 24}
when: 1
- name: with_nested,打印嵌套列表,参数为列表,列表元素为列表
debug: msg=‘{{item[0]}} and {{item[1]}}‘
with_nested:
- [‘lixc‘,‘liss‘]
- [1,2]
when: ansible_os_family == "Debian"
- name: with_dict,循环字典,参数为字典
debug: msg=‘{{item.key}} and {{item.value}}‘
with_dict:
ansible:
cmd: commandline
ply: playbooks
salt:
cmd: commandline
st: state
when: ansible_os_family == "Debian" and "8"|int >= 6
- name: with_fileglob,遍历文件夹下的文件,不包括文件夹,roles可为相对路径
debug: msg={{item}}
with_fileglob:
- /tmp/test1/*
- /tmp/test2/*
when: lixc is not defined
- name: with_sequence,获得整数序列
debug: msg={{item}}
with_sequence: start=4 end=8 stride=2
when: 1 in [1,2,3]这里面列举了Conditionals和loops的部分用法,当然用法绝不仅止这些的。关键是能把Conditionals和loops和变量结合着来用,就OK了。
上面咱们不是说可以自定义loops的插件吗,下面,楼主也自己整个小插件玩玩。
ansible的loops插件是在这个目录下面的。
这个目录,就是ansible所有的loops插件都在这里面。 这个walkdir.py插件是楼主自己弄的一个。
楼主这个插件是干什么活的呢?
咱们前面举了一个fileglob这个ansible自带的插件,这个插件可以变量文件夹下的文件,但是不包括子目录及文件。
楼主这个插件,则可以遍历目录下所有的文件及子目录下的文件。
看看楼主的代码吧
OK,咱们来看看playbooks是咋定义的吧
好,咱们来看看执行结果
本文出自 “西风” 博客,请务必保留此出处http://lixcto.blog.51cto.com/4834175/1434111
ansible(七)Conditionals 和 loops,自定义loops插件,布布扣,bubuko.com
ansible(七)Conditionals 和 loops,自定义loops插件
原文地址:http://lixcto.blog.51cto.com/4834175/1434111