0

我正在尝试使用当前日期和时间将变量传递给剧本。目标是在所有受影响的主机上创建一个 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"}  
4

1 回答 1

0

您是否尝试将其设置为剧本中的 pre_task 变量。它是这样的:

hosts: hostname
become: yes
pre_tasks:
  - name: Get the secrets from Vault
    set_fact:
       date_time: "{{datetime.iso8601_basic_short}}"
于 2019-07-17T08:21:38.840 回答