Ansible 变量元';无法正确过滤
我做错了什么? 我使用下面的任务获取主机的所有已定义日志目录。这些信息存储在一个事实中,这是一个dict,它就像一个符咒Ansible 变量元';无法正确过滤,ansible,Ansible,我做错了什么? 我使用下面的任务获取主机的所有已定义日志目录。这些信息存储在一个事实中,这是一个dict,它就像一个符咒 - name: get all_log_dirs set_fact: all_log_dirs="{{ (all_log_dirs|default({})) | combine( { item.key:vars[item.key] } ) }}" with_dict: "{{ vars }}" when: item.key is search('^((?!
- name: get all_log_dirs
set_fact:
all_log_dirs="{{ (all_log_dirs|default({})) | combine( { item.key:vars[item.key] } ) }}"
with_dict: "{{ vars }}"
when: item.key is search('^((?!splunk).)*_log_dir')
以下是适当的输出:
但问题是,如果我现在想用新的dict来表示e。g、 :
- name: create symlink for splunk if not present
file:
src: "{{ item.value }}"
dest: "{{ splunk_log_dir }}/{{ item.key | regex_replace('_server_log_dir|_log_dir') | regex_replace('eap','jboss-eap') }}"
state: link
with_dict: "{{ all_log_dirs }}"
我只得到:
}
为什么Ansible没有正确过滤{{server\u deployment\u dir}}}?
即使我将src改为dest,它也不会工作,因为变量没有被过滤
{{server\u deployment\u dir}}的值当然是特定于主机的,类似于/opt/applicationXY/appDeployDir不要使用
vars
对象。句号
它是内部可变存储,用于发动机罩下使用
当Ansible模板引擎检测到vars
access时,它停止进一步的模板链
例如:
---
- hosts: localhost
connection: local
gather_facts: no
vars:
myvar1: hello
myvar2: world
myvar3: "{{ myvar2 }}"
tasks:
- debug:
msg: "{{ myvar1 }} {{ myvar3 }}"
- debug:
msg: "{{ vars['myvar1'] }} {{ vars['myvar3'] }}"
结果:
TASK [debug] ***************************
ok: [localhost] => {
"msg": "hello world"
}
TASK [debug] ***************************
ok: [localhost] => {
"msg": "hello {{ myvar2 }}"
}
更新:如果您完全需要通过vars对象访问变量,Ansible 2.5中提供了vars
查找功能;它会像往常一样模板化值:
例如
在我上一个例子的上下文中,
hello world
的结果。非常好,非常感谢。
---
- hosts: localhost
connection: local
gather_facts: no
vars:
myvar1: hello
myvar2: world
myvar3: "{{ myvar2 }}"
tasks:
- debug:
msg: "{{ myvar1 }} {{ myvar3 }}"
- debug:
msg: "{{ vars['myvar1'] }} {{ vars['myvar3'] }}"
TASK [debug] ***************************
ok: [localhost] => {
"msg": "hello world"
}
TASK [debug] ***************************
ok: [localhost] => {
"msg": "hello {{ myvar2 }}"
}
- debug:
msg: "{{ lookup('vars','myvar1') }} {{ lookup('vars','myvar3') }}"