是否有可能操纵在Ansible剧本的日期(Is it possible to manipulate

2019-09-29 07:30发布

现在用的是ansible_date_time.houransible_date_time.minute在我的剧本之一。

但我需要在增加时间到这些事实(或变量)..也就是说,如果ansible_date_time.hour返回16 -我想补充一两个小时,或者如果ansible_date_time.minute返回40 -我希望它是50。 。

当然也有23和59的小时,分​​钟......我想过从注册一个变量天花板:

- name: Register HH  
  shell: date '+%H'
  register: HP_HH
- debug: msg="{{ HP_HH.stdout | int + 3 }}"

但是很明显,如果我的剧本在21:00之后运行我的运气。

有没有人有一个建议或解决方法吗?

Answer 1:

据我所知,没有办法加/减时间单位出Ansible盒子。

您可以将字符串转换为datetime的对象与to_datetime过滤器(Ansible 2.2+)。
你可以计算的时间差。 见这个答案。

但是,如果你不介意使用一个简单的过滤器插件,在这里你去:

放弃这一代码./filter_plugins/add_time.py你的剧本附近:

import datetime

def add_time(dt, **kwargs):
    return dt + datetime.timedelta(**kwargs)

class FilterModule(object):

    def filters(self):
        return {
            'add_time': add_time
        }

你可以使用自己的add_time过滤器如下:

- hosts: localhost
  gather_facts: yes
  tasks:
    - debug:
        msg: "Current datetime is {{ ansible_date_time.iso8601 }}"
    - debug:
        msg: "Current time +20 mins {{ ansible_date_time.iso8601[:19] | to_datetime(fmt) | add_time(minutes=20) }}"
      vars:
        fmt: "%Y-%m-%dT%H:%M:%S"

add_time具有相同的参数timedelta Python编写的。



文章来源: Is it possible to manipulate the date in an Ansible Playbook
标签: ansible