Ansible没有在文件之间传递变量

时间:2019-02-06 01:40:14

标签: ansible ansible-template

我试图使用Ansible将一些jinja2模板放到目录中,例如npm run <script name>

在我的path/from/*.j2 to path/to/*.txt中:

./defaults/main.yml

在我的--- test_var: - a: 1 b: 2 - a: 10 b: 20 中:

./tasks/main.yml

在我的--- - name: "Copy file" include: copy-files.yml with_nested: - test_var loop_control: loop_var: test_loop 中:

./tasks/copy-files.yml

我遇到以下错误:

---

- name: "copy {{ test_loop }}"
  template:
    src: "{{ test_loop.0.a }}"
    dest: "{{ test_loop.0.b }}"

然后我使用调试,发现变量丢失了。

fatal: [localhost]: FAILED! => {"failed": true, "msg": "'unicode object' has no attribute 'b'"}

那么这里可能出什么问题了? task path: ./tasks/main.yml Wednesday 06 February 2019 01:15:10 +0000 (0:00:00.286) 0:00:04.308 **** ok: [localhost] => { "msg": [ { "a": 1, "b": 2 }, { "a": 10, "b": 20 } ] } TASK [./ : Copy files] ******** task path: ./tasks/main.yml Wednesday 06 February 2019 01:15:11 +0000 (0:00:00.064) 0:00:04.373 **** TASK [./ : debug] ******************************* task path: ./tasks/copy-files.yml Wednesday 06 February 2019 01:15:11 +0000 (0:00:00.089) 0:00:04.463 **** ok: [localhost] => { "msg": [ "a", "b" ] }

1 个答案:

答案 0 :(得分:1)

  

那么这里可能出什么问题了?

有些事情在起作用。

首先,您缺少with_nested:的Jinja替换;我不知道您为什么还会得到“ a”和“ b”,因为很显然这是您喂给list的{​​{1}}中的str。我相信您想要with_nested:。 Ansible可能是“帮助”您的,因为您使用的是令人难以置信的,令人不安的古老版本,但是现代版本不会自动将其强制转换为变量,因此请注意。 / p>

但是,即使解决该问题也无法解决您的问题,因为with_nested: "{{ test_var }}"想要with_nested:的{​​{1}},而不是list的{​​{1}};从the fine manual中可以看出,它实际上是在调用list的{​​{1}},而list的{​​{1}}是其{{ 1}},说明您看到的“ a”和“ b”

如果您想让dict{{ with_nested[0] | product(with_nested[1]) }}分别是dictlist键的值,则跳过假装并构造tuple方式:

.keys()