2015-03-26 19 views

risposta

14

non credo ci sia un modo integrato per generare la data al volo del genere, ma una possibilità che hai è quella di utilizzare un lookup che può sborsare fino ad oggi. Esempio:

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

La stringa del formato della data deve essere 'data +% Y% m% d% H% M% S' Si noti la minuscola% m per il mese. – Cam

+0

Grazie! ora corretto – jarv

+0

Funziona davvero per te? Per me, eseguendo 2.3.2.0, le virgolette sono fuggite dall'interprete, il che rende 'log_path' non valido; mai nemmeno tentando di eseguire la ricerca. –

2

L'ho trovato.

basta aggiungere compito di copiare (o comando mv) Accedi localmente

- 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 

grazie alla @jarv

+2

Se ti piace la mia risposta, per favore accettala :) – jarv

+0

Fai attenzione che nel formato della data manchi il simbolo '+' dalla risposta di @ jarv. – Matt

+0

Ho provato che questo funziona. Ho iniziato eliminando il registro esistente; creare un playbook per: eseguire un'operazione di debug per iniziare a scrivere sul log, eseguire l'attività del comando per spostare/rinominare il log, eseguire un'altra attività per verificare se Ansible scrive ancora correttamente nel log. Il risultato è un successo: il log è stato creato da ansible, scritto, rinominato e scritto nuovamente dopo lo spostamento/ridenominazione. –

3

Qui è un'opzione utilizzando ANSIBLE_LOG_PATH variabili d'ambiente grazie ad alias di shell Bash:

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

Sentiti libero di usare un percorso assoluto se preferisci.

+0

+1 Non conoscevo l'env vars. Questo sembra essere il modo di impostare il percorso del log quando si esegue da uno script * sh usando 'export ANSIBLE_LOG_PATH = ...'. – kub1x

0

ne dite di questo:

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

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

uscita:

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

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

Perché giù voto?:( –

+0

Penso che tu non fossi votato perché ha bisogno di cambiare il file di log in modo dinamico - il che comporta la modifica del percorso log - non solo usa il modulo di debug per mostrare che puoi fare il comando 'date' con Ansible. –

0

Secondo la bella gente al IRC freenode #ansible, questo può essere realizzato con un custom callback plugin.

Non l'ho ancora fatto perché non riesco a installare la libreria Ansible Python su questa macchina. In particolare, Windows 7 non può avere nomi di directory> 260 caratteri di lunghezza e pip tenta di creare percorsi temporanei lengthy. Ma se qualcuno ci arriva, per favore postalo qui.

Problemi correlati