是否可以使用Ansible playbook在节点计算机上迭代多个文件并搜索或替换特定行

是否可以使用Ansible playbook在节点计算机上迭代多个文件并搜索或替换特定行,ansible,ansible-2.x,ansible-inventory,ansible-facts,ansible-template,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 是否有一个模块或方法可以迭代多个文件并搜索这些文件中是否存在特定字符串。字符串将保持不变 “lineinfle”模块可以帮助您搜索单个文件,但我想知道是否有一种方法可以迭代多个文件并搜索此字符串,然后用不同的值替换它 单个文件的当前剧本内容: - name: Modify line to incl

是否有迭代多个文件的模块/方法

用例:

有多个
.conf
文件

/opt/a1.conf

/opt/a2.conf

/var/app1/conf/a3.conf

/etc/a4.conf
是否有一个模块或方法可以迭代多个文件并搜索这些文件中是否存在特定字符串。字符串将保持不变

“lineinfle”模块可以帮助您搜索单个文件,但我想知道是否有一种方法可以迭代多个文件并搜索此字符串,然后用不同的值替换它

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

    - 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命令来执行此操作,但有没有可行的方法来实现此目的?


谢谢

您是否尝试通过
循环
参数进行迭代

- 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

您可以使用with_items指令来转换文件,也可以使用Jinja脚本查找字符串,如下所示:

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

{%for files%}{item.find('string')}{%endfor%}

您可以使用ansible loop_控件循环变量,ansible将在未来版本中与_项一起弃用