Ansible 日期时间时区转换

use*_*908 4 datetime ansible

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

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

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

lar*_*sks 6

如果您使用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 }}"
Run Code Online (Sandbox Code Playgroud)

结果如下:


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   
Run Code Online (Sandbox Code Playgroud)