2015-09-23 14 views
5

Test2 için benzer şekilde 2 alt dizin (/ home/test1/bin ve/home/test2/conf) ile birden çok dizin (test1, test2) oluşturmak istiyorum. Benim Taktik kitabı şöyle görünür:ansible kullanarak çoklu dizinler oluşturun

i aşağıdaki hatayı alıyorum Ancak
-- 
- hosts: localhost 
    tasks: 
    - name: Create directory 
     file: path=/home/{{item}}/bin state=directory 
     file: path=/home/{{item}}/conf state=directory 
     with_items: 
      - test1 
      - test2 

: Burada nedir mesele

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": ""} 

? En son git çıkışını kullanıyorum. Buna yaklaşmanın daha iyi bir yolu var mı?

+0

sorunu veriyor senin kod satırını gösterebilir? Görünüşe göre bir işleve karşı bir argümanı kaçırıyorsun. – dasjkdj

+0

@victor Yukarıdaki görev için herhangi bir kod yazmamıştım, bunu yapmak için yalnızca uyumlu modülleri kullanıyorum. Tek bir dosya modülü kullanarak – jugal

cevap

14

1 görevde file modülünü 2 kez kullandığınız için bu hataların ortaya çıktığını düşünüyorum. Her görev için sadece 1 modül kullanmalısınız.

Sizin durumda, birden çok dizin ve alt dizin oluşturmak için nested loop kullanmalısınız.

Örnek:

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

da aynı hatayı verdi. Ama iç içe döngü kodu bir charm.Thanks gibi çalıştı! sadece hızlı bir soru - ansible kullanarak uzak pencereler makinesinde aynı dizin yapısını oluşturabilir miyiz? – jugal

+0

strangely, dosya modülünü iki kez kullanabilirsiniz (belki bu sürüm özeldir?) Ancak 'with_items' sadece 'ansible 1.9.3' için geçerlidir. –

+0

@miked En son geliştirici sürümünü git kaynağından kullanıyordum (v2. 0). Ve windows makinesi için win_file modülünü kullanabiliriz. Başlangıçta bana kötü bir yanıt hatası verdi. Bu yüzden windows düğümümü yeniden başlatmam gerekti ve sonra iyi çalıştı. – jugal