2015-09-23 10 views
5

का उपयोग करके एकाधिक निर्देशिकाएं बनाएं I test2 के लिए समान रूप से 2 उप निर्देशिका (/ home/test1/bin और/home/test2/conf) के साथ एकाधिक निर्देशिका (test1, test2) बनाना चाहते हैं। मेरे प्लेबुक इस तरह दिखता है:उत्तरदायी

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

हालांकि मैं निम्नलिखित त्रुटि मिलती है:

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

क्या यहां मुद्दा यह है? मैं नवीनतम गिट चेकआउट का उपयोग कर रहा हूं। क्या इस दृष्टिकोण के लिए कोई बेहतर तरीका है?

+0

आप अपने कोड है कि समस्या दे रहा है की लाइन दिखा सकते हैं? स्पष्ट रूप से आप कुछ फ़ंक्शन में एक तर्क खो रहे हैं। – dasjkdj

+0

@victor मैंने उपर्युक्त कार्य के लिए कोई कोड नहीं लिखा है, मैं इसे करने के लिए केवल उत्तरदायी मॉड्यूल का उपयोग कर रहा हूं। – jugal

उत्तर

14

मुझे लगता है कि त्रुटियां बढ़ीं क्योंकि आपने 1 कार्य में file मॉड्यूल 2 बार उपयोग किया था। आपको केवल प्रति कार्य 1 मॉड्यूल का उपयोग करना चाहिए।

अपने मामले में, आपको एकाधिक निर्देशिका और उपनिर्देशिका बनाने के लिए nested loop का उपयोग करना चाहिए।

उदाहरण:

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

एक फ़ाइल मॉड्यूल का उपयोग करके भी वही त्रुटि दी गई। लेकिन नेस्टेड लूप कोड एक आकर्षण की तरह काम करता था। धन्यवाद !! बस एक त्वरित सवाल - क्या हम उत्तरदायी का उपयोग कर रिमोट विंडोज मशीन पर एक ही निर्देशिका संरचना बना सकते हैं? – jugal

+0

आश्चर्यजनक रूप से, आप दो बार फ़ाइल मॉड्यूल का उपयोग कर सकते हैं (शायद यह संस्करण विशिष्ट है?) लेकिन 'with_items' केवल उत्तरदायी 1.9.3' –

+0

@miked के लिए लागू होता है मैं गिट स्रोत (v2) से नवीनतम डेवलपर संस्करण का उपयोग कर रहा था। 0)। और विंडोज़ मशीन के लिए हम win_file मॉड्यूल का उपयोग कर सकते हैं। शुरुआत में यह मुझे एक बुरा प्रतिक्रिया त्रुटि दे दी। तो मुझे अपने विंडोज़ नोड को रीबूट करना पड़ा और फिर यह ठीक काम करता था। – jugal