首页 > 解决方案 > 从 Jinja 表达式中减去日期

问题描述

我想从current_date_operationAnsible 任务中删除 1 个月。这是我尝试过的:

vars:
  # for example current
  current_date_operation: "{{ ansible_date_time.date }}" 
  previous_date_operation : "{{ '%Y-%m-%d'|strftime(current_date_operation.epoch|int - 2592000) }}"

不幸的是,上面的代码给出了以下错误:

"msg": "任务包含一个带有未定义变量的选项。错误是:'ansible.utils.unsafe_proxy.AnsibleUnsafeText 对象'没有属性'epoch'

任何想法?

谢谢

标签: dateansiblejinja2subtraction

解决方案


在您的vars声明中,您首先date从 object 获取密钥ansible_date_time

在下一行,您正在使用该 set 变量(它是一个字符串)并调用它epoch不存在的键,因为它是父对象的属性(即ansible_date_time)。由于您的 var 声明无法正确解析,因此 var 本身是未定义的。

以下剧本演示了您可以通过修复 vars 定义来获得预期的结果:

---
- hosts: localhost
 
  vars:
    current_date_operation: "{{ ansible_date_time.date }}"
    previous_date_operation : "{{ '%Y-%m-%d' | strftime(ansible_date_time.epoch | int - 2592000) }}"
 
  tasks:
    - debug:
        var: current_date_operation
    - debug:
        var: previous_date_operation

测试运行:

$ ansible-playbook playbook.yml 

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "current_date_operation": "2020-01-14"
}

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "previous_date_operation": "2019-12-15"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

推荐阅读