在过滤器中访问ansible变量

时间:2018-03-14 15:17:17

标签: filter ansible

我一直在尝试创建一个过滤器,它为一些输入添加前缀。在我的例子inventory_dir和role_name。

中,前缀应该包含一些ansible变量

我尝试实现以下代码:

from ansible import errors

def role_file(self):
    try:
        return inventory_dir + "/roles/" + role_name
    except Exception, e:
        raise errors.AnsibleFilterError(
                'role_file plugin error: {0}, self={1},'.format(str(e), str(self)))

class FilterModule(object):
    ''' prefix a file resource to the inventory directory '''
    def filters(self):
        return {
            'role_file': role_file
        }

我的剧本如下:

---
- hosts: messagebus
  tasks:
    - debug:
        msg: "Hello World {{ 'abc' | role_file }}"

我收到以下错误消息:

致命:[localhost]:失败! => {“msg”:“role_file插件错误:未定义全局名称'inventory_dir',self = abc,”}

任何人都可以看到实施的问题

提前致谢

2 个答案:

答案 0 :(得分:1)

评论中的回答:

  

您可以定义变量inv_prefix: "{{ inventory_dir + '/roles/' + role_name }}"并在copy / template中将其用作src: "{{ inv_prefix }}/myfile"

答案 1 :(得分:0)

您还可以将变量传递给python过滤器,例如:

{{ 'abc' | role_file(param2,param3) }}"

def role_file(self, param1,param2,param3):
    try:
        return param2 + "/roles/" + param3