首页 > 解决方案 > Ansible 日期时间时区转换

问题描述

有没有办法在我的剧本中的“调试”语句中将 ansible 日期转换为不同的时区?我不想在剧本级别设置全局时区。我有这个 :

  debug:
   msg: "{{ '%Y-%m-%d %H:%M:%S' | strftime(ansible_date_time.epoch) }}"

这工作正常,但以 UTC 显示时间。我需要在 EDT 中显示时间而不在​​全局剧本级别设置时区。我该如何做到这一点?

标签: datetimeansible

解决方案


如果您使用command任务运行date而不是依赖ansible_date_time变量,则可以通过环境变量设置时区。例如以下剧本:

- hosts: localhost
  vars:
    ansible_python_interpreter: /usr/bin/python
  tasks:
    - command: "date '+%Y-%m-%d %H:%M:%S'"
      register: date_utc
      environment:
        TZ: UTC

    - command: "date '+%Y-%m-%d %H:%M:%S'"
      register: date_us_eastern
      environment:
        TZ: US/Eastern

    - debug:
        msg:
          - "{{ date_utc.stdout }}"
          - "{{ date_us_eastern.stdout }}"

输出结果:


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

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

TASK [command] *******************************************************************************
changed: [localhost]

TASK [command] *******************************************************************************
changed: [localhost]

TASK [debug] *********************************************************************************
ok: [localhost] => {
    "msg": [
        "2020-05-12 15:21:05",
        "2020-05-12 11:21:06"
    ]
}

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

推荐阅读