पपेट में एक फ़ाइल / डीआईआर सशर्त कैसे मौजूद है?


18

मैं कठपुतली में एक फ़ंक्शन लिखने की कोशिश कर रहा हूं जो कि failयदि एक पास निर्देशिका पथ मौजूद नहीं है तो वह क्या करेगा ।

if File["/some/path"]हमेशा सच लौटाता है, और if defined(File["/some/path"])केवल सच लौटाता है यदि संसाधन कठपुतली में परिभाषित किया जाता है, चाहे वह वास्तव में मौजूद हो।

क्या एक साधारण ifबयान के साथ ऐसा करने का कोई तरीका है ?

धन्यवाद


2
याद रखें: गुरु पर अभिव्यक्तियाँ संकलित होती हैं। वे क्लाइंट के बारे में कुछ भी नहीं जानते हैं सिवाय उन तथ्यों के जो इसे प्रस्तुत करते हैं। इसलिए या तो एक तथ्य लिखें, जिसमें यह जानकारी हो, या एक कदम पीछे ले जाएं और हमें बताएं कि आप वास्तव में क्या हल करने की कोशिश कर रहे हैं ताकि हम एक बयान से बेहतर दृष्टिकोण के साथ आ सकें।
डेनिस करसेमेकर

जवाबों:


31

इसके लिए समाधान: एक निष्पादन "परीक्षण" पर केवल ओफ़्फ़ का उपयोग करें और अपनी कार्रवाई में इसे निष्पादित करना चाहते हैं:

exec {"check_presence":
  command => '/bin/true',
  onlyif => '/usr/bin/test -e /path/must/be/available',
}

whatever {"foo...":
  .....
  require => Exec["check_presence"],
}

5
ओह, यह बुराई है, मुझे यह पसंद है :-)
डेनिस करसेमेकर

1
और भी सरल हो सकता है: निष्पादन {"परीक्षण-ए / पथ / होना चाहिए / उपलब्ध होना चाहिए":}
डेनिस करसेमेकर

1
धन्यवाद। यह एकल dir check के लिए बढ़िया काम करता है। हालांकि, मैं निर्देशिकाओं की एक सरणी को मान्य करने का प्रयास कर रहा हूं ... यदि मैं इसे किसी फ़ंक्शन में जोड़ता हूं, तो मुझे '' redeclare 'त्रुटि नहीं मिल सकती है।
ddario

6
महान विचार है, लेकिन इसका मतलब है कि प्रत्येक कठपुतली रन पर एक "Exec [check_presence] / रिटर्न: सफलतापूर्वक निष्पादित" नोटिस होगा, जो वास्तव में कष्टप्रद है! बेहतर होगा: निष्पादित {'check_presence': Command => '/ bin / false', जब तक => '/ usr / bin / test -e / path / must / available / होना चाहिए,') यह वही करेगा, लेकिन जब पथ वास्तव में मौजूद नहीं है, तो केवल एक त्रुटि / सूचना बनाएगा।
S0me0ne

2
कुछ भी जो "आवश्यकता" का कारण बनता है असफल होने के लिए एक त्रुटि देगा जो कुछ भी एक असफल निर्भरता है, चाहे केवल या तो उपयोग कर रहा है या नहीं ... तो तकनीकी रूप से यह काम करता है लेकिन आपको अपनी कठपुतली लॉग में बहुत सी त्रुटियां मिलेंगी ...
डेविड गार्डनर

0

मुझे भी कठिनाई हो रही थी कि यदि कोई निर्देशिका मौजूद नहीं थी, तो मॉड्यूल को चालू रखने से कैसे बचा जा सकता है। यह वही है जो मैंने पाया कि मेरे लिए काम किया।

exec { 'module_name':
   command => "command to run with variables", # Double quotes for Variable interpolation
   path   => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
   onlyif => 'test -d /mydirectory',
   }

रास्ता जोड़ना वास्तव में मेरे लिए क्या चाल थी। किसी कारण से, भले ही मैंने परीक्षण कमांड के लिए रास्ता जोड़ा जैसे कि /bin/testयह सही काम नहीं करता था।

आशा है कि यह उन लोगों की मदद करता है जिनके पास एक ही मुद्दा हो सकता है।


0

आप इसके लिए अंतर्निहित फ़ंक्शन find_file () का भी उपयोग कर सकते हैं ... फ़ाइल / पथ मौजूद नहीं होने पर और स्ट्रिंग मौजूद होने पर यह अनिर्धारित देता है।

https://puppet.com/docs/puppet/5.5/function.html#findfile


1
यह केवल मास्टर पर चलेगा, और यह मॉड्यूल में फाइलें खोजने के लिए है।
9

धन्यवाद, लेकिन आप इसका उपयोग ओएस पर फाइलें खोजने के लिए भी कर सकते हैं, इसे पूर्ण-पथ प्रदान करके या नहीं?
माइक

केवल उस मशीन पर जहां कैटलॉग को संकलित किया जा रहा है, यानी मास्टर।
बॉडिजिट

हाँ य़ह सही हैं।
माइक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.