ansible(replace模块)批量修改centos8、ubuntu、centos7网卡地址
需求:由于网段改变,批量修改网段。
思路演进
1、修改地址最开始我们使用 shell 模块,采用 sed 命令进行替换,然而在运行 ansible playbook 的时候有一个警告提示可以选择 lineinfile 模块,但是 lineinfile 模块有一个问题,即
lineinfile 的 regexp 参数使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,而当删除文本时,如果有多行文本都能被匹配,这些行都会被删除。
由于需要进行多行匹配进行替换,所以我们使用 replace 模块
2、网卡可能存在多块,并且名称有可能是不固定的,所以采用 find /etc/sysconfig/network-scripts -name "ifcfg*"
,然后注册成变量进行循环执行修改
3、Centos8 采用nmcli
进行网卡管理,重启网卡需要执行nmcli con reload
和 nmcli con up con-name
两步,由于不知道修改了那块网卡,所以我们需要把网卡名称定义(注册)成变量,这样使用 nmcli con up con-name
的时候才不会有所遗漏
4、在修改完网卡重启的时候,由于重启网卡导致 ssh 连接断开,ansible 会产生阻塞,所以采用了异步处理机制,增加了async和poll实现
5、注意,要将Centos8
的网卡重启放到Ubuntu
和Centos7
之前,否则,即是做了异步处理机制,也会出现阻塞
[root@centos8 ansible]#cat change_network.yml
---
- hosts: allremote_user: rootvars:old_ip: "172.17"new_ip: "172.18"tasks:- name: find centos8 network nameshell: find /etc/sysconfig/network-scripts -name "ifcfg*"register: centos8_network_namewhen:- ansible_facts['distribution'] == "CentOS"- ansible_facts['distribution_major_version'] == "8"- name: replace centos8 networkreplace:path: "{{ item }}"regexp: "{{ old_ip }}"replace: "{{ new_ip }}"with_items: "{{ centos8_network_name.stdout_lines }}"when:- ansible_facts['distribution'] == "CentOS"- ansible_facts['distribution_major_version'] == "8"- name: centos8 interfacesetup: filter=ansible_interfacesregister: centos8_interfacewhen:- ansible_facts['distribution'] == "CentOS"- ansible_facts['distribution_major_version'] == "8"- name: find centos7 network nameshell: find /etc/sysconfig/network-scripts -name "ifcfg*"register: centos7_network_namewhen:- ansible_facts['distribution'] == "CentOS"- ansible_facts['distribution_major_version'] == "7"- name: replace centos7 netoworkreplace:path: "{{ item }}"regexp: "{{ old_ip }}"replace: "{{ new_ip }}"with_items: "{{ centos7_network_name.stdout_lines }}"when:- ansible_facts['distribution'] == "CentOS"- ansible_facts['distribution_major_version'] == "7"- name: find ubuntu network nameshell: find /etc/netplan/ -name "*.yaml"register: ubuntu_network_namewhen: ansible_facts['distribution'] == "Ubuntu"#- name: show variable# debug: msg="{{ network_name }}"- name: replace ubuntu networkreplace:path: "{{ item }}"regexp: "{{ old_ip }}"replace: "{{ new_ip }}"with_items: "{{ ubuntu_network_name.stdout_lines }}"when: ansible_facts['distribution'] == "Ubuntu"- name: restart centos8 networkshell:nmcli connection reload && nmcli connection up "{{ item }}"with_items: "{{ centos8_interface.ansible_facts.ansible_interfaces }}"ignore_errors: Trueasync: 1poll: 0when:- ansible_facts['distribution'] == "CentOS"- ansible_facts['distribution_major_version'] == "8"- name: restart ubuntu netowrkshell: netplan applyignore_errors: Trueasync: 1poll: 0when: ansible_facts['distribution'] == "Ubuntu"- name: restart centos7 networkshell: systemctl restart networkignore_errors: Trueasync: 1poll: 0when:- ansible_facts['distribution'] == "CentOS"- ansible_facts['distribution_major_version'] == "7"- name: wait for connectionwait_for_connection:timeout: 0ignore_errors: True
[root@centos8 ansible]#
执行playbook
[root@centos8 ansible]#ansible-playbook change_network.yml
ansible(replace模块)批量修改centos8、ubuntu、centos7网卡地址相关推荐
- OS模块--批量修改文件名字(一)创建和修改文件路径
OS模块:在程序中,经常需要对大量文件和路径进行操作,比如:查询某一路径下同种类型文件,批量修改文件名字等.OS模块提供了非常丰富得方法用来处理文件和目录. 一.常用OS模块列表 二.OS模块创建文件 ...
- OS模块--批量修改文件名字(二)
通过三个案例,介绍批量修改文件名字的方法. 一.批量在文件前/后任意添加文件名字 二.批量去掉文件字符 三.批量替换某一类型文件名字 一.批量在文件前/后任意添加文件名字(批量在文件前面添加'方法11 ...
- 使用replace pioneer批量修改文件名
shell的正则表达式还是很难记忆的,也没有沉静的心情看文档,于是使用了replace pioneer. 1. 启动replace pioneer,Tools->batch runner , ...
- 利用python os模块批量修改文件名称
# 核心函数 os.renames(Old_File_Name, New_File_Name) 现在,我们针对文件夹里面文件进行批量化修改文件名 在此之前请注意,修改文件名后不可逆,换句话说,修改完了 ...
- c语言;文件名批量修改要求可以修改整个文件内文件名或后缀名自动,ubuntu批量修改文件名字(换动画资源必用)...
Ubuntu 16.04 批量改文件名 在Ubuntu16.04下给文件批量改名可以使用rename命令. MATLAB中批量修改文件的名字 在运行matlab时有时需要用统一的文件格式,这个时候对文 ...
- 批量修改编码格式小工具
批量修改编码格式小工具 工具地址https://github.com/amrali-eg/EncodingChecker
- python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...
由于需要从某个网页上下载一些PDF文件,但是需要下载的PDF文件有几百个,所以不可能用人工点击来下载.正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的url ...
- 可以批量修改文件名、文件后缀的实用工具
本篇文章主要讲解,批量修改文件名.文件后缀的实用工具操作方法 作者:任聪聪 批量修改文件名称工具 下载地址:https://download.csdn.net/download/hj960511/70 ...
- tmac v6设置中文_如何修改网络连接的网卡MAC物理地址
识别修改后的网卡物理地址 通过命令"ipconfig /all "可以看到输出如下信息,其中 02-7D-B1-C5-2E-5D便是修改后的物理网卡地址 无线局域网适配器 无线网络 ...
最新文章
- 使用UIScrollView 实现分页功能
- 感觉很好的IT自学参考教程收集
- 获取控制器 nextResponder的简单应用
- Java ObjectOutputStream writeBytes()方法与示例
- Java 中sleep()与wait()的区别
- 大K提醒各位常备DOS杀毒盘
- 阻塞非阻塞、同步异步
- 安徽大学线性代数习题册(第三章详细解答)
- 统计学名词解释 —— 3. 「简单随机样本」、「联合分布」与「联合密度」
- SXLib3D -- 一款高效的点云和网格交互处理平台
- java四舍五入保留两位小数方法整理
- 书犹药也,善读之可以医愚
- Learn to say “fuck you” to the world every once in a while
- 腾讯百度阿里变身天使投资背后:PE估值偏低
- 3蛋白wb_干货分享:三个蛋白组学数据库的应用
- 基础知识 | es6的知识点
- android 11鼠标右键返回功能(已验证)
- 用CSS画小猪佩奇,你就是下一个社会人! js将“I am a coder”反转成 “coder a am I”,不许用split,join,subString,reverse;求解方法三...
- 一个简单的天气预报APP
- 树的先序/中序/后序遍历
热门文章
- mybatis运行原理(面试回答)
- SpringBoot自动装配原理解析——面试可以这样会回答
- 面试官:连这些问题都不知道?就想要50k?
- python-优矿-期权合成策略分析
- 数据+AI技术,赋能企业业务和管理流程
- tp886n设置虚拟服务器,TP-Link TL-WR886N V5wifi端口映射怎么设置 | tplogin.cn
- python 下载/上载文件到Synology群晖
- 卫生专业计算机考试证书,中国卫生人才卫生网官网_卫生资格证电子证书打印时间...
- 区块链数据营销系统:颠覆传统营销模式的新一代营销体系
- 【实战】——基于机器学习回归模型对广州二手房价格进行分析及模型评估