智一面高级运维工程师在线评测:http://www.gtalent.cn/exam/interview/nsYteJ5wFfWkMdb2
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.需求实现
编制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'
3.编写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任务将无法顺利执行。
4.运行ansible-playbook剧本
找到剧本放置的目录,执行ansible-playbook
[root@ansible project]# ansible-playbook Modify_ip.yml
修改网络交换机配置
请网络工程师修改网络交换机vlan后,更新inventory清单文件,执行ansible all -m ping测试联通性。
注释:ansible批量修改ip的方式有很多种,本文只列举一种方式请参考,有问题加群讨论。
运维工程师QQ在线交流群:580175957