是否可以在vars文件本身中引用vars文件内部定义的变量



在vars文件中,我想使用在该vars文件内部定义的变量,如下所示:

---
# file vars/users.yml
timestamp:
sep2023: 1693864800 # date --date=09/05/2023 +%s

users:
a_user:
name: a_user
passwd: $6$FF.DN/vbue.2i9/vla6h8xpZhx4L/dppBbnnCWN8hZ0
uid: 3007
comment: log receiver
expires: '{{timestamp.sep2023}}'

但当我用ansible.builtin.include_vars加载时,就像这样:

tasks:
- name: load user base
ansible.builtin.include_vars:
file: users.yml
name: users

我得到错误:

"时间戳"未定义

我该怎么做?

这是没有名字的工作,就像这样:

tasks:
- name: load user base
ansible.builtin.include_vars:
file: users.yml

所以这里有一个解决方案。但是如果我想保留一个名称空间,没有找到解决方案。带有:

tasks:
- name: load user base
ansible.builtin.include_vars:
file: users.yml
name: users

和:

---
# file vars/users.yml
timestamp:
sep2023: 1693864800 # date --date=09/05/2023 +%s

users:
a_user:
name: a_user
passwd: $6$FF.DN/vbue.2i9/vla6h8xpZhx4L/dppBbnnCWN8hZ0
uid: 3007
comment: log receiver
expires: '{{users.timestamp.sep2023}}'

我得到错误:

recursive loop detected in template string: {{users.timestamp.sep2023}}"}

如果我为名称空间选择另一个不同于文件名的名称,如:

tasks:
- name: load user base
ansible.builtin.include_vars:
file: users.yml
name: users2

然后:

expires: '{{user.timestamp.sep2023}}'

失败并出现错误:

'users' is undefined

和:

expires: '{{user2.timestamp.sep2023}}'

失败并出现错误:

recursive loop detected in template string: {{users2.timestamp.sep2023}}"}

真正的解决方案是使用YAML锚(由于βεηιτβε(,而不考虑任何可能的考虑因素:

---
# file vars/users.yml
timestamp:
- &sep2023 1693864800 # date --date=09/05/2023 +%s
users:
a_user:
name: a_user
passwd: $6$FF.DN/vbue.2i9/vla6h8xpZhx4L/dppBbnnCWN8hZ0
uid: 3007
comment: log receiver
expires: *sep2023

最新更新