2015-12-17 10 views
8

में रिटर्न कोड का मूल्यांकन करना मैं एक कार्य को स्वचालित करने पर काम कर रहा हूं जिसे सॉफ़्टवेयर के नवीनतम संस्करण को फ़ाइल में जोड़ना आवश्यक है। मैं इसे एक ही संस्करण के लिए कई बार नहीं करना चाहता हूं।उत्तरदायी सशर्त

यह निम्न उदाहरण फ़ाइल पर लग रहा है:

var software releases = new Array(
    "4.3.0", 
    "4.4.0", 
    "4.5.0", 
    "4.7.0", 
    "4.8.0", 
    "4.11.0", 
    "4.12.1", 
    "4.14.0", 
    "4.15.0", 
    "4.16.0", 
); 

चूक main.yml तरह

VERSION: 4.16.2 

कोड

- name: register version check 
    shell: cat /root/versions.js | grep -q {{VERSION}} 
    register: current_version 

- debug: msg="The registered variable output is {{ current_version.rc }}" 

- name: append to versions.js 
    lineinfile: 
    dest: /root/versions.js 
    regexp: '^\);' 
    insertbefore: '^#\);' 
    line: " \"{{VERSION}}\",\n);" 
    owner: root 
    state: present 
    when: current_version.rc == 1 

समस्या कुछ में पारित होगा: डीबग संदेश है current_version.rc का मूल्यांकन करना और grep कमांड आउटपुट के आधार पर मुझे बूलियन मान दिखा रहा है, लेकिन मैं फिर से नहीं कर सकता यह निर्धारित करने के लिए कि क्या कार्य चलाना चाहिए, when सशर्त में इसका उपयोग करें।

संपादित करें: उत्पादन:

PLAY [localhost] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [localhost] 

TASK: [test | register version check] ***************************************** 
failed: [localhost] => {"changed": true, "cmd": "cat /root/versions.js | grep -q 3.19.2", "delta": "0:00:00.003570", "end": "2015-12-17 00:24:49.729078", "rc": 1, "start": "2015-12-17 00:24:49.725508", "warnings": []} 

FATAL: all hosts have already failed -- aborting 

PLAY RECAP ******************************************************************** 
      to retry, use: --limit @/root/site.retry 

localhost     : ok=1 changed=0 unreachable=0 failed=1 
+0

आप खेलने के उत्पादन में पोस्ट कर सकते हैं? – ydaetskcoR

+0

आप कब कथन प्राप्त नहीं कर रहे हैं, क्योंकि रिटर्न कोड 1 है। 'Ignore_errors: True' जोड़ें। – nikobelia

+0

निकोबेलिया - इससे मेरी समस्या हल हो गई! इसका जवाब देने में संकोच न करें, इसलिए यदि आप चाहें तो मैं इसे चिह्नित कर सकता हूं। धन्यवाद। – Bryan

उत्तर

20

nikobelia के रूप में, grep returns an exit code of 1 when it doesn't match any lines टिप्पणी में बताया। उत्तरदायी तब एक त्रुटि के रूप में (वास्तव में किसी शेल/कमांड कार्य से 0 के अलावा किसी भी स्थिति कोड) की व्याख्या करता है और इसलिए तुरंत विफल हो जाता है।

ignore_errors का उपयोग करके आप खोल/कमांड कार्य से प्रतिक्रिया कोड को अनदेखा करने के लिए उत्तरदायी बता सकते हैं। हालांकि grep के साथ इस वास्तविक त्रुटियों (2 की वापसी कोड द्वारा दिए गए) की उपेक्षा तो बजाय आप failed_when इस तरह उपयोग कर सकते हैं होगा:

- name: register version check 
    shell: cat /root/versions.js | grep -q {{VERSION}} 
    register: current_version 
    failed_when: current_version.rc == 2 
+0

हां, पूरा होने के लिए आप भी इसका उपयोग कर सकते हैं: 'fail_when: (result.rc [0, 1] में नहीं)' ' – Boop