如何使用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

