Ansible学习笔记5

news2024/12/26 11:03:54

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。这个思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/948562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

28 - restful -request和response

response: 需要定制返回字段的格式 request: 需要校验前端传来的参数 代码示例: 1. 创建模型类 from datetime import datetime from ext import dbclass User(db.Model):id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)username db.Colu…

Error:java: OutOfMemoryError: insufficient memory

现象:idea编译代码(Build)报错:Error:java: OutOfMemoryError: insufficient memory 亲测有效 在进行代码编译的时候出现以上的提示。从中可以看是内存方面的问题。只需要调节IDEA在编译过程中,内存大小的设置&#…

面向对象的设计原则

设计模式 Python 设计模式:对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计 面向对象 三大特性:封装、继承、多态 …

代码随想录笔记--哈希表篇

目录 1--有效的字母异位词 2--两个数组的交集 3--两数之和 4--四数相加II 5--三数之和 6--四数之和 1--有效的字母异位词 利用哈希表存储每个字母的出现次数&#xff0c;比较两个字符串各个字母出现次数是否相等即可&#xff1b; #include <iostream> #include <…

常用的css样式

1&#xff1a;flex布局 .flex-between {display: flex;justify-content: space-between; }.flex-evenly {display: flex;justify-content: space-evenly; }.flex-end {display: flex;justify-content: flex-end; }.flex {display: flex; }.flex-center {display: flex;justify…

实验室的服务器和本地pycharm怎么做图传

参考 远程调试 qt.qpa.xcb: could not connect to display, echo DISPLAY为空[已解决]_功夫小象的博客-CSDN博客 先安装x11 MobaXterm x11-forwarding_C--G的博客-CSDN博客 我是在容器中搞得 1&#xff0c;安装qt5 pip install PyQt5 -i https://pypi.douban.com/simple …

vue 入门案例模版

vue 入门案例1 01.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> &l…

科创板50ETF期权交易:详细规则、费用、保证金和开户攻略

科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金&#xff08;ETF&#xff09;&#xff0c;旨在跟踪科创板50指数的表现&#xff0c;下文介绍科创板50ETF期权交易&#xff1a;详细规则、费用、保证金和开户攻略&am…

如何解决vue3.0+typescript项目提示找不到模块“./App.vue

一、解决方案如下&#xff1a;需在项目目录下加上下面这段代码即可&#xff01;如果没有vite-env.d.ts目录需要继续往下看 declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<{}, {}, any>export default vueCompon…

云服务器利用Docker搭建sqli-labs靶场环境

一、安装宝塔面板 使用xshell、electerm、SecureCRT等远程终端连接登陆上云服务器&#xff0c;在Linux宝塔面板使用脚本安装 安装后&#xff0c;如下图&#xff1a;按照提示&#xff0c;在云服务器防火墙/安全组放行Linux宝塔面板的端口 在浏览器打开上述网址&#xff0c;登…

创建一个空的vue项目,配置及步骤

查看需要的环境及插件版本 创建vue命令 默认配置 手动配置 其他 hash和history的区别&#xff1a; hash 模式&#xff0c;url后&#xff0c;会带着#&#xff0c;改变hash&#xff0c;页面不会刷新&#xff0c;不会更改整个页面&#xff0c;只会更改#后面路由配置的内容&#x…

自定义overflow轨道样式,并且滚动条两边存在间距(滚动条不贴边显示)

最终效果 实现思路 border box-shadow 实现代码 ::-webkit-scrollbar {width: 20px;height: 4px; }::-webkit-scrollbar-thumb {border-radius: 20px;border: 6px solid rgba(0, 0, 0, 0);box-shadow: 14px 0px 0 #e3e3e3 inset; }::-webkit-scrollbar-thumb:hover {box-sh…

水经微图网页版界面功能说明

水经微图网页版&#xff0c;可轻松将关注的地点制作成您的个人地图。 您可以在任意位置添加标注点或绘制地图&#xff0c;查找地点并将其保存到您的地图中&#xff0c;或导入地图数据迅速制作地图并保存&#xff0c;您还可以运用图标和颜色展示个性风采&#xff0c;从而可让每…

低温控制中自增压液氮罐改进为杜瓦电热压力精密调节的解决方案

摘要&#xff1a;在液氮低温冷却控制系统中&#xff0c;目前大多数都采用自增压液氮罐作为低温源&#xff0c;但存在的问题是罐内压力无法精密调节、喷射液氮温度和流量不稳定、冷却温度无法准确控制以及冷却温度范围较窄等问题。为此本文提出了液氮罐内电加热压力调节解决方案…

Jupyter installation Tutorial

文章目录 1. 面向的系统2. 什么是Jupyter&#xff1f;3. 安装Python环境4. 安装Jupyter notebook5. Jupyter的启动和配置6. Jupyter的使用技巧7. conclusion参考文献 1. 面向的系统 Windows安装 2. 什么是Jupyter&#xff1f; Jupyter Notebook是一个开源的Web应用程序&…

如何优化vue项目 如何提升速度

优化 Vue 项目和提升速度可以从多个方面入手。下面是一些常见的优化技巧&#xff1a; 使用生产环境构建&#xff1a;在部署项目时&#xff0c;使用 Vue 的生产环境构建可以去除开发环境的调试工具和警告信息&#xff0c;减小项目的体积。 代码拆分和懒加载&#xff1a;将项目代…

哔哩哔哩引流脚本详细使用教学分享,B站引流脚本定制详细实操演示

大家好我是你们的小编一辞脚本&#xff0c;今天给大家分享新的知识&#xff0c;很开心可以在CSDN平台分享知识给大家,很多伙伴看不到代码我先录制一下视频 在给大家做代码&#xff0c;给大家分享一下哔哩引流脚本的知识和视频演示 不懂的小伙伴可以认真看一下&#xff0c;我们…

yum源以及rpm安装包配置、yum源冲突、yum-config-manager命令找不到、curl: (35)、docker镜像重复拉取失败

yum源配置并解决冲突、curl: (35&#xff09;、docker镜像重复拉取失败、yum-config-manager命令找不到的解决方法 有的时候按照教程走&#xff0c;可能会设置yum源&#xff0c;设置后用yum下载东西很有可能或造成冲突 yum源冲突的解决方式无非有两种&#xff1a;1. 删除冲突软…

Android Native Code开发学习(一)环境配置

Android Native Code开发学习&#xff08;一&#xff09; 本教程为native code学习笔记&#xff0c;希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04&#xff0c;当然windows也是可以的&#xff0c;区别不大 环境配置 首先我们新建一个native C项目 然后我们下载NDK和C…

安卓手机版陌陌引流脚本,陌陌同城引流的方法详细教学

大家好我是你们的小编一辞脚本&#xff0c;今天给大家分享新的知识&#xff0c;很开心可以在CSDN平台分享知识给大家,很多伙伴看不到代码我先录制一下视频 在给大家做代码&#xff0c;给大家分享一下qq引流脚本的知识和视频演示 不懂的小伙伴可以认真看一下&#xff0c;我们一…