是否可以使用 Ansible 剧本遍历节点机器上的多个文件并搜索 n 替换特定行
Is it possible to iterate through multiple files on the node machine using Ansible playbook and search n replace a particular line
是否有module/way来遍历多个文件?
用例:
有多个.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
The above can be used only for a single file.
或者,我们可以使用某种 shell 命令来做到这一点,但是有没有一种 Ansible 的方法可以做到这一点?
谢谢
您是否尝试过遍历 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
您可以使用 with_items 指令来传输文件,或者您可以使用 Jinja 脚本查找如下所示的字符串:
files:
- /opt/a1.conf
- /opt/a2.conf
- /var/app1/conf/a3.conf
- /etc/a4.conf
{% for item in files %} {{item.find('string')}} {% endfor %}
是否有module/way来遍历多个文件?
用例:
有多个.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
The above can be used only for a single file.
或者,我们可以使用某种 shell 命令来做到这一点,但是有没有一种 Ansible 的方法可以做到这一点?
谢谢
您是否尝试过遍历 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
您可以使用 with_items 指令来传输文件,或者您可以使用 Jinja 脚本查找如下所示的字符串:
files:
- /opt/a1.conf
- /opt/a2.conf
- /var/app1/conf/a3.conf
- /etc/a4.conf
{% for item in files %} {{item.find('string')}} {% endfor %}