我一直在尝试创建一个过滤器,它为一些输入添加前缀。在我的例子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,”}
任何人都可以看到实施的问题
提前致谢
答案 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