मेरी उत्तरदायी प्लेबुक फ़ाइलें test.yml है।

उसी स्थान पर मेरे पास चर वाली तीन फाइलें हैं यानी app_base_vars.yaml, web_base_vars.yaml और web_bran_vars.yml

चर फ़ाइलों में से एक की नमूना सामग्री:

more app_base_vars.yaml
10.8.45.192: /opt/logs/cell17
10.8.87.165: /opt/logs/cell23
....
....

जब मैं प्लेबुक को इस प्रकार चलाता हूं:

ansible-playbook /app/Ansible/playbook/test.yml -e "USER=wasadm Dest_IP=10.0.21.111,10.9.17.113,10.8.19.114 Layer=web_base"

मुझे निम्न त्रुटि आउटपुट मिलता है:

  [WARNING]: provided hosts list is empty, only localhost is available.
 Note that the implicit localhost does not match 'all'


 PLAY [Find the details here 10.0.21.111,10.9.17.113,10.8.19.114 and
 wasadm]
 *************************************************************************************************

 TASK [add_host]
 ************************************************************************************************************************************************************* changed: [localhost] => (item=10.0.21.111) changed: [localhost] =>
 (item=10.9.17.113) changed: [localhost] => (item=10.8.19.114)

 TASK [Load a variable file based on the options the user has selected
 i.e. "web_base_*.yaml."]
 **************************************************************************** fatal: [localhost]: FAILED! => {"ansible_facts": {},
 "ansible_included_var_files": [], "changed": false, "message": "Could
 not find or access 'web_base_*.yaml'\nSearched
 in:\n\t/app/Ansible/playbook/vars/web_base_*.yaml\n\t/app/Ansible/playbook/web_base_*.yaml\n\t/app/Ansible/playbook/vars/web_base_*.yaml\n\t/app/Ansible/playbook/web_base_*.yaml
 on the Ansible Controller.\nIf you are using a module and expect the
 file to exist on the remote, see the remote_src option"}
         to retry, use: --limit @/app/Ansible/playbook/test.retry

 PLAY RECAP
 ******************************************************************************************************************************************************************** localhost                  : ok=1    changed=1    unreachable=0   
 failed=1

मेरी प्लेबुक test.yml नीचे दी गई है:

---

- name: "Find the details here {{ Dest_IP }} and {{ USER }}"

  hosts: localhost
  gather_facts: no

  tasks:
   - add_host: name={{ item }}
               groups=dest_nodes
               ansible_user={{ USER }}
     with_items: "{{ Dest_IP.split(',') }}"

   - name: Load a variable file based on the options the user has selected i.e. "{{ Layer }}_*.yaml."
     include_vars: "{{ Layer }}_*.yaml"
     register: include_vars_result

   - name: Display included Files
     debug:
       var: include_vars_result

मेरे दो प्रश्न हैं:

  1. मुझे पता है कि फाइलों को आयात करने जैसे चर के आधार पर फाइलों को शामिल करने के अन्य समाधान भी हैं; हालांकि मैं इस त्रुटि को डीबग करना और हल करना चाहता हूं और इसे काम पर लाना चाहता हूं।

  2. आउटपुट में आप देख सकते हैं

/app/Ansible/playbook/vars/web_base_*.yaml

जब मैंने इसे नहीं पूछा है तो उत्तरदायी "vars" निर्देशिका के तहत फ़ाइलों की तलाश क्यों कर रहा है।

नोट: मैंने सुनिश्चित किया है कि तीन चर फ़ाइलें सही स्थान पर हैं और मौजूद हैं।

0
Ashar 27 जुलाई 2019, 07:47

2 जवाब

सबसे बढ़िया उत्तर

इस तरह मुझे यह काम करने के लिए मिला :)

 include_vars:
   file: "{{ item }}"
 with_fileglob:
       - "{{ Layer }}_*.yaml"

मेरा वाइल्डकार्ड प्रारूप ठीक था। सहायता के लिए धनयवाद !!

0
Ashar 28 जुलाई 2019, 06:24

मुझे लगता है कि वाइल्डकार्ड का उपयोग वास्तव में यहां समर्थित नहीं है, यह वास्तव में एक स्टार के साथ एक फ़ाइल नाम की तलाश करता है। कम से कम मैंने ऐसा उदाहरण कभी नहीं देखा। इसके बजाय एक ही निर्देशिका के तहत कई फाइलें रखने पर ध्यान दें और फिर उन सभी को शामिल करें। दस्तावेज़ में आपको मिले विकल्प देखें:

https://docs.ansible.com/ansible/latest/modules/include_vars_module.html

आपकी अपेक्षा से अधिक निर्देशिकाओं में ansible क्यों दिख रहा है, यह विभिन्न मापदंडों के लिए ऊपर दिए गए दस्तावेज़ में लिखा गया है।

चीयर्स!

अद्यतन 2019-07-30

कार्य उदाहरण:

Test.yml:

---
- hosts: localhost
  vars:
    layer: web_base
  tasks:
    - include_vars:
        dir: .
        files_matching: "{{ layer }}_.+[.]yml"

    - debug:
        var: myvar

Web_base_var.yml

myvar: testing 1 2 3...

रन के दौरान आउटपुट:

$ ansible-playbook test.yml

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

TASK [Gathering Facts] *************************************************************************************************
ok: [localhost]

TASK [include_vars] ****************************************************************************************************
ok: [localhost]

TASK [debug] ***********************************************************************************************************
ok: [localhost] => {
    "myvar": "testing 1 2 3..."
}

PLAY RECAP *************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

0
haxorof 30 जुलाई 2019, 22:20