2016-05-19 5 views
7

मैं बैकअप निर्देशिका में लॉग को स्थानांतरित करने के लिए उत्तरदायी का उपयोग कर रहा हूं (shell मॉड्यूल, mv कमांड का उपयोग कर)।यदि दिया गया निर्देशिका खाली नहीं है तो उत्तरदायी कार्य कैसे करें?

mv आदेश विफल होने पर कोई फ़ाइल नहीं होने पर विफल रहता है। डिफ़ॉल्ट रूप से, यह पूरे उत्तरदायी खेल को असफल होने का कारण बनता है। मैं, नाटक के साथ आगे बढ़ सकते हैं काम में विफल रहता है, भले ही (ignore_errors: yes)

मैं इस समाधान से संतुष्ट नहीं हूं क्योंकि यह त्रुटि संदेश पैदा करता

टास्क [बैकअप निर्देशिका के लिए फ़ाइलों को स्थानांतरित] **** ************************************** घातक: [xx.xx.xx.xx]: अनुत्तीर्ण होना! ? = ... इस तरह के कोई फ़ाइल या निर्देशिका "," stdout ":" "" stdout_lines ": []," चेतावनी ": []} ...

यदि निर्देशिका है कैसे जाँच करने के लिए अनदेखी ansible में खाली है, और अगर खाली जूस कार्य को छोड़?

उत्तर

9

यदि फ़ाइलें

- find: paths=DIRECTORY file_type=directory patterns="*.log" 
    register: dir_files 

- shell: mv *.log /tmp 
    when: dir_files.matched|int != 0 
+0

महान है, धन्यवाद की test परिणाम commands- उपयोग करने के लिए है! एक प्रश्न: क्या यह एक अच्छा विचार है कि 'change_when: false' to 'find' कार्य को जोड़ना? यह आदेश हमेशा चल रहा है, कुछ भी नहीं बदल रहा है। मैं आम तौर पर बदल जाता हूं Iwhen: दुष्प्रभावों के बिना, ऐसे शुद्ध परीक्षणों के लिए झूठा। इस तरह, हैंडलर को कॉल नहीं किया जाता है और रीपैप खेलना बेहतर लगता है (मैंने बदल दिया है = 0, जब तक कुछ वास्तव में नहीं बदला जाता है)। –

1

वहाँ पाया जाता है आप ansible 2.0 में मॉड्यूल निर्देशिका में .log विस्तार तो इस कदम पर अमल के साथ फ़ाइलों को आसानी से खोज का उपयोग कर सकते स्वीकार किया जाता है जवाब यह है कि find मॉड्यूल का उपयोग करता है।

एक अन्य विकल्प (कम पठनीय और अधिक शब्द) देशी लिनक्स ls आदेश

- name: "backup logs" 
    shell: test "$(ls /var/logs/)" 
    register: logsPresent 
    changed_when: false 

- name: "move files to backup directory" 
    when: "logsPresent.rc != 0" 
    shell: "mv /var/logs/ /backup/logs" 
संबंधित मुद्दे