Ansible: использование ansible_date_time для получения даты/времени

Автор: | 07/12/2018
 

Имеется задача по созданию архива, в имени которого хочется добавлять дату и время его создания.

Для получения даты-времени можно использовать ansible_date_time.

Проверяем.

Добавлем задачу, которая выведет всё содержимое:

- name: Test date
  debug:
    msg: "{{ ansible_date_time }}"

Запускаем:

ansible-playbook -i hosts.ini --tags test --limit mobilebackend-dev mobilebackend.yml --extra-vars "ansible_connection=local"
PLAY [all] ****
TASK [Gathering Facts] ****
ok: [dev.mobilebackend.domain.world]
TASK [test : Test date] ****
ok: [dev.mobilebackend.domain.world] => {
"msg": {
"date": "2018-07-11",
"day": "11",
"epoch": "1531319553",
"hour": "17",
"iso8601": "2018-07-11T14:32:33Z",
"iso8601_basic": "20180711T173233946920",
"iso8601_basic_short": "20180711T173233",
"iso8601_micro": "2018-07-11T14:32:33.946988Z",
"minute": "32",
"month": "07",
"second": "33",
"time": "17:32:33",
"tz": "EEST",
"tz_offset": "+0300",
"weekday": "Wednesday",
"weekday_number": "3",
"weeknumber": "28",
"year": "2018"
}
}

Теперь — попробуем получить отдельные значения, например date:

- name: Test date
  debug:
    msg: "{{ ansible_date_time.date }}"

Запускаем:

...
TASK [test : Test date] ****
ok: [dev.mobilebackend.domain.world] => {
"msg": "2018-07-11"
}
...

Попробуем скомибинировать:

- name: Test date
  debug:
    msg: "Filename will be: backupname-{{ ansible_date_time.date }}-{{ ansible_date_time.hour }}-{{ ansible_date_time.minute }}.tar"

Проверяем:

...
TASK [test : Test date] ****
ok: [dev.mobilebackend.domain.world] => {
"msg": "Filename will be: backupname-2018-07-11-17-36.tar"
}
...

Можно вынести дату-время в отдельную переменную, используя set_fact:

- set_fact:
    bkp_date_time: "{{ ansible_date_time.date }}-{{ ansible_date_time.hour }}-{{ ansible_date_time.minute }}"

- name: Test date
  debug:
    msg: "Filename will be: backupname-{{ bkp_date_time }}.tar"

Запускаем:

...
TASK [test : set_fact] ****
ok: [dev.mobilebackend.domain.world]
TASK [test : Test date] ****
ok: [dev.mobilebackend.domain.world] => {
"msg": "Filename will be: backupname-2018-07-11-17-39.tar"
}
...

И ещё один вариант — это получить дату-время через pipe из шела:

...
- name: Date from $(date) execution via pipe
  debug:
    msg: "Date-time: {{ lookup('pipe','date +%Y-%m-%d-%H-%M-%S') }}"

Результат:

...
TASK [test : Date from $(date) execution via pipe] ****
ok: [dev.mobilebackend.domain.world] => {
"msg": "Date-time: 2018-07-11-17-40-58"
}
...

Готово.