मेरे पास टेम्प्लेट निर्देशिका में .jinja2 टेम्प्लेट का एक संग्रह है जिसे मैंने Ansible में पैरामीटर किया है।

└── roles
    ├── copyFiles
    │   ├── tasks
    │   │   └── main.yml
    │   └── templates
    │       ├── file.one.name.xml.jinja2
    │       ├── file.two.name.xml.jinja2
    │       ├── file.three.name.xml.jinja2
    |       ...

मैं निर्देशिका को लक्षित करने के लिए फ़ाइलों की प्रतिलिपि बनाना चाहता हूं। हालांकि, मैं नीचे दिए गए एक with_items शब्दकोश में प्रत्येक व्यक्तिगत जिन्जा टेम्पलेट को निर्दिष्ट नहीं करना चाहता।

---
  - name: Copy the Configuration templates
    template:
      src: "templates/{{ item.src }}"
      dest: "target/{{ item.dest }}"
      owner: "{{ user}}"
      group: "{{ group }}"
      mode: 0644
    with_items:
      - { src: 'file.one.name.xml.jinja2', dest: 'file.one.name.xml' }
      - { src: 'file.two.name.xml.jinja2', dest: 'file.two.name.xml' }
      - { src: 'file.three.name.xml.jinja2', dest: 'file.three.name.xml' }
      ...

क्या टेम्प्लेट निर्देशिका में किसी भी .jinja2 फ़ाइलों को लक्षित करने के लिए टेम्प्लेट रेंडरिंग और कॉपी को गतिशील रूप से करने का कोई तरीका है?

0
SSF 18 फरवरी 2019, 07:02

1 उत्तर

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

मुझे एक रास्ता मिल गया है। मैंने अपने सापेक्ष पथ का उपयोग करके टेम्पलेट निर्देशिका में सभी फ़ाइलों को सूचीबद्ध करने के लिए रेगेक्स का उपयोग किया। फिर नया नाम बनाने के लिए regex_replace का उपयोग करें जिसका उपयोग गंतव्य फ़ाइल के लिए किया जाएगा:

---
  - name: Copy the Configuration templates
    template:
      src:  "{{ item }}"
      dest: "target/{{ item | basename | regex_replace('\.jinja2','') }}"
      owner: "{{ user}}"
      group: "{{ group }}"
      mode: 0644
    with_fileglob:
       - ../templates/*.jinja2
2
SSF 18 फरवरी 2019, 04:20