2013-01-18 29 views
12

मेरे पास एक शेल प्रोविजनिंग स्क्रिप्ट है जो एक कमांड को आमंत्रित करती है जिसके लिए उपयोगकर्ता इनपुट की आवश्यकता होती है - लेकिन जब मैं vagrant provision चलाता हूं, तो स्क्रिप्ट में उस बिंदु पर प्रक्रिया लटकती है, क्योंकि कमांड मेरे इनपुट की प्रतीक्षा कर रहा है, लेकिन इसे देने के लिए कहीं भी नहीं है। क्या इसके आसपास कोई रास्ता है - यानी कुछ इंटरैक्टिव मोड में स्क्रिप्ट को चलाने के लिए मजबूर करना? क्योंकि यह एक स्वच्छ वीएम है,मैं एक वाग्रेंट खोल प्रावधान स्क्रिप्ट के साथ कैसे बातचीत कर सकता हूं?

curl -o /tmp/db.backup `heroku pgbackups:url -a myapp` 

हालांकि:

बारीकियों है कि मैं एक साफ उबंटू वीएम बनाने, और फिर एक डेटाबेस बैकअप (यह मेरा प्रावधान लिपि में है) डाउनलोड करने के लिए Heroku CLI लागू कर रहे हैं , और इसलिए यह पहली बार है कि मैंने एक हेरोकू सीएलआई कमांड चलाया है, मुझे अपने लॉगिन प्रमाण-पत्रों के लिए संकेत दिया गया है। चूंकि स्क्रिप्ट को वग्रेंट द्वारा प्रबंधित किया जा रहा है, इसलिए कोई इंटरैक्टिव खोल संलग्न नहीं है, और इसलिए स्क्रिप्ट बस वहां लटकती है।

+0

आपका समाधान क्या था? – Mathieu

उत्तर

2

मुझे लगता है कि आप सादा पाठ में अपने क्रेडेंशियल्स को हार्ड कोड नहीं करना चाहते हैं, इस प्रकार एक इंटरैक्टिव मोड को मजबूर करने की कोशिश कर रहे हैं। बात यह है कि आपको वोनर प्रावधान दस्तावेज़ (http://docs.vagrantup.com/v1/docs/provisioners/shell.html) में ऐसा विकल्प नहीं दिखाई देता है, इसलिए एक तरफ या किसी अन्य को आपको अपनी स्क्रिप्ट के भीतर प्रमाणीकरण एम्बेड करने की आवश्यकता है। क्या आपने टोकन प्राप्त करने की तरह कुछ उपयोग करने और सीएलआई के बजाय उसकेोकू रीस्ट एपीआई का उपयोग करने के बारे में सोचा है? https://devcenter.heroku.com/articles/authentication

+2

आप सही हैं - मैं डेवलपर्स के समूह के लिए एक सामान्य बॉक्स बना रहा हूं, जिनमें से सभी को अपने प्रमाण पत्र की आपूर्ति करने की आवश्यकता है। मैंने अभी समस्या के आसपास काम किया है। –

+11

आपने इसके आसपास कैसे काम किया? –

+0

@ जोब्लॉक आप कॉन्फ़िगरेशन फ़ाइल का उपयोग करके इसके आसपास काम कर सकते हैं जो उपयोगकर्ता पूर्व-डेटा में डेटा दर्ज करते हैं, और उम्मीद करते हैं: http://linux.die.net/man/1/expect – SgtPooki

1

आप एक Vagrant स्क्रिप्ट के लिए अस्थायी इनपुट या चर पास करना चाहते हैं, तो आप उन्हें एक ही लाइन पर पहले रखकर कि आदेश के लिए अस्थायी वातावरण चर के रूप में अपने क्रेडेंशियल दर्ज हो सकता है:

username=x password=x vagrant provision 

और उन्हें Vagrantfile से पहुंचना रूप

$u = ENV['username'] 
$p = ENV['password'] 

तो आप उन्हें अपने bash स्क्रिप्ट के लिए एक तर्क के रूप में पारित कर सकते हैं:

config.vm.provision "shell" do |s| 
    s.inline: "echo username: $1, password: $2" 
    s.args: [$u, $p] 
end 

आप कर्ल कमांड में उन चर को पार करने के लिए वीएम में अपेक्षा की तरह कुछ स्थापित कर सकते हैं।

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

  • कोई संबंधित समस्या नहीं^_^