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