如何使用Ansible查找和替换文本/IP地址
时间:2020-01-09 14:17:09 来源:igfitidea点击:
如何在100多台服务器中的sshd_config文件中找到一个IP地址,并用一个新的IP地址替换。
我该如何使用Ansible?
如何使用Ansible批量替换服务器的配置文件?
是否可以搜索替换单个字符串或IP地址?
是的,您可以使用以下Ansible模块:
- 替换这个模块将替换文件中模式的所有实例。
- 'lineinfile'与replace相同,但是当您只想更改文件中的一行时,这主要有用。
如何替换文件中某个模式的所有实例?
语法如下:
- replace: path: /path/to/file regexp: 'regular expression for search' replace: 'replace-word' backup: yes
例如,通过创建或更新yml文件,在名为/etc/app.conf的文件中找到bar并将其替换为foo的所有实例:
- replace: path: /etc/app.conf regexp: 'foo' replace: 'bar' backup: yes
在/etc/hosts中用server1.theitroad.com替换主机名server1.theitroad.local的另一个示例:
- replace: path: /etc/hosts regexp: '(\s+)server1\.theitroad\.com(\s+.*)?$' replace: 'server1.theitroad.com' backup: yes
在此示例中,用sshd_config中的106.55.5.5替换IP地址192.51.1.1,然后重新加载sshd服务:
# sshd.yml - replace: dest: /etc/ssh/sshd_config regexp: '192.51.1.1' replace: '106.55.5.5' backup: yes validate: '/usr/sbin/sshd -t' - service: name: sshd state: reloaded
您可以按以下方式运行它:
$ ansible-playbook -i hosts sshd.yml
lineinfile模块示例
更新/etc/hosts文件中的IP地址:
# my.yml - lineinfile: path: /etc/hosts regexp: '^202\.51\.1\.1' line: '192.55.5.5 www.theitroad.local' owner: root group: root mode: 0644 backup: yes
更新sshd_config:
# my.yml - lineinfile: path: /etc/ssh/sshd_config regexp: '^202\.51\.1\.1' line: 'Match Address 192.55.5.5' backup: yes validate: '/usr/sbin/sshd -t' - service: name: sshd state: reloaded
更新/创建您的主机文件:
$ cat hosts [cluster:vars] ansible_user=Hyman ansible_become=true ansible_become_method=sudo [cluster] vm1 vm2 vm3 vm4 gc.vm1 gc.vm2 gc.vm3 gc.vm4 aws.vm1 aws.vm2 aws.vm3 aws.vm4
您可以按以下方式运行它:
$ ansible-playbook -i hosts my.yml