ansible_date_time
仔細算算,已經查了 ansible_date_time 這個變數的用法超過三次,所以記錄一下,以後查找也方便。
Ansible 在收 facts 時,會把受管主機(遠端機器)的日期時間放到 ansible_date_time 這個變數裡。
ansible_date_time 有以下屬性可以使用:
- date: 日期,格式為 “年-月-日”,例如: “2021-05-03”
- day": 日,例如:“03”
- epoch: 自 1970-01-01 0:0:0 起到現在的總秒數,例如 “1620055364”
- hour: 時,例如:“11”,
- iso8601: ISO8601 格式的日期時間,例如:“2021-05-03T15:22:44Z”
- iso8601_basic: 一樣是 ISO8601 格式的日期時間,沒有分隔符號,時間是"時分秒微秒",例如:“20210503T112244489703”
- iso8601_basic_short: 一樣是 ISO8601 格式的日期時間,沒有分隔符號,時間是"時分秒",例如:“20210503T112244”
- iso8601_micro: 一樣是 ISO8601 格式的日期時間,加上微秒,例如:“2021-05-03T15:22:44.489703Z”
- minute: 分,例如:“22”
- month": 月,例如:“05”
- second: 秒,例如:“44”
- time: 時間,例如:“11:22:44”
- tz": 時區,例如 “EDT”
- tz_offset: 時差,例如 “-0400”
- weekday: 星期幾,例如:“Monday”
- weekday_number: 星期幾,使用數字表示,例如:“1”
- weeknumber: 一年的第幾週,例如:“18”
- year: 年,例如:“2021”
那麼該怎麼使用呢?
---
- name: How to use ansible_date_time
hosts: all
gather_facts: true
tasks:
- name: Display ansible_date_time in ISO8601
debug:
msg: "Current date/time is {{ ansible_date_time.iso8601 }}"
這邊要注意的一點是 gather_facts: true
如果沒有這一行或執行 setup 模組的話,ansible_date_time 是會被視為一個未定義的變數的。
---
- name: Test ansible_date_time
hosts: all
gather_facts: false
tasks:
- debug:
var: ansible_date_time
- setup:
- debug:
var: ansible_date_time
執行上面的 playbook 以後,輸出結果如下
PLAY [Test ansible_date_time] **********************************************************************************************
TASK [debug] ***************************************************************************************************************
ok: [10.11.12.13] => {
"ansible_date_time": "VARIABLE IS NOT DEFINED!"
}
TASK [setup] ***************************************************************************************************************
ok: [10.11.12.13]
TASK [debug] ***************************************************************************************************************
ok: [10.11.12.13] => {
"ansible_date_time": {
"date": "2021-05-03",
"day": "03",
"epoch": "1620055364",
"hour": "11",
"iso8601": "2021-05-03T15:22:44Z",
"iso8601_basic": "20210503T112244489703",
"iso8601_basic_short": "20210503T112244",
"iso8601_micro": "2021-05-03T15:22:44.489703Z",
"minute": "22",
"month": "05",
"second": "44",
"time": "11:22:44",
"tz": "EDT",
"tz_offset": "-0400",
"weekday": "Monday",
"weekday_number": "1",
"weeknumber": "18",
"year": "2021"
}
}
PLAY RECAP *****************************************************************************************************************
10.11.12.13 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
所以 ansible_date_time 裡的日期時間是受管主機上的日期時間,那如果想要取得執行 ansible playbook 的主機上的日期時間呢? 這時候可以使用 lookup(‘pipe’) 來取得:
- hosts: all
tasks:
- debug:
msg: "{{ lookup('pipe','date \"+%Y-%m-%d %H:%M:%S\"') }}
好囉,下次要用到 ansible_date_time 時,來看這篇就知道怎麼用了。
參考資料: