В Ansible, Как я могу задать имя файла журнала динамически

В настоящее время я разрабатываю ansible script для создания и развертывания Java-проекта.

поэтому я могу установить log_path, как показано ниже

log_path=/var/log/ansible.log

но трудно найти историю сборки. Возможно ли добавить дату и время для имени файла журнала?

например,

ansible.20150326145515.log

Ответ 1

Я не верю, что есть встроенный способ генерации даты "на лету", но один из них - использовать lookup, который может выходить на время. Пример:

log_path="/var/log/ansible.{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}.log"

Ответ 2

Вот опция, использующая переменную среды ANSIBLE_LOG_PATH благодаря Bash псевдониму оболочки:

alias ansible="ANSIBLE_LOG_PATH=ansible-\`date +%Y%m%d%H%M%S\`.log ansible"

Не стесняйтесь использовать абсолютный путь, если хотите.

Ответ 3

Я нашел его.

просто добавьте задачу, чтобы скопировать (или команду mv) лог локально

- name: Copy ansible.log
  connection: local
  command: mv ./logs/ansible.log ./logs/ansible.{{ lookup('pipe', 'date %Y%M%d%H%M%S') }}.log
  run_once: true

благодаря @jarv

Ответ 4

Как насчет этого:

- shell: date +%Y%m%d%H%M%S
  register: timestamp

- debug: msg="foo.{{timestamp.stdout}}.log"

Вывод:

TASK [command] *****************************************************************
changed: [blabla.example.com]

TASK [debug] *******************************************************************
ok: [blabla.example.com] => {
    "msg": "foo.20160922233847.log"
}

Ответ 5

По словам симпатичных людей в IRC IRC IRIS, это можно сделать с помощью настраиваемого плагина обратного вызова.

Я еще не сделал этого, потому что я не могу установить библиотеку Ansible Python на этом компьютере. В частности, Windows 7 не может иметь имена каталогов > 260 символов в длину, а pip пытается сделать длительные временные пути. Но если кто-то обходит его, отправьте его здесь.