我正在尝试使用当前日期和时间将变量传递给剧本。目标是在所有受影响的主机上创建一个 DIR 以进行部署,包括当前日期和时间以及秒。主机数量为 12,我使用 playbook 中的“serial: 2”选项仅在 2 台主机上同时运行作业,因此我需要 6 次运行才能完成整个作业。我在 AWX 的模板属性页面上使用 Extra Variables 字段来传递变量 - datetime: '{{ansible_date_time}}',但是这个变量的值随着每次连续播放而变化,因此创建的 DIR 在不同的主机上具有不同的名称。
现在我在 Roles 的 main.yml 中使用以下代码进行调试:
- name: Debug date and time
debug:
msg: "{{datetime.iso8601_basic_short}}"
我得到了什么:
TASK [Gathering Facts] *********************************************************
ok: [server1]
ok: [server2]
TASK [dqtestrole : Debug date and time] ****************************************
ok: [server1] => {
"msg": "20190717T094151"
}
ok: [server2] => {
"msg": "20190717T094151"
}
PLAY [Deploy WAR-file for Tomcat] **********************************************
TASK [Gathering Facts] *********************************************************
ok: [server3]
ok: [server4]
TASK [dqtestrole : Debug date and time] ****************************************
ok: [server3] => {
"msg": "20190717T094155"
}
ok: [server4] => {
"msg": "20190717T094155"
}
...
我也尝试过:
在剧本 YML 文件中赋值
在“AWX-Settings-Jobs-Extra environment variables”中赋值,然后通过lookup('env','datetime')访问
所以,我确信存在正确的方法,但是在谷歌搜索和尝试几天后,我仍然找不到它。有人有什么建议吗?提前致谢。
添加
用 Pre-tasks 尝试了 Pouyan 的想法,工作方式相同。
- name:
hosts: dc1
serial: 2
pre_tasks:
- name: Get time and date
set_fact:
date_time: "{{datetime.iso8601_basic_short}}"
roles:
主要.yml:
msg: "{{datetime.iso8601_basic_short}}, {{date_time}}"
结果:
ok: [server1] => {"msg": "20190717T114204, 20190717T114204"}
ok: [server2] => {"msg": "20190717T114204, 20190717T114204"}
......
ok: [server3] => {"msg": "20190717T114208, 20190717T114208"}
ok: [server4] => {"msg": "20190717T114207, 20190717T114207"}