需求:由于网段改变,批量修改网段。

思路演进

1、修改地址最开始我们使用 shell 模块,采用 sed 命令进行替换,然而在运行 ansible playbook 的时候有一个警告提示可以选择 lineinfile 模块,但是 lineinfile 模块有一个问题,即

lineinfile 的 regexp 参数使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,而当删除文本时,如果有多行文本都能被匹配,这些行都会被删除。

由于需要进行多行匹配进行替换,所以我们使用 replace 模块

2、网卡可能存在多块,并且名称有可能是不固定的,所以采用 find /etc/sysconfig/network-scripts -name "ifcfg*",然后注册成变量进行循环执行修改

3、Centos8 采用nmcli进行网卡管理,重启网卡需要执行nmcli con reloadnmcli con up con-name 两步,由于不知道修改了那块网卡,所以我们需要把网卡名称定义(注册)成变量,这样使用 nmcli con up con-name 的时候才不会有所遗漏

4、在修改完网卡重启的时候,由于重启网卡导致 ssh 连接断开,ansible 会产生阻塞,所以采用了异步处理机制,增加了async和poll实现

5、注意,要将Centos8的网卡重启放到UbuntuCentos7之前,否则,即是做了异步处理机制,也会出现阻塞

[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网卡地址相关推荐

  1. OS模块--批量修改文件名字(一)创建和修改文件路径

    OS模块:在程序中,经常需要对大量文件和路径进行操作,比如:查询某一路径下同种类型文件,批量修改文件名字等.OS模块提供了非常丰富得方法用来处理文件和目录. 一.常用OS模块列表 二.OS模块创建文件 ...

  2. OS模块--批量修改文件名字(二)

    通过三个案例,介绍批量修改文件名字的方法. 一.批量在文件前/后任意添加文件名字 二.批量去掉文件字符 三.批量替换某一类型文件名字 一.批量在文件前/后任意添加文件名字(批量在文件前面添加'方法11 ...

  3. 使用replace pioneer批量修改文件名

    shell的正则表达式还是很难记忆的,也没有沉静的心情看文档,于是使用了replace pioneer. 1.  启动replace pioneer,Tools->batch runner  , ...

  4. 利用python os模块批量修改文件名称

    # 核心函数 os.renames(Old_File_Name, New_File_Name) 现在,我们针对文件夹里面文件进行批量化修改文件名 在此之前请注意,修改文件名后不可逆,换句话说,修改完了 ...

  5. c语言;文件名批量修改要求可以修改整个文件内文件名或后缀名自动,ubuntu批量修改文件名字(换动画资源必用)...

    Ubuntu 16.04 批量改文件名 在Ubuntu16.04下给文件批量改名可以使用rename命令. MATLAB中批量修改文件的名字 在运行matlab时有时需要用统一的文件格式,这个时候对文 ...

  6. 批量修改编码格式小工具

    批量修改编码格式小工具 工具地址https://github.com/amrali-eg/EncodingChecker

  7. python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...

    由于需要从某个网页上下载一些PDF文件,但是需要下载的PDF文件有几百个,所以不可能用人工点击来下载.正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的url ...

  8. 可以批量修改文件名、文件后缀的实用工具

    本篇文章主要讲解,批量修改文件名.文件后缀的实用工具操作方法 作者:任聪聪 批量修改文件名称工具 下载地址:https://download.csdn.net/download/hj960511/70 ...

  9. tmac v6设置中文_如何修改网络连接的网卡MAC物理地址

    识别修改后的网卡物理地址 通过命令"ipconfig /all "可以看到输出如下信息,其中 02-7D-B1-C5-2E-5D便是修改后的物理网卡地址 无线局域网适配器 无线网络 ...

最新文章

  1. 使用UIScrollView 实现分页功能
  2. 感觉很好的IT自学参考教程收集
  3. 获取控制器 nextResponder的简单应用
  4. Java ObjectOutputStream writeBytes()方法与示例
  5. Java 中sleep()与wait()的区别
  6. 大K提醒各位常备DOS杀毒盘
  7. 阻塞非阻塞、同步异步
  8. 安徽大学线性代数习题册(第三章详细解答)
  9. 统计学名词解释 —— 3. 「简单随机样本」、「联合分布」与「联合密度」
  10. SXLib3D -- 一款高效的点云和网格交互处理平台
  11. java四舍五入保留两位小数方法整理
  12. 书犹药也,善读之可以医愚
  13. Learn to say “fuck you” to the world every once in a while
  14. 腾讯百度阿里变身天使投资背后:PE估值偏低
  15. 3蛋白wb_干货分享:三个蛋白组学数据库的应用
  16. 基础知识 | es6的知识点
  17. android 11鼠标右键返回功能(已验证)
  18. 用CSS画小猪佩奇,你就是下一个社会人! js将“I am a coder”反转成 “coder a am I”,不许用split,join,subString,reverse;求解方法三...
  19. 一个简单的天气预报APP
  20. 树的先序/中序/后序遍历

热门文章

  1. mybatis运行原理(面试回答)
  2. SpringBoot自动装配原理解析——面试可以这样会回答
  3. 面试官:连这些问题都不知道?就想要50k?
  4. python-优矿-期权合成策略分析
  5. 数据+AI技术,赋能企业业务和管理流程
  6. tp886n设置虚拟服务器,TP-Link TL-WR886N V5wifi端口映射怎么设置 | tplogin.cn
  7. python 下载/上载文件到Synology群晖
  8. 卫生专业计算机考试证书,中国卫生人才卫生网官网_卫生资格证电子证书打印时间...
  9. 区块链数据营销系统:颠覆传统营销模式的新一代营销体系
  10. 【实战】——基于机器学习回归模型对广州二手房价格进行分析及模型评估