【发布时间】:2020-12-31 12:19:59
【问题描述】:
我一直在疯狂地寻找解决方案,但到目前为止我一直没有成功:计算库存变量和 Ansible 事实之间的天数。
当我手动设置两个变量时我没有问题,两者都被识别为日期,我可以从那里开始工作:(这是预期的输出)
在 2 个手动设置的变量之间工作的任务:
---
- hosts: localhost
vars:
prev_date: 2020-12-01
cur_date: 2020-12-31
tasks:
- name: prev_date debug
debug:
msg:
- "prev_date: {{ prev_date }}"
- "prev_date type: {{ prev_date | type_debug }}"
- name: cur_date debug
debug:
msg:
- "cur_date: {{ cur_date }}"
- "cur_date type: {{ cur_date | type_debug }}"
# This is the output I want to get but I want cur_date from a dynamic source (fact or shell through register)
- name: Calculate number of days between prev_date and cur_date (intended result)
debug:
msg: "Number of days = {{ (cur_date - prev_date).days }}"
工作输出:
TASK [prev_date debug] *************************************************************************************************************************************************
Thursday 31 December 2020 12:55:28 +0100 (0:00:00.227) 0:00:00.227 *****
ok: [localhost] => {
"msg": [
"prev_date: 2020-12-01",
"prev_date type: date"
]
}
TASK [cur_date debug] **************************************************************************************************************************************************
Thursday 31 December 2020 12:55:29 +0100 (0:00:00.249) 0:00:00.476 *****
ok: [localhost] => {
"msg": [
"cur_date: 2020-12-31",
"cur_date type: date"
]
}
TASK [Calculate number of days between prev_date and cur_date (intended result)] ***************************************************************************************
Thursday 31 December 2020 12:55:29 +0100 (0:00:00.144) 0:00:00.621 *****
ok: [localhost] => {
"msg": "Number of days = 30"
}
现在,由于变量类型,我想使用 ansible fact 在每次运行时动态获取当前日期 (ansible_date_time.date)
重现错误的任务示例
- name: Value and type of ansible_date_time.date
debug:
msg:
- "ansible_date_time.date: {{ ansible_date_time.date }}"
- "ansible_date_time.date type: {{ ansible_date_time.date | type_debug }}"
# Failing due to conditional not working with attribute not being date on ansible_date_time.date
- name: Calculate number of days between ansible_date_time.date
debug:
msg:
- "Number of days = {{ (ansible_date_time.date - prev_date).days }}"
我得到以下输出和错误:
TASK [New source ansible fact date] ************************************************************************************************************************************
Thursday 31 December 2020 13:06:41 +0100 (0:00:00.143) 0:00:00.741 *****
ok: [localhost] => {
"msg": [
"ansible_date_time.date: 2020-12-31",
"ansible_date_time.date type: AnsibleUnsafeText"
]
}
TASK [Calculate number of days between ansible_date_time.date] *********************************************************************************************************
Thursday 31 December 2020 13:06:41 +0100 (0:00:00.150) 0:00:00.892 *****
fatal: [localhost]: FAILED! => {"msg": "Unexpected templating type error occurred on (Number of days = {{ (ansible_date_time.date - prev_date).days }}): unsupported operand type(s) for -: 'AnsibleUnsafeText' and 'datetime.date'"}
我尝试找到从 ansible_date_time.date 中创建新变量的方法,但如果可能的话,我无法将其转换为 datetime.date。
【问题讨论】: