Ansible 变量元';无法正确过滤

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('^((?!

我做错了什么? 我使用下面的任务获取主机的所有已定义日志目录。这些信息存储在一个事实中,这是一个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('^((?!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') }}"