ansible-playbook结合shell script实现批量修改主机ip

1.业务侧需求

将80台主机的IP地址10.143.167.107-186变更为10.143.166.156-235

2.任务分解

Step1.编制shell脚本,利用shell脚本更新网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-bond0)。


如下为ansible-playbook任务

Step2.执行shell脚本
Step3.重启network网络服务,使更新后的网卡配置文件生效。
Step4.修改网络交换机配置,测试网络联通性,该步骤需要由网络工程师操作,本文不做叙述。

2.需求实现

  1. 编制shell脚本
[root@ansible project]# cat /tmp/Modify.sh
#!/bin/bash
#获取主机ip地址最后一位
INIT_IP="$(ifconfig bond0 | grep -w inet|awk '{print $2}'|awk -F. '{print $4}')"
#定义主机ip地址的起始值
START_IP=107
END_IP=156
#计算主机ip与起始值的差值
CHAZHI=$((INIT_IP - START_IP))
#将主机的目标起始值与差值加和得出最终目标ip
DEST_IP=$((END_IP + CHAZHI))
#替换ifcfg-bond0中的IP值
sed -i 's/IPADDR=10.143.167.'$INIT_IP'/IPADDR=10.143.166.'$DEST_IP'/g' /etc/sysconfig/network-scripts/ifcfg-bond0
#替换ifcfg-bond0中的网关值
sed -i 's/GATEWAY=10.143.167.254/GATEWAY=10.143.166.254/g' /etc/sysconfig/network-scripts/ifcfg-bond0

2.编辑ansible hosts文件

[root@ansible project]# cat inventory
[batch1]
10.143.167.[107:186]

[batch1:vars]
ansible_ssh_user='root'
ansible_ssh_pass='xxxxxxx'

  1. 编写playbook剧本
[root@ansible project]# cat Modify_ip.yml
---
    - hosts: all
      gather_facts: no
      tasks:
      - name: Modify ifcfg-bond0 configuration
        script: /tmp/Modify.sh

      - name: restart network
        service: name=network state=restarted
        async: 20
        poll: 0

本例Modify_ip.yml中async和poll值非常关键,如果未配置,playbook任务将无法顺利执行。

  1. 运行ansible-playbook剧本
    找到剧本放置的目录,执行ansible-playbook
[root@ansible project]# ansible-playbook Modify_ip.yml
  1. 修改网络交换机配置
    请网络工程师修改网络交换机vlan后,更新inventory清单文件,执行ansible all -m ping测试联通性。

注释:ansible批量修改ip的方式有很多种,本文只列举一种方式请参考,有问题评论区讨论。

你可能感兴趣的:(shell,ansible,批量修改ip,linux,playbook)