Ansible如何在jinja2模板中引用项目

时间:2016-05-25 12:12:59

标签: ansible ansible-playbook

我有如下游戏

iterator=1;
subpaths=$(git config --file .gitmodules --get-regexp path | awk '{ print $2}');
subrepos=$(git config --file .gitmodules --get-regexp url | awk '{ print $2}');
for path in $subpaths; do
  repo=$(echo "$subrepos"| sed $iterator'q;d');
  git submodule add $repo $path;
  let iterator++;
done

default.prf.j2文件的内容如下

    - name: create the unison preference file
      template:
      src: default.prf.j2
      dest: /root/.unison/{{ item }}.prf
      with_items: groups['ndeployslaves']

项目变量在模板中不起作用,我收到错误

任务[unison_master:创建协调prefrence文件] ************************ 致命:[127.0.0.1]:失败! => {"失败":是的," msg":"' item'未定义"}

如何引用播放中使用的模板中的项目?

2 个答案:

答案 0 :(得分:1)

由于它不允许您在模板中使用{{item}},因此您可以这样做:

- name: create the unison preference file
  copy:
    src: default.prf
    dest: "/root/.unison/{{ item }}.prf"
    force: no
  with_items: "{{ groups['ndeployslaves'] }}"

- name: edit preference file
  lineinfile:
    dest: "/root/.unison/{{ item }}.prf"
    line: "root = ssh://root@{{item}}//home"
    regexp: '^root = ssh://'
  with_items: "{{ groups['ndeployslaves'] }}"

本地主机上default.prf的内容应为:

root = /home
root = ssh://
ignore = Path virtfs
ignore = Path */mail

但是我在模板中使用了{{item}}。你确定你的空白是正确的吗? src和dest需要缩进比模板更深的一个级别,但with_items需要与模板处于同一级别。

- name: create the unison preference file
  template:
    src: default.prf.j2
    dest: "/root/.unison/{{ item }}.prf"
  with_items: "{{ groups['ndeployslaves'] }}"

答案 1 :(得分:0)

错误是由缩进错误引起的 with_items: groups['ndeployslaves']缩进了一个比它应该更深的水平。