Есть ли лучший способ перебирать несколько файлов на узле машины, используя Ansible playbook и искать n заменить конкретную строку - PullRequest
0 голосов
/ 12 декабря 2018

Есть ли лучший способ перебирать несколько файлов на компьютере-узле с помощью Ansible playbook и искать и заменять определенную строку.

У меня есть следующие файлы в моем каталоге, и он должен перебирать эти файлыи проверьте и замените определенную строку в файле.

/opt/a1.conf
/opt/a2.con.f
/var/app1/conf/a3.conf
/etc/a5.conf
/etc/a6.conf
/etc/a7.conf
/etc/a8.conf
/etc/a9.conf

Моя Ansible Playbook может быть отформатирована следующим образом:


- 
 name: Install nginx and other binaries using with_item and variables.
 gather_facts: yes
 hosts: aws1
 become_method: sudo
 become: yes
 tasks:
- name: Modify line to include Timeout
  become: yes
  become_method: sudo
    lineinfile:
    path: {{ item }}
    regexp: 'http\s+Timeout\s+\='
    line: 'http Timeout = 10'
    backup: yes
   with-items
     - /opt/a1.conf
     - /opt/a2.con.f
     - /var/app1/conf/a3.conf
     - /etc/a5.conf
     - /etc/a6.conf
     - /etc/a7.conf
     - /etc/a8.conf
     - /etc/a9.conf

Это на самом деле сработает и поможет мне.Я также мог бы создать файл vars.yaml, добавить все эти файлы и использовать их в синтаксисе with_items.Однако это на самом деле приводит к тому, что книга воспроизведения выглядит слишком длинной, так как количество файлов для поиска больше

Возможно, мы сможем добиться того же самого эффективно, используя шаблон jinja2, используя цикл for.Пример: {% для элемента в vars.yml%}

, и это скорее будет эффективный способ сделать это, и я не стану делать мою Ansible playbook неуклюжей, но я не могу понять точную команду для ее зацикливания.

Существует ли команда jinja для достижения того же или лучшего способа перебирать несколько файлов, а не записывать каждый из них в список воспроизведения.

Спасибо

1 Ответ

0 голосов
/ 13 декабря 2018

Вам не нужно jinja2 для этого.Почему бы вам не использовать отдельный файл для переменной списка файлов, такой как vars.yml, со следующим содержимым:

---
files:
  - /opt/a1.conf
  - /opt/a2.con.f
  - /var/app1/conf/a3.conf
  - /etc/a5.conf
  - /etc/a6.conf
  - /etc/a7.conf
  - /etc/a8.conf
  - /etc/a9.conf

и включить этот файл в свою пьесу:

---
- name: Install nginx and other binaries using with_item and variables.
  gather_facts: yes
  hosts: aws1
  become_method: sudo
  become: yes
  vars_files:
    - z.var

  tasks:
  - name: Modify line to include Timeout
    lineinfile:
      path: {{ item }}
      regexp: 'http\s+Timeout\s+\='
      line: 'http Timeout = 10'
      backup: yes
    loop:
      "{{ files }}"
...