2015-09-23 8 views
5

Voglio creare più directory (test1, test2) con 2 sottodirectory (/ home/test1/bin e/home/test2/conf) allo stesso modo di test2. Il mio playbook si presenta così:creare più directory usando ansible

-- 
- hosts: localhost 
    tasks: 
    - name: Create directory 
     file: path=/home/{{item}}/bin state=directory 
     file: path=/home/{{item}}/conf state=directory 
     with_items: 
      - test1 
      - test2 

Tuttavia ottengo il seguente errore:

An exception occurred during task execution. The full traceback is: 
Traceback (most recent call last): 
    File "/root/ansible/lib/ansible/executor/process/worker.py", line 122, in run 
    executor_result = TaskExecutor(host, task, job_vars, new_play_context, self._new_stdin, self._loader, shared_loader_obj).run() 
    File "/root/ansible/lib/ansible/executor/task_executor.py", line 89, in run 
    items = self._get_loop_items() 
    File "/root/ansible/lib/ansible/executor/task_executor.py", line 179, in _get_loop_items 
    items = self._shared_loader_obj.lookup_loader.get(self._task.loop, loader=self._loader, templar=templar).run(terms=loop_terms, variables=vars_copy) 
    File "/root/ansible/lib/ansible/plugins/lookup/items.py", line 26, in run 
    return self._flatten(terms) 
TypeError: _flatten() takes exactly 2 arguments (1 given) 

fatal: [localhost]: FAILED! => {"failed": true, "stdout": ""} 

cosa è il problema qui? Sto usando l'ultima versione di git. C'è un modo migliore per avvicinarsi a questo?

+0

si può mostrare la linea del codice che sta dando il problema? Apparentemente ti manca un argomento per alcune funzioni. – dasjkdj

+0

@victor Non ho scritto alcun codice per l'attività di cui sopra, sto solo usando i moduli ansible per farlo. – jugal

risposta

14

Penso che gli errori siano stati generati perché il modulo file è stato utilizzato 2 volte in 1. Dovresti utilizzare solo 1 modulo per attività.

Nel tuo caso, è necessario utilizzare nested loop per creare più directory e sottodirectory.

Esempio:

--- 
- hosts: localhost 
    tasks: 
    - name: test 
     file: path=/tmp/{{item.0}}/{{item.1}} state=directory 
     with_nested: 
     - ['test1', 'test2'] 
     - ['bin', 'conf'] 
+0

utilizzando un singolo modulo file ha dato lo stesso errore. Ma il codice del ciclo annidato ha funzionato come un incantesimo. Grazie !! solo una breve domanda: possiamo creare la stessa struttura di directory su una macchina Windows remota usando l'ansible? – jugal

+0

stranamente, è possibile utilizzare il modulo file due volte (forse questo è specifico per la versione?) Ma 'with_items' si applica solo a quest'ultimo per' ansible 1.9.3' –

+0

@miked stavo usando l'ultima versione dello sviluppatore dal git source (v2. 0). E per la macchina Windows possiamo usare il modulo win_file. Inizialmente mi ha dato un brutto errore di risposta. Quindi ho dovuto riavviare il mio nodo di Windows e poi ha funzionato bene. – jugal