2011-12-05 8 views
25

मुझे यकीन नहीं है कि मैं शेफ सशर्त निष्पादन को समझता हूं।शेफ को समझना केवल_if not_if

मैं पर किया जाए या नहीं एक डेटाबेस Postgresql

में मौजूद है

तो यहाँ आधारित कुछ सशर्त निष्पादन करना चाहते हैं मेरी उदाहरण है

execute "add_db" do 
    cwd "/tmp" 
    user "dbuser" 
    command "createdb -T template_postgis mydb" 
    not_if 'psql --list|grep mydb' 
end 

रनिंग लौट psql --list|grep mydb अगर db मौजूद है कि तुम क्या उम्मीद करेंगे (dbname प्रविष्टि के साथ लाइन) और कुछ भी नहीं अगर यह नहीं करता है।

तो यह कैसे मूल्यांकन नहीं करता है? सही या गलत? 1 या 0? अगर वे सफल होते हैं तो सभी प्रक्रियाएं 0 वापस नहीं आती हैं?

कोई भी जो किसी भी सलाह की सराहना की जाएगी!

उत्तर

21

मैं बस इस मुद्दे में भाग गया। मेरी समस्या यह थी कि not_if कमांड को 'रूट' के रूप में चलाया जा रहा था, न कि 'dbuser'। यदि आप इसे

not_if 'psql --list|grep mydb', :user => 'dbuser' 

पर बदलते हैं तो आपको वह परिणाम मिल सकते हैं जिन्हें आप ढूंढ रहे थे।

http://tickets.opscode.com/browse/CHEF-438

+5

मेरी स्थिति थोड़ा अंतर था, इसलिए मैं भविष्य में उपयोगकर्ताओं के लिए यहां एक ऐसी स्थिति में एक नोट छोड़ दूंगा जो यहां उतरा। मान लें कि आपके पास एक विशेषता 'नोड [' myattr '] = true' है, तो यदि आप' only_if नोड ['myattr'] लिखते हैं, तो शेफ शिकायत करेगा। मैंने पाया कि आपको घुंघराले ब्रेसिज़ में कथन को संलग्न करने की आवश्यकता है, यानी। 'only_if {नोड ['myattr']}' – apatrick

19

कमांड लाइन से अपने लिए परीक्षण चलाएं, और डिफ़ॉल्ट वापसी मान (ए.के.ए., "$?") पर एक नज़र डालें।

% psql --list|grep mydb 
    mydb-is-here 
    % echo $? 
    0 

आप कुछ है कि वहाँ नहीं है की कोशिश, तो आप इस तरह कुछ मिलना चाहिए:: आप कुछ इस तरह मिलना चाहिए

% psql --list|grep mydb-not-here 
    % echo $? 
    1 

क्या महाराज को देखकर किया जा रहा है सांख्यिक मान है कि $ में भरवां होगा, यानी, या तो "0" या "1"। दूसरे शब्दों में, आपका उदाहरण "not_if" वाक्यविन्यास के लिए दिखाया गया है सही है।

+0

की तरह आप उन्हें कैसे कैसे वहाँ दम पर यह पता लगाने की का उदाहरण दिया! –

+6

मैं आमतौर पर इसे एक नुस्खा में डालते समय grep आमंत्रण में a -q जोड़ता हूं ताकि शेफ-क्लाइंट आउटपुट grep द्वारा उत्पादित किसी भी मैचों से अव्यवस्थित न हो। –

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