是否可以使用Ansible剧本在节点计算机上遍历多个文件并搜索n替换特定行

时间:2018-12-07 04:36:38

标签: ansible ansible-2.x ansible-inventory ansible-facts ansible-template

是否有用于迭代多个文件的模块/方式?

用例:

有多个.conf文件

/opt/a1.conf

/opt/a2.conf

/var/app1/conf/a3.conf

/etc/a4.conf

是否存在用于遍历多个文件并搜索这些文件中是否存在特定字符串的模块或方法。字符串将保持不变。

“ lineinfile”模块可帮助您搜索单个文件,但我想知道是否有一种方法可以遍历多个文件并搜索此字符串并将其替换为其他值

单个文件的我当前的剧本内容:

    - name: Modify line to include Timeout
      become: yes
      become_method: sudo
        lineinfile:
        path: /tmp/httpd.conf
        regexp: 'http\s+Timeout\s+\='
        line: 'http Timeout = 10'
        backup: yes
  

以上内容只能用于单个文件。

或者,我们可以使用某种shell命令来执行此操作,但是有没有Ansible的方法来实现此目的?

谢谢

2 个答案:

答案 0 :(得分:2)

您是否尝试过通过loop参数进行迭代?

- 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
  loop:
    - /opt/a1.conf
    - /opt/a2.conf
    - /var/app1/conf/a3.conf
    - /etc/a4.conf

答案 1 :(得分:1)

您可以使用with_items指令来传输文件,或者您可以使用Jinja脚本查找类似于以下内容的字符串:

v8js

files: - /opt/a1.conf - /opt/a2.conf - /var/app1/conf/a3.conf - /etc/a4.conf