计算两个变量之间的天数(一个是变量,另一个是事实变量)

杰弗里

我一直在疯狂地环顾四周,以找到解决方案,但是到目前为止,我一直没有成功:计算库存变量和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_date_time.date由于变量类型,我想使用ansible事实在每次运行()时动态获取当前日期

重现错误的任务样本

    - 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即使有可能,我也无法将其转换为

β.εηοιτ.βε

ansible_date_time.date是一个字符串,因此您必须将其转换为adate或a datetime

令人惊讶的是,Ansible没有任何方法可以立即将字符串转换为a date,但是您可以datetime使用to_datetimefilter将其转换为a

然后,由于prev_date包含adate而不是a datetime,您可以通过Python的功能datetime刚创建的a转换为a datedate()datetime

因此,剧本将是:

- hosts: all
      
  tasks:
    - debug:
        msg: "{{ ((ansible_date_time.date | to_datetime('%Y-%m-%d')).date() - prev_date).days }}"
      vars:
        prev_date: 2020-12-01

这将给:

PLAY [all] *******************************************************************************************************

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

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "msg": "30"
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当一个是连续的而另一个是离散的时,是否可以有两个变量图例?

这两个代码中哪一个是存储变量的更好方法?

C#两个时间的差值一个是xml另一个是当前时间

PHP计算日期范围,当一个是Y,另一个是Ymd

通过变量合并 R 中的两个数据帧,其中一个是正则表达式,另一个是字符串

我需要将2个类添加到div中,一个是字符串,另一个是来自变量

我应该如何分支两个工作项,一个是增强大师,另一个是增强第一个?

如何从两个向量(一个是键,另一个是值)在R中创建一个列表?

将一个数组分成两个数组,一个是偶数,另一个是奇数

如何使用两个j变量来重塑数据,其中一个是字符串?

Django形成两个具有相同值的字段,一个是默认值唯一,另一个是隐藏字段

两个相同的步骤定义,但一个是给定的,一个是然后的

通过ID合并R中的两个Dataframes,一个是另一个的子集

如何合并两个不同长度的数据帧,一个是另一个的子集

两个命令的输出如何不同,一个是另一个的符号链接?

如何在两个矩阵上绘制箭头(一个是 theta,另一个是长度)

用linq和lambda比较两个列表,其中一个是字符串,另一个是长整数

如何从两个列表中创建堆叠条形图:考虑一个是集群,另一个是标志

如何配置虚拟网络以使用两个NIC?一个是NAT,另一个是NAT

如何连接两个字符串(一个是变量),同时仍然能够重用其中一个参数(变量)?

我想在两个列表之间应用除非。一个列表是 MailAddress 格式,另一个是字符串(转换为列表))

如果一个是正确的而另一个是错误的

双重许可,一个是GPL,另一个是商业

生成一个变量,该变量是另一个变量的两个值之比

Sequelize,找到两个字段的总和(一个是日期,另一个是小时数)大于现在

是否可以按给定表中的两个字段进行排序,一个是升序,另一个是降序?

Bootstrap 两列并排,一个全宽,另一个是图像,另一个是在带有文本的容器中

重击:检查几个变量中的一个是否只有一个等于

如何连接两个变量以记录另一个变量