ansible 自定义filter plugin实现
Posted 艾克的择天记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible 自定义filter plugin实现相关的知识,希望对你有一定的参考价值。
filter,顾名思义,是对传递的变量进行过滤。ansible自带了很多filter,也允许我们自定义filter。
首先我们看一个ansible自带的filter{{ my_variable|default('my_variable is not defined') }}
如果变量没有值,可以定义默认的值
很多时候ansible自带的filter不满足我们自己对变量filter的需求,这个时候需要我们自己定义自己的filter
比如,我要将字符串filter成一个list
mkdir filter_plugins && cd filter_plugins
vim to_list.py
from ansible import errors
def to_list(value):
try:
res_list = value.split(",")
return res_list
except Exception, e:
raise errors.AnsibleFilterError("to list error: %s" % str(e))
class FilterModule(object):
def filters(self):
return {
'to_list': to_list
}
上面这段是我们自己写的filter方法,那么我们怎么去使用它呢?
首先看我们的inventory
[ubuntu]
192.168.1.2 cluster_name=vdnet_1,vdnet_2 ansible_user=root
我们给主机192.168.1.2传递的变量cluster_name要用自定义的filter plugin进行filter
- hosts: ubuntu
gather_facts: no
tasks:
- name: echo cluster name
shell: echo {{ item }}
with_items:
- "{{ cluster_name | to_list }}"
OK,这样就可以了。
最后还有个小问题就是,我们自定义的filter是怎么被找到的呢?
这个就是在ansible.cfg里面去设置我们的自定义filter的路径filter_plugins = /home/bran/ansible_learn
以上是关于ansible 自定义filter plugin实现的主要内容,如果未能解决你的问题,请参考以下文章
Ansible 之 ansible gather_facts配置