2016-01-11 5 views
5

मुझे यह जांचने की ज़रूरत है कि कोई अन्य कार्य करने से पहले कोई निर्देशिका माउंट पॉइंट है या नहीं।जांचें कि निर्देशिका एक माउंट पॉइंट है या नहीं?

मैं प्रलेखन के चारों ओर देख रहा हूं और ऐसा लगता है कि आप माउंट पॉइंट बना सकते हैं/नष्ट कर सकते हैं, लेकिन यह जांचें कि कोई मौजूद है या नहीं। नीचे दिए गए लिंक से।

http://docs.ansible.com/ansible/mount_module.html

मैं अगर वहाँ यह ansible के साथ मौजूद है की जाँच करने के लिए किसी भी तरह है सोच रहा हूँ, या यह कुछ अन्य भाषा ansible से बुलाया होगा।

उत्तर

11

मैंने mount और stat मॉड्यूल दोनों के साथ प्रयास किया है। दोनों आपकी आवश्यकताओं को पूरा नहीं किया था।

मैंने केवल ओएस कमांड का उपयोग करके काम करने का प्रबंधन किया है। मैंने रेडहाट, डेबियन और एसएलएस परिवारों पर परीक्षण किया है।

vars: 
    - myvolume: /backup 

tasks: 

    - command: mountpoint -q {{myvolume}} 
    register: volume_stat 
    failed_when: False 
    changed_when: False 

    - debug: 
     msg: "This is a mountpoint!" 
     when: volume_stat.rc == 0 

समस्या है, mountpoint आदेश stderr जेनरेट करती है पथ एक माउंट बिंदु ताकि आप ignore_errors का उपयोग करने की जरूरत नहीं है, डायन एक अच्छा समाधान नहीं है।

संपादित करें 1: @udondan ने उल्लेख किया है, failed_when एक बेहतर दृष्टिकोण तो ignore_errors के बाद से यह नहीं आउटपुट त्रुटियों करता है।

यदि आप पथ माउंट पॉइंट नहीं हैं तो आपको प्लेबुक को रोकने की आवश्यकता हो सकती है।

मुझे आशा है कि किसी को इससे बेहतर समाधान मिलेगा।

नोट: वहाँ कुछ प्लेटफॉर्म है कि mountpoint आदेश नहीं है, जहाँ तक मैं डार्विन (मैक OSX) और SunOS (ओरेकल सोलारिस) पता है, अगर आप इस उन सिस्टम पर काम करने की जरूरत है, तो आप करेंगे एक और कामकाज खोजने की जरूरत है।

+0

मेरा मानना ​​है कि वास्तव में मौजूद लक्ष्य के लिए एक माउंटपॉइंट बनाना है। लेकिन मौजूदा पथ का मतलब यह नहीं है कि यह घुड़सवार है। – udondan

+0

आप सही हैं @udondan, मैंने अपना जवाब बदल दिया है। –

+0

'ignore_errors: true' के बजाय आप 'विफल_when: false' का उपयोग कर सकते हैं।यह थोड़ा कम बदसूरत है क्योंकि यह आउटपुट में त्रुटि नहीं दिखाएगा। दूसरी ओर यह _all_ त्रुटियों को छोड़ देगा। मुझे नहीं पता कि कुछ सिस्टम पर 'mountpoint' कमांड मौजूद नहीं है या नहीं? यह कुछ ऐसा होगा जो आप असफल करना चाहते हैं। :) लेकिन अगर आप जिस तरह से जाना चाहते हैं, तो आप 'विफल' स्थिति के साथ परेशान हो सकते हैं। – udondan

2

कोशिश करने के कुछ समय बाद मैं इसके साथ आया।

vars: 
- myvolume: /backup 

tasks: 
- debug: msg="The dir is a mount point" 
    with_items: ansible_mounts 
    when: item.mount == myvolume 

मुझे यकीन है कि नहीं यह कैसे सभी प्रणालियों पर लागू होता है और/या अगर ansible_mounts सभी माउंट ओएस के अंक या सिर्फ ansible साथ बनाए गए होते हैं हूँ।

+1

मैंने इस तथ्य का परीक्षण किया है, यह सभी माउंट पॉइंट दिखाता है। एसएलएस, रेडहाट और उबंटू/डेबियन पर काम किया। सनोस पर (सोलारिस 11,10), डार्विन (मैकॉक्स एल कैपिटन) और एचपीयूएक्स वैरिएबल मौजूद नहीं था। मैं ऐसे समाधान जिन्हें 'शैल' या 'कमांड' जैसे मॉड्यूल की आवश्यकता नहीं है क्योंकि आप 'ड्राई रन मोड' का उपयोग नहीं कर सकते हैं। –

1

आप Ansible "कमांड" मॉड्यूल के "stdout" का उपयोग कर सकते एक दिया निर्देशिका के माउंट स्थिति निर्धारित करने के लिए, उदाहरण के कोड यहाँ चिपकाया जाता है:

- name: "check mount point {{ mount_dir }}" 
    command: mountpoint {{ mount_dir }} 
    register: mount_stat 
    failed_when: False 
    changed_when: False 

- name: "debug" 
    when: mount_stat.stdout == "{{ mount_dir }} is a mountpoint" 
    debug: 
    msg: "{{ mount_dir }} is a mountpoint" 

- name: "debug" 
    when: mount_stat.stdout == "{{ mount_dir }} is not a mountpoint" 
    debug: 
    msg: "{{ mount_dir }} is not a mountpoint" 
+1

आपको अधिक विस्तृत उत्तर लिखना चाहिए। सबसे पहले आपको पोस्ट किए गए टेक्स्ट का स्रोत उल्लेख करने की आवश्यकता है क्योंकि आप मूल रूप से इसे दस्तावेज़ से प्रतिलिपि बनाते हैं। दूसरा, यह कोड प्रश्न लेखक द्वारा प्रदान की गई साइट पर देखा जा सकता है, इसलिए मुझे विश्वास है कि उसने इसे पढ़ा है। यदि ऐसा है, तो वह शायद उस पाठ को समझ में नहीं आया। अंत में मुझे लगता है कि वह आपकी कुछ टिप्पणी की सराहना करेगा। –

1

समान की समस्या आ रही है, लेकिन कुछ इस तरह की कोशिश -

- name: testing for required mount points 
    fail: 
    msg: "{{ item }} must be a mount point" 
    when: not item|is_mount 
    with_items: 
    - /path/to/test 
अब

अगर मैं सिर्फ यह पता लगाने कर सकते हैं कि भरोसे के साथ आकार माउंट बिंदु के प्राप्त करने के लिए, lol

बी TW, डिफ़ॉल्ट तथ्यों को देखने के लायक, जैसे {{ ansible_mounts }}, हालांकि मेरा/dev/shm वहां नहीं दिख रहा है - अभी तक क्यों नहीं। कैविट ग्रेटर, ymmv।

संबंधित मुद्दे