2014-07-08 12 views
16

तो लग रहा है इस सुविधा की तरह पदावनत किया गया है, मैं सच में समझ में नहीं आता क्यों, Ansible सीटीओ के का कहना है कि हम बजाय with_nested का उपयोग करना चाहिए, लेकिन ईमानदारी से मैं पता नहीं कैसे यह करने के लिए है में शामिल हैं,Ansible 1.6 with_items पदावनत

यहाँ मेरी playboook:

- hosts: all 
    user: root 
    vars: 
    - sites: 
    - site: site1.com 
     repo: ssh://[email protected]/orgname/reponame 
     nginx_ssl: true; 
     copy_init: 
     - path1/file1.txt 
     - path2/file2.php 
     - path2/file3.php 

    - site: site2.net 
     repo: ssh://[email protected]/orgname/reposite2 

    - site: site4.com 
     repo: ssh://[email protected]/orgname/reposite3 
     copy_init: 
     - path2/file2.php 

    tasks: 
    - name: Bootstrap Sites 
     include: bootstrap_site.yml site={{item}} 

और जब Ansible 1.6.6 में इस पर अमल करने की कोशिश कर त्रुटि संदेश:

ERROR: [DEPRECATED]: include + with_items is a removed deprecated feature. Please update your playbooks.

कैसे मैं कुछ करने के लिए इस प्लेबुक में बदल सकते हैं कि इस उत्तरदायी संस्करण के साथ काम करता है?

+8

मुझे कुछ याद आ रहा है। 'With_items' कहां है। 'Item' कहां से आ रहा है? – Batandwa

उत्तर

20

दुर्भाग्यवश, कोई ड्रॉप-इन प्रतिस्थापन नहीं है। कुछ चीजें जो आप कर सकते हैं:

  • अपनी शामिल फ़ाइल में सूची पास करें और वहां फिर से जाएं।

    vars: 
        sites: 
         - site1 
         - site2 
    tasks: 
        - include: bootstrap_site.yml sites={{sites}} 
    

    और bootstrap_site.yml में: अपने प्लेबुक में एक module रूप

    - some_Task: ... 
        with_items: sites 
    
    - another_task: ... 
        with_items: sites 
    
    ... 
    
  • पुनर्लेखन bootstrap_site (अजगर, बैश में, जो कुछ भी), अपने प्लेबुक के लिए एक library dir अगले में रख दें। तो फिर तुम कर सकता है:

    - bootstrap_site: site={{item}} 
        with_items: sites 
    

अद्यतन: Ansible V2 बाहर है और वापस लाता है को शामिल + with_items combo loop!

+0

धन्यवाद, वास्तव में मैंने पहले से ही पहले समाधान के साथ आगे बढ़ने की कोशिश की है, लेकिन यह बहुत बोझिल है, क्योंकि ऐसे कार्य हैं जो पहले से ही उपनिवेशों के माध्यम से लूप करते हैं, और नेस्टेड लूप को इसके अत्यधिक जटिल होने के बावजूद, मुझे दूसरे समाधान के लिए जाना पसंद है! अच्छा लग रहा है, लेकिन .. क्या मैं इसे जवाब में नहीं कर सकता? और .. बीटीडब्ल्यू, इस बारे में कोई अंतर्दृष्टि क्यों इसे बहिष्कृत किया गया है? – jmserra

+1

इसे हटा दिया गया है क्योंकि [माना जाता है] (https://github.com/ansible/ansible/issues/3512#issuecomment-20873812) लोगों ने इसे मुख्य रूप से इन्वेंट्री चर के साथ उपयोग किया, और कार्यान्वयन कारणों से उनका उपयोग इस तरह नहीं किया जा सकता है। इसलिए भ्रम से बचने के लिए (क्यों कुछ चर काम करते हैं जबकि अन्य नहीं करते हैं) उन्होंने अभी सुविधा को हटा दिया है। क्या आपके मामले में व्यावहारिक नहीं है? वाईएएमएल में मॉड्यूल लिखने के बारे में, कोई नहीं कर सकता, मुझे डर है। – hkariti

+0

ठीक है धन्यवाद, यह वास्तव में एक साधारण विशेषता है जैसा कि आप उत्तरदायी के साथ कर सकते हैं, यह बहुत ही निराशाजनक लगता है, यह मामूली दिखता है, लेकिन मुझे लगता है क्योंकि मैं पूरी तरह से समझ नहीं पा रहा हूं कि हुड के नीचे क्या चल रहा है । with_nested 3 या 4 स्तर subarrays के लिए उपयोग करने के लिए और अधिक जटिल है, इसलिए मैं अंततः एक और समाधान के साथ चला गया, 1 प्रत्येक सरणी आइटम प्रति कार्य शामिल है, सबसे साफ नहीं है लेकिन काम करता है ... – jmserra

1

मुझे मूल पोस्ट में पूछे गए ब्लाहब्ला-बहिष्कृत संदेश को बाधित करने का उत्तर मिला।

मैं जोड़ा एक फ़ाइल वार्स/filenames.yml:

filenames: 
    - file1 
    - file2 
    - file3 

अगला मैं प्लेबुक की शुरुआत में इन नामों को पढ़ने: फिर

- name: read filenames 
    include_vars: vars/filenames.yml 

, मैं उन्हें बाद में उपयोग कर सकते हैं:

- name: Copy files 1 
    copy: src=/filesrc1/{{ item }} dest=/filedest1/{{ item }} owner=me group=we 
    with_items: filenames 

और इसी तरह ....

सम्मान, टॉम