Ansible学习笔记5
copy模块:(重点)
copy模块用于对文件的远程拷贝(如把本地的文件拷贝到远程主机上。)
在master的主机上准备一个文件,拷贝文件到group1的所有主机上。
这个用的频率非常高,非常有用的一个模块。主要功能是统一修改配置文件。
[root@localhost ~]# ansible group1 -m copy -a "src=/etc/hosts dest=/etc/hosts"
192.168.17.105 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"checksum": "ae3c3e4f757591751a520e8a4bba45490e6c3164","dest": "/etc/hosts","gid": 0,"group": "root","md5sum": "96e65e8b17fb861014e3ebfb1bff65b3","mode": "0644","owner": "root","size": 226,"src": "/root/.ansible/tmp/ansible-tmp-1693368934.83-2354-136222982931833/source","state": "file","uid": 0
}
192.168.17.106 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"checksum": "ae3c3e4f757591751a520e8a4bba45490e6c3164","dest": "/etc/hosts","gid": 0,"group": "root","md5sum": "96e65e8b17fb861014e3ebfb1bff65b3","mode": "0644","owner": "root","size": 226,"src": "/root/.ansible/tmp/ansible-tmp-1693368934.83-2356-71888655051337/source","state": "file","uid": 0
}
然后到agent1和agent2的机器上检查/etc/hosts文件内容都进行了覆盖更新。
域名跟主机名的区别:(域名是外网的,,主机名是内网的。)
域名是公网的唯一名字,主机名是内网的名字。
目前自建DNS做域名解析已经很少了,但可以通过DNS解析主机名来实现多台服务器的解析。
以后,我们就可以使用ansible的copy和hostname模块,轻松实现了服务器的主机名管理,DNS也不需要搭建了。
[root@localhost ~]# ansible group1 -m copy -a "src=/etc/fstab dest=/tmp/222"
192.168.17.106 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"checksum": "e4d20d971638d2d2169c6818bfea2b7d064d284e","dest": "/tmp/222","gid": 0,"group": "root","md5sum": "9048d752264ab2533e2cb774c7ddef4a","mode": "0644","owner": "root","size": 465,"src": "/root/.ansible/tmp/ansible-tmp-1693369734.13-2410-126910575557982/source","state": "file","uid": 0
}
192.168.17.105 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"checksum": "e4d20d971638d2d2169c6818bfea2b7d064d284e","dest": "/tmp/222","gid": 0,"group": "root","md5sum": "9048d752264ab2533e2cb774c7ddef4a","mode": "0644","owner": "root","size": 465,"src": "/root/.ansible/tmp/ansible-tmp-1693369734.13-2408-266313468027161/source","state": "file","uid": 0
}

这里面有个diff比较的机制在里面。这个要注意下的。
如何判断一个文件有没有变化:可以使用md5sum来进行判断,如果文件内容没有发生变化,那么它的值是不会发生变化的。
force=no:
[root@localhost tmp]# ansible group1 -m copy -a "src=/etc/inittab dest=/tmp/222 force=no"
192.168.17.105 | SUCCESS => {"changed": false,"dest": "/tmp/222","src": "/etc/inittab"
}
192.168.17.106 | SUCCESS => {"changed": false,"dest": "/tmp/222","src": "/etc/inittab"
}
说明:如果/tmp/222存在,则不覆盖。这个就是force=no的作用。
force参数控制是否强制覆盖。force=yes:如果目标文件已存在,则会强制覆盖。
使用backup参数控制是否备份文件:
backup=yes:表示如果拷贝的文件内容与原文件内容不一样,则会备份一份。
[root@localhost tmp]# ansible group1 -m copy -a "src=/etc/inittab dest=/tmp/222 backup=yes"
192.168.17.106 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"backup_file": "/tmp/222.3124.2023-08-30@12:47:58~","changed": true,"checksum": "e285e50c4dd88d8a2f644dd1750f60400ca60f94","dest": "/tmp/222","gid": 0,"group": "root","md5sum": "66a88d6c4d693170753ea3382f8bc150","mode": "0644","owner": "root","size": 511,"src": "/root/.ansible/tmp/ansible-tmp-1693370880.02-2606-93307506651983/source","state": "file","uid": 0
}
192.168.17.105 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"backup_file": "/tmp/222.3003.2023-08-30@12:47:58~","changed": true,"checksum": "e285e50c4dd88d8a2f644dd1750f60400ca60f94","dest": "/tmp/222","gid": 0,"group": "root","md5sum": "66a88d6c4d693170753ea3382f8bc150","mode": "0644","owner": "root","size": 511,"src": "/root/.ansible/tmp/ansible-tmp-1693370879.99-2604-281117331564526/source","state": "file","uid": 0
}

在agent1机器上,如果内容不一直,先做一份备份。这个场景也是挺重要的。
如果怕出问题,可以做一个相应的备份。
copy模块需要注意拷贝目录后面是否带有"/"符号。拷贝的时候也可以修改属性。

练习:在master主机上配置好所有的yum源,然后拷贝所有的group1的远程主机上。(要求目录内的内容完全一致。)
[root@localhost tmp]# ansible group1 -m file -a "path=/etc/yum.repos.d/ state=absent"
192.168.17.106 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"path": "/etc/yum.repos.d/","state": "absent"
}
192.168.17.105 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"path": "/etc/yum.repos.d/","state": "absent"
}
[root@localhost tmp]# ansible group1 -m copy -a "src=/etc/yum.repos.d dest=/etc/"
192.168.17.105 | CHANGED => {"changed": true,"dest": "/etc/","src": "/etc/yum.repos.d"
}
192.168.17.106 | CHANGED => {"changed": true,"dest": "/etc/","src": "/etc/yum.repos.d"
}
源是目录,是拷贝目录,有个小细节,就是最后要加"/"。rsync加/和不加/是有区别的。
[root@localhost tmp]# ansible group1 -m copy -a "src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/"
192.168.17.105 | SUCCESS => {"changed": false,"dest": "/etc/yum.repos.d/","src": "/etc/yum.repos.d/"
}
192.168.17.106 | SUCCESS => {"changed": false,"dest": "/etc/yum.repos.d/","src": "/etc/yum.repos.d/"
}
实现两个文件夹的内容完全一致,那可以先把这个文件整个进行删除,然后再进行copy。这个思路。
相关文章:
Ansible学习笔记5
copy模块:(重点) copy模块用于对文件的远程拷贝(如把本地的文件拷贝到远程主机上。) 在master的主机上准备一个文件,拷贝文件到group1的所有主机上。 这个用的频率非常高,非常有用的一个模块…...
LeetCode 面试题 02.06. 回文链表
文章目录 一、题目二、C# 题解 一、题目 编写一个函数,检查输入的链表是否是回文的。 点击此处跳转题目。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true …...
linux环境没有curl或者telnet命令解决方法与区分linux环境类型
如何区分你当前使用的 Linux 系统是 Ubuntu、CentOS 还是 Alpine,查看 /etc/os-release 文件 [rootlocalhost ~]# cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_I…...
golang channel
channel是不同协程之间异步通信的数据结构。 基本用法 1 构造 ch:make(chan int)//无缓冲 ch:make(chan int,10)//有缓冲2 读操作 val:<-ch <-ch val,ok:<-ch3 写 var data int ch<-data4 关闭 close(ch)5 多路复用 select{ case <-parent.Done():child.…...
高等职业学校物联网实训室建设方案
一、概述 1.1专业背景 物联网(Internet of Things)被称为继计算机、互联网之后世界信息产业第三次浪潮,它并非一个全新的技术领域,而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升,是随着传感网、通…...
Python基础学习第四天:Python注释
创建注释 注释以 # 开头,Python 将忽略它们: 实例 #This is a comment print("Hello, World!")运行实例 注释可以放在一行的末尾,Python 将忽略该行的其余部分: 实例 print("Hello, World!")…...
Puppeteer中使用Stealth.min.js库
这里需要安装npm install puppeteer-extra puppeteer-extra-plugin-stealth,然后,在启动浏览器时,Puppeteer 会自动应用 Stealth.min.js 插件的功能。 const puppeteer require(puppeteer-extra); const StealthPlugin require(puppeteer-…...
JVM ZGC垃圾收集器
ZGC垃圾收集器 ZGC(“Z”并非什么专业名词的缩写,这款收集器的名字就叫作Z Garbage Collector)是一款在JDK 11中新加入的具有实验性质[1]的低延迟垃圾收集器,是由Oracle公司研发的。 ZGC收集器是一款基于Region内存布局的&#…...
事务管理-事务进阶-propagation属性
目录 事务属性-传播行为 propagation 案例 需求 步骤 具体代码 小结 事务属性-传播行为 propagation 事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。即如果事务方法A中调用了事务方法B,…...
树多选搜索查询,搜索后选中状态仍保留
<template><div class"half-transfer"><div class"el-transfer-panel"><div><el-checkbox v-model"selectAll" change"handleSelectAll">全部</el-checkbox></div><el-input v-model&qu…...
数据结构--字典树(trie)
概念: Trie 是一种能够快速插入和查询字符串的多叉树结构。、 节点的编号各不相同,根节点编号为0,其他节点用来标识路径,还可以标记单词的插入次数,边表示字符。 tire 维护字符串的集合,支持两种操作&…...
iframe通过postMessage进行跨域通信以及在Angular中使用
写在前面 在前端开发过程中,会遇到一些需要使用iframe的场景,使用iframe关键的一个点是数据之间的传输,基于同源的要求十分苛刻,大家基本上是都是跨域的,如果跨域进行数据传输呢? 大家使用的比较多的就是p…...
rust学习-引用C库
link和extern #[link(name = "...")] 是一个用于链接外部库的属性宏。 可以在 Rust 代码中引入其他语言编写的动态链接库(.so、.dll 等文件),从而实现 Rust 和其他语言的互操作。 #[link(name = "...")] 属性宏用于在 Rust 模块中引入标准 C 库(如 m…...
WebAssembly 在云原生中的实践指南
1 WebAssembly 介绍 WebAssembly(Wasm)是一种通用字节码技术,它可以将其他编程语言(如 Go、Rust、C/C 等)的程序代码编译为可在浏览器环境直接执行的字节码程序。 WebAssembly 的初衷之一是解决 JavaScript 的性能问…...
Azure sqlserver 更改字符集
前言 我们的Azure SQL Server是在2018年建的,当时还不支持汉字的字符集。然后最近发现因为字符集的缘故,出了bug,要调整字符集。然后就照着sqlserver 排序规则(字符集)查看与修改 一通修改。 然后神奇的事情来了&…...
git push时,由于commit了大文件无法成功push的解决办法
2句命令解决! 如图可以看见大文件的md5值,复制下来,以下命令会使用到 命令1: git rev-list --objects --all | grep b8d13387c0dfd7a8cec9ff0f6c8ded06eb21556f执行上面命令将得到,如下的输出,可以得知是…...
2023_Spark_实验一:Windows中基础环境安装
Ⅰ、WINDOWS中安装JDK1.8 一、下载安装包 链接:百度网盘 请输入提取码 所在文件夹:根目录或者大数据必备工具--》开发工具(前端后端)--》后端 下载文件名称:jdk-8u191-windows-x64.exe 二、安装JDK 1.现在转到下载的exe文件可用的文件夹&…...
如何在Windows / Mac / iPhone / Android / Online上将MP4转换为MP3
如果只想保留MP4视频的音频轨道,则可以将MP4转换为MP3格式。 MP3是几乎所有设备,播放器和编辑器都支持的数字音频格式。无论您将MP4视频转换为MP3音频以进行脱机播放或进一步编辑,都可以提取音轨并保存为MP3格式。这是在不损失质量的情况下将…...
【App端】uni-app使用百度地图api和echarts省市地图下钻
目录 前言方案一:echarts百度地图获取百度地图AK安装echarts和引入百度地图api完整使用代码 方案二:echarts地图和柱状图变形动画实现思路完整使用代码 方案三:中国地图和各省市地图下钻实现思路完整使用代码 前言 近期的app项目中想加一个功…...
深度学习(十)--- cv2.pointPolygonTest() 判断一点是否在指定区域内
今天发现了opencv一个好用的函数 cv2.pointPolygonTest() ,它可以判断一个点是否在指定区域内。 1. cv2.pointPolygonTest() 函数解析 dist cv2.pointPolygonTest(contour,point,Boolean)contour: 多边形轮廓 point: 坐标点 Boolean:True或False ,Tru…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
