如何在Ansible template模块的Jinja2模板中打印当前日期?
Ansible Jinja2模板输出当前日期解决方案
你原来的写法是直接把shell命令作为普通文本写在模板里,Jinja2不会自动识别执行这类命令,所以会原样输出。可以通过以下两种常用方案实现需求:
方案1:使用Ansible内置facts变量(获取受控端当前日期)
Ansible默认会收集受控节点的系统信息(facts),其中内置的ansible_date_time变量已经包含格式化好的日期数据,直接在模板中引用即可:
Today date is {{ ansible_date_time.date }}
ansible_date_time.date默认输出格式就是YYYY-MM-DD,完全匹配你的需求。如果你的playbook设置了gather_facts: no,需要先开启facts收集或者手动执行setup模块获取变量。
方案2:使用Jinja2 strftime过滤器(获取控制端当前日期)
如果你需要输出Ansible控制节点的当前日期,直接使用Jinja2内置的时间过滤器即可:
Today date is {{ '%Y-%m-%d' | strftime }}
该方法不需要依赖facts收集,渲染模板时直接读取控制节点的系统时间生成日期。
如果你确实需要通过执行shell命令获取日期,可以先在playbook中将命令执行结果注册为变量,再传入模板调用:
- name: 生成日期变量 shell: date +%Y-%m-%d register: custom_date模板中引用写法:
Today date is {{ custom_date.stdout }}
内容的提问来源于stack exchange,提问作者vtr
相关产品推荐
相关产品推荐

