2016-03-26 16 views
6

का उपयोग करके डॉकर-कंपोज़ स्थापित करते समय त्रुटि मेरे पास एक बहुत ही सरल उत्तरदायी प्लेबुक है, डॉकर-कंपोज़ और डॉकर के लिए स्थापित सभी निर्भरताएं, लेकिन मुझे डॉकर-कंपोज़ इंस्टॉल करते समय त्रुटि मिलती है, यह मेरी प्लेबुक पर इंस्टॉल करने का कार्य है CentOS7 पर्यावरण में डॉकर-लिखें।Ansible-playbook

#ensure docker-compose and chmod +x /usr/local/bin/docker-compose 
    - name: Ensure docker-compose is installed and available 
    command: curl -L https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 
    - name: Ensure permissions docker-compose 
    command: chmod +x /usr/local/bin/docker-compose 

निम्न त्रुटि दिखाई देती है:

TASK: [Ensure docker-compose is installed and available] ********************** 
failed: [nutrilife-aws] => {"changed": true, "cmd": ["curl", "-L", "https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname", "-s`-`uname", "-m`", ">", "/usr/local/bin/docker-compose"], "delta": "0:00:00.004592", "end": "2016-03-26 14:19:41.852780", "rc": 2, "start": "2016-03-26 14:19:41.848188", "warnings": ["Consider using get_url module rather than running curl"]} 
stderr: curl: option -s`-`uname: is unknown 
curl: try 'curl --help' or 'curl --manual' for more information 

FATAL: all hosts have already failed -- aborting 

PLAY RECAP ******************************************************************** 
      to retry, use: --limit @/home/mmaia/playbook.retry 

nutrilife-aws    : ok=4 changed=0 unreachable=0 failed=1 

मैं एक तरह से कुछ घंटों के लिए इस सरल त्रुटि के साथ अटक कर रहा हूँ। मुझे मानक डॉकर साइट से कमांड मिला और सीधे खोल में परीक्षण किया और यह काम करता है। मैंने आदेश के चारों ओर कमांड को लपेटने के लिए डबल कोट्स का उपयोग करने का भी प्रयास किया है: "curl ..." लेकिन यह त्रुटि को नहीं बदला।

उत्तर

13

helloV रूप pointed out अगर आप खोल विस्तार या खोल के वातावरण चर जैसी चीजों का उपयोग करना चाहते हैं shell मॉड्यूल का उपयोग करने की आवश्यकता है।

हालांकि, उत्तर में आप आमतौर पर उच्च स्तरीय मॉड्यूल का उपयोग करके बेहतर होते हैं और केवल shell या command मॉड्यूल का उपयोग करते हैं यदि आप किसी अन्य मॉड्यूल के साथ जो कुछ भी कर रहे हैं वह नहीं कर सकते हैं। यह दृष्टिकोण आपको निष्पादन के बेहतर नियंत्रण जैसे आसान idempotency और बेहतर आउटपुट दृश्यता देता है।

आपके मामले में आप इंटरनेट से चीजें लाने के लिए get_url का उपयोग कर सकते हैं (मुझे विश्वास है कि अगर आप कर्ल के साथ खोलने का प्रयास करते हैं तो उत्तर वास्तव में आपको चेतावनी देगा)।

आपके मामले में अपने कार्य को कुछ इस तरह दिख सकता है:

- name: Ensure docker-compose is installed and available 
    get_url: 
     url : https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-{{ ansible_system }}-{{ ansible_userspace_architecture }} 
     dest: /usr/local/bin/docker-compose 
     mode: 'u+x,g+x' 

ऊपर कार्य विशेष चर कि लक्षित मेजबान पर gathering facts द्वारा दिया जाता है ताकि अपने कार्य या तो Linux सिस्टम या ओएस पर ठीक चलाना चाहिए का उपयोग करता है एक्स (आपको विंडोज लिंक के लिए .exe की सशर्त प्रत्यय की आवश्यकता होगी और स्पष्ट रूप से एक अलग गंतव्य पथ इत्यादि)।

यह उपयोगकर्ता और समूह के लिए निष्पादन अनुमतियों को जोड़ने के लिए file मॉड्यूल से mode पैरामीटर का भी उपयोग करता है ताकि आप अपने chmod कार्य से बच सकें।

+0

यह एक बुद्धिमान सुझाव की तरह दिखता है, यह भी कोशिश करेगा क्योंकि यह एक बेहतर "अच्छा अभ्यास" लगता है। धन्यवाद! –

+0

आपके उत्तर ने मुझे बहुत मदद की। मुझे यम सूची में एक पैकेज के रूप में 'लिनक्स-छवि-अतिरिक्त - $ (uname -r) 'स्थापित करना था, लेकिन मैं नहीं कर सका। Goole मुझे इस पृष्ठ और 'इकट्ठा तथ्यों' का उपयोग करने के बारे में आपके बिंदु परिचय मुझे मदद की। अब मैं 'लिनक्स-छवि-अतिरिक्त - {{ansible_kernel}} 'के माध्यम से स्थापित कर सकता हूं। धन्यवाद –

+1

मैं इंटरनेट पर फ़ाइलों को डाउनलोड करने के लिए 'चेकसम' का उपयोग करने का भी सुझाव दूंगा! –

5

command को खोल के माध्यम से संसाधित नहीं किया जाता है। shell का प्रयोग करें।

- name: Ensure docker-compose is installed and available 
    shell: curl -L https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 
+0

हाँ, यह काम करता है और हाँ, मैं जवाब के साथ कुल नोब हूं :)। बहुत बहुत धन्यवाद। –