5

में एक मानचित्रण का निर्माण जब भी मैं अपने प्लेबुक चलाने निम्न चेतावनी आता है:चेतावनी जबकि Ansible

[चेतावनी]: एक ओर जहां /etc/ansible/roles/foo/tasks/main.yml से एक मानचित्रण का निर्माण , लाइन 17, कॉलम 3, एक डुप्लिकेट dict कुंजी (फ़ाइल) मिला। केवल अंतिम निर्धारित मूल्य का उपयोग करना।

कार्य फ़ोल्डर में मेरी main.yml की प्रासंगिकता का इस तरह है:

(लाइन 17 जो थोड़ा दूर लगती है तो मुझे लगता है कि समस्या के साथ है फ़ाइलों को साफ करने के काम नहीं है पिछले "स्क्रिप्ट" लाइन)

- name: Run script to format output 
    script: foo.py {{ taskname }} /tmp/fcpout.log 
- name: Clean temp files 
    file: path=/tmp/fcpout.log state=absent 

और मेरे वार्स फ़ाइल:

--- 
my_dict: {SLM: "114", Regular: "255", Production: "1"} 
taskid: "{{my_dict[taskname]}}" 

चलाने के लिए मेरी प्लेबुक मैं करता हूँ: "सर्वर" पैरामीटर के साथ, taskname हो और कि से पता लगाने के जो करने के लिए आईडी संदर्भित करता है:

ansible-playbook playbooks/foo.yml --extra-vars "server=bar taskname=SLM" 

मुझे क्या करना कोशिश कर रहा हूँ आदेश पंक्ति तर्क लेने के लिए, मेजबान सेट किया गया है सेवा मेरे। इस आईडी को मेरी पायथन लिपि में पहले इनपुट के रूप में उपयोग किया जाता है जो दूरस्थ रूप से चलता है।

प्लेबुक ठीक काम करता है, लेकिन मुझे समझ में नहीं आता कि मुझे चेतावनी क्यों मिलती है। क्या कोई यह समझा सकता है कि यहां क्या गलत है?

उत्तर

7

क्या आप वाकई लाइन 17 के आसपास और अधिक नहीं हैं? यह चेतावनी ट्रिगर होती है जब किसी कार्य में दो समान कुंजी होती हैं (या सामान्य रूप से किसी भी जगह में)।

चेतावनी का दावा दो file कुंजी देखते हैं, सुझाव कार्य इस प्रकार है:

- name: Clean temp files 
    file: ... 
    file: ... 

एक आम गलती है कि लोगों को अगले काम के लिए एक नया सूची आइटम शुरू करने के लिए भूल जाते हैं। निम्नलिखित, वैध होगा, जबकि इसके बाद के संस्करण नहीं है:

- name: Clean temp files 
    file: ... 
- file: ... 

मैं Ansible कभी कभी लाइनों हो जाता है या यहां तक ​​कि त्रुटि संदेश में गलत फ़ाइलें देखा। मैंने इसे tasks/main.yml के बारे में शिकायत की है जबकि समस्या वास्तव में handlers/main.yml में थी। यदि डुप्लिकेट file कुंजी के साथ ऐसा कोई कार्य उस पंक्ति के पास नहीं पाया जा सकता है, तो संपूर्ण फ़ाइल या इसके लिए अन्य फ़ाइलों को भी खोजें। यदि कहीं भी ऐसा कुछ भी नहीं मिला है, तो ऐसा लगता है कि आपको Ansible में एक बग मिली है। उस स्थिति में आपको repot it on github होना चाहिए।

+0

आप सही हैं। एक दूसरी फ़ाइल थी: 'कार्य। मैं उत्तरदायी शब्दों से अपरिचित हूं, इसलिए मुझे यह नहीं मिला कि "एक डुप्लिकेट dict कुंजी (फ़ाइल)" मिला है, यह फ़ाइल मॉड्यूल का जिक्र कर रहा था। "कुंजी" शब्द के साथ मैंने सोचा कि इसे मेरे शब्दकोश के साथ करना था ... मदद के लिए धन्यवाद। –

+0

यदि आपके पास दो "कार्य:" कुंजी भी हैं तो आप इसे प्राप्त कर सकते हैं :) परिदृश्य: प्लेबुक में एक ही कार्य है और आपने इसे डुप्लिकेट किया है लेकिन गलती से कार्य शीर्षक को कॉपी भी किया है। बैकअप कर सकते हैं @udondan गलत लाइन संख्याओं के बारे में भी कहता है - मैंने कई पंक्तियों को चेतावनी दी है। –