【问题标题】:Passing variables to serial plays in AWX or Ansible Tower将变量传递给 AWX 或 Ansible Tower 中的连续播放
【发布时间】:2019-07-17 06:53:10
【问题描述】:

我正在尝试将具有当前日期和时间的变量传递给剧本。目标是在所有受影响的主机上创建一个 DIR 以进行部署,包括当前日期和时间以及秒。主机数量为 12,我在 playbook 中使用“serial: 2”选项仅在 2 台主机上同时运行作业,因此我需要 6 次运行才能完成整个作业。我在 AWX 的 Template 的属性页面上使用 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"
}

...

我也尝试过:

  • 在 playbook YML 文件中赋值

  • 在“AWX-Settings-Jobs-Extra 环境变量”中赋值,然后通过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:  

main.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"}  

【问题讨论】:

    标签: ansible ansible-tower ansible-awx


    【解决方案1】:

    您是否尝试在 playbook 中将其设置为 pre_task 变量。是这样的:

    hosts: hostname
    become: yes
    pre_tasks:
      - name: Get the secrets from Vault
        set_fact:
           date_time: "{{datetime.iso8601_basic_short}}"
    

    【讨论】:

    • 尝试了你的想法,不幸的是工作方式相同。似乎每批都执行预任务。
    猜你喜欢
    • 2021-05-10
    • 2022-06-15
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多