ansible(replace模块)批量修改centos8、ubuntu、centos7网卡地址_临江仙我亦是行人的博客-程序员宝宝_ansible replace

技术标签: Linux  ansible  

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

思路演进

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之前,否则,即是做了异步处理机制,也会出现阻塞

[[email protected] ansible]#cat change_network.yml
---
- hosts: all
  remote_user: root

  vars:
    old_ip: "172.17"
    new_ip: "172.18"

  tasks:
    - name: find centos8 network name
      shell: find /etc/sysconfig/network-scripts -name "ifcfg*"
      register: centos8_network_name
      when:
        - ansible_facts['distribution'] == "CentOS"
        - ansible_facts['distribution_major_version'] == "8"

    - name: replace centos8 network
      replace:
        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 interface
      setup: filter=ansible_interfaces
      register: centos8_interface
      when:
        - ansible_facts['distribution'] == "CentOS"
        - ansible_facts['distribution_major_version'] == "8"

    - name: find centos7 network name
      shell: find /etc/sysconfig/network-scripts -name "ifcfg*"
      register: centos7_network_name
      when:
        - ansible_facts['distribution'] == "CentOS"
        - ansible_facts['distribution_major_version'] == "7"

    - name: replace centos7 netowork
      replace:
        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 name
      shell: find /etc/netplan/ -name "*.yaml"
      register: ubuntu_network_name
      when: ansible_facts['distribution'] == "Ubuntu"

    #- name: show variable
    #  debug: msg="{
   { network_name }}"

    - name: replace ubuntu network
      replace:
        path: "{
   { item }}"
        regexp: "{
   { old_ip }}"
        replace: "{
   { new_ip }}"
      with_items: "{
   { ubuntu_network_name.stdout_lines }}"
      when: ansible_facts['distribution'] == "Ubuntu"
      
    - name: restart centos8 network
      shell:
        nmcli connection reload && nmcli connection up "{
   { item }}"
      with_items: "{
   { centos8_interface.ansible_facts.ansible_interfaces }}"
      ignore_errors: True
      async: 1
      poll: 0
      when:
        - ansible_facts['distribution'] == "CentOS"
        - ansible_facts['distribution_major_version'] == "8"

    - name: restart ubuntu netowrk
      shell: netplan apply
      ignore_errors: True
      async: 1
      poll: 0
      when: ansible_facts['distribution'] == "Ubuntu"

    - name: restart centos7 network
      shell: systemctl restart network
      ignore_errors: True
      async: 1
      poll: 0
      when:
        - ansible_facts['distribution'] == "CentOS"
        - ansible_facts['distribution_major_version'] == "7"

    - name: wait for connection
      wait_for_connection:
        timeout: 0
      ignore_errors: True
[[email protected] ansible]#

执行playbook

[[email protected] ansible]#ansible-playbook change_network.yml
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_56752399/article/details/117789932

智能推荐

CGB2107-Day04-mybatis高级用法_闪耀太阳的博客-程序员宝宝

1.Mybatis作业 特殊处理2.Mybatis优化的配置属性3.Mybatis动态Sql4.Mybatis 关联查询方式 一对一 一对多 多对多

开启NetworkManager服务后_weixin_34128411的博客-程序员宝宝

[[email protected]~]#chkconfig--list|grepNetworkManagerNetworkManager0:off1:off2:on3:on4:on5:on6:off[[email protected]~]#chkconfig--level12346NetworkManager...

总结JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作 _a414129902的博客-程序员宝宝

前些日子,一直奔波于这三种操作,想想以后会常用,干脆整理下来,供自己以后查看。也给大家分享一下!         以下面写出自己认为有用的操作和代码。        第一次在园里面写,肯定有很多不足够之处,希望大家多多指点。  一、Iframe 篇 //&&&&&&&&&&&&amp...

JPA 学习(二) 常用注解_殇莫忆的博客-程序员宝宝

目录JPA基本注解@[email protected]@[email protected]@Column @BasicJPA_Transient注解JPA_Temporal注解JPA基本注解@Entity用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表。如声明一个实体类 Customer,它将映射到数据库中的 customer 表上。...

mxnet multi-task_平凡&养生的博客-程序员宝宝

import argparseimport os, sys# for import the docker based mxnet versionmxnet_root = "/mxnet/"sys.path.insert(0, mxnet_root + 'python')import mxnet as mximport importlibimport find_mxnetimpo...

腾讯云 配置短信验证_坏小哥的博客-程序员宝宝

今天和大家分享一下如何配置腾讯云短信验证。首先进入官网:https://cloud.tencent.com/?fromSource=gwzcw.234976.234976.234976然后,点击产品,搜索短信,你会进入下面的页面:https://cloud.tencent.com/product/sms点击免费开通,添加应用。接着,点击你的应用——>国内短息——>短息配置—...

随便推点

java jbpm_jbpm_巫德海的博客-程序员宝宝

2007年11月22日作者:杨洪波jbpm解析流程定义有三种方式:1)par包static ProcessDefinition auctionProcess =ProcessArchive.parse("org/jbpm/tdd/auction.par");注意,必须在classes的org/jbpm/tdd/目录下有一个auction.par文件2)xml文件方式static ProcessDe...

关于shell和终端(terminal)_maopaopao2087的博客-程序员宝宝

你启动了一个终端(terminal),你就同时启动了一个shell,这个终端作为输入输出,由shell将输入的命令通过查找环境变量启动应用程序。shell本身也是内核自带的一个应用程序。

pta L1-059 敲笨钟 (20分)_qq_43567039的博客-程序员宝宝

万能头文件刷题过程中,题解中出现一个陌生的头文件bits/stdc++.h只要用了这个头文件 其他的就不用写了。#include<bits/stdc++.h> using namespace std;题目描述微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chon

微信小程序用canvas画图并分享_I-T枭的博客-程序员宝宝_小程序分享canvas

<canvas style='width:{{canvasWidth}}px;height:{{canvasHeight}}px' canvas-id='myCanvas'></canvas><button open-type='share'>分享</button>【js部分】 var ctx = "" // 用于获取canvas var leftMargin = "" //文字距离左边边距 var topMargin = "" .

树莓派3B+安装配置samba_zhangjun62的博客-程序员宝宝

安装软件sudo apt-get install samba samba-common-bin修改配置文件sudo vim /etc/samba/smb.conf配置每个用户可以读写自己的home目录,在“[homes]”节中,把“read only = yes”改为“read only = no”重启samba服务sudo /etc/init.d/samba re...

如何修改Google Adsense广告位的宽高_ConstXiong的博客-程序员宝宝

在自己的博客网站放了 Google Adsense 的广告,但是样式和网站整体的风格都不太搭。1、希望设置正方形的广告位的宽度查了下文档可以修改 <ins> 节点的 style 参数,如我希望宽度设置位 div 宽度的 80% 降低广告位的透明度 在 div 中居中修改代码如下:<script async src="https://pagead2.g...

推荐文章

热门文章

相关标签