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



我试图使用Ansible将一些jinja2模板放入目录,例如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"
]
}

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

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

有一些事情在起作用。

最重要的是,你错过了with_nested:的金贾替代品;我根本不知道你为什么会得到"a"one_answers"b",因为这显然是你给with_nested:str中的list。我相信你想要with_nested: "{{ test_var }}"。ansible可能"帮助"了你,因为你使用的是令人难以置信、令人不安的古代版本的ansible,但现代版本不会自动将该名称强制转换为变量,所以要注意。

然而,即使修复它也不能解决您的问题,因为with_nested:想要listlist,而不是dictlist;正如你从精细手册中看到的,它实际上是在调用{{ with_nested[0] | product(with_nested[1]) }},而dict的乘积是.keys()tuplelist,这解释了你看到的的"a"one_answers"b">

如果您希望srcdest分别是ab密钥的值,那么跳过伪装并以这种方式构造with_nested:

with_nested:
- '{{ test_var | map(attribute="a") | list }}'
- '{{ test_var | map(attribute="b") | list }}'

相关内容

  • 没有找到相关文章

最新更新