尝试在ansible playbook中动态引用jinja模板

尝试在ansible playbook中动态引用jinja模板,ansible,jinja2,Ansible,Jinja2,我正在尝试动态引用从artifactory中提取的j2模板。 以下代码起作用: - name: Confiure the sqoop templates template: src="{{ item }}" dest="{{ local_root }}/{{ FEED_NAME }}/{{ FEED_SCHEMA }}/sqoopgen_jobs/{{ item|replace(\"/tmp/tardis/\", \"\") }}" mode=0744 with_filegl

我正在尝试动态引用从artifactory中提取的j2模板。 以下代码起作用:

  - name: Confiure the sqoop templates
    template: src="{{ item }}" dest="{{ local_root }}/{{ FEED_NAME }}/{{ FEED_SCHEMA }}/sqoopgen_jobs/{{ item|replace(\"/tmp/tardis/\", \"\") }}" mode=0744
    with_fileglob:
    - "/tmp/{{ FEED_NAME }}/*.j2"
以下情况不适用:

  - name: Confiure the sqoop templates
    template: src="{{ item }}" dest="{{ local_root }}/{{ FEED_NAME }}/{{ FEED_SCHEMA }}/sqoopgen_jobs/{{ item|replace(\"/tmp/{{ FEED_NAME }}/\", \"\") }}" mode=0744
    with_fileglob:
    - "/tmp/{{ FEED_NAME }}/*.j2"
失败并出现错误:

失败:[host_ip]=>(item=/tmp/tardis/forecast.j2)=>{“changed”:true,“failed”:true,“invocation”:{“module_args”:{“backup”:false,“content”:null,“delimiter”:null,“dest”:/path/tardis/tardis/sqoopgen_jobs//tmp/tardis/forecast.j2”,“directory_mode”:null,“follower”:true,“force”:true,“group”:null,“mode”:“0744”,“original_basename”:“forecast.j2”,“owner”:null,“regexp”:null,“remote_src”:null,“selevel”:null,“serole”:null,“setype”:null,“seuser”:null,“src”:/home/jenkins/.ansible/tmp/ansible-tmp/ansible-tmp-1457719702.84-279730849155325/source”,“validate”:null},“item”:/tmp/tardis/forecast.j2”,“msg”:“目标目录/path/tardis/tardis/sqoopgen\u jobs//tmp/tardis不存在”}

我将此理解为ansible不在变量中展开变量的情况:

在这种情况下,最好的方法是什么?我想让剧本尽可能通用

ansible 2.0.1.0


谢谢

您不能像这样嵌套Jinja表达式:

{{ item|replace("/tmp/{{ FEED_NAME }}/", "") }}
您想要的是连接字符串

{{ item|replace("/tmp/" ~ FEED_NAME ~ "/", "") }}
见:

~ 将所有操作数转换为字符串并将其串联

{{“Hello”~name~“!”}
将返回(假设name设置为
'John'
Hello John!

  - name: Configure the sqoop templates
    template:
      src: "{{ item }}"
      dest: "{{ local_root }}/{{ FEED_NAME }}/{{ FEED_SCHEMA }}/sqoopgen_jobs/{{ item|replace('/tmp/' ~ FEED_NAME ~ '/', '') }}"
      mode: 0744
    with_fileglob:
      - "/tmp/{{ FEED_NAME }}/*.j2"