如何在Ansible剧本启动时生成固定时间戳常量 无需set_fact与重复lookup
解决方案
你可以直接使用Ansible内置的ansible_play_start全局变量实现需求,该变量是剧本启动时自动在控制节点生成的固定时间对象,全剧本生命周期内不会发生变化,无需额外任务、无需调用set_fact、无需重复执行lookup。
直接在module_defaults中按你的时间格式进行格式化即可,示例配置如下:
- hosts: - localhost module_defaults: group/ns.col.session: sid: "{{ ansible_play_start.strftime('%Y-%m-%d-%H%M') }}"
补充说明
ansible_play_start为Ansible 2.8及以上版本内置变量,完全满足所有约束条件:- 无需额外运行任何任务,剧本解析启动阶段自动生成
- 全局固定,任意位置调用返回的都是同一个时间值
- 无需单独为获取时间戳配置控制节点执行的任务
如果你的Ansible版本低于2.8,可以使用命令行传参的方式实现,调用剧本时执行:
ansible-playbook your_playbook.yml -e "sid=$(date '+%Y-%m-%d-%H%M')"
剧本中直接引用{{ sid }}即可,该值同样全局固定。
内容的提问来源于stack exchange,提问作者Dhiwakar Ravikumar
相关产品推荐
相关产品推荐

