ansible:

ansible:

远程自动化运维

ansible是基于python开发的配置管理和应用部署工具。

也是自动化运维的重要工具。

可以批量配置,部署,管理上千台主机。

只需要在一台主机配置ansible就可以完成其他主机的操作。

操纵模式:

1、模块化操作,命令行执行

2、playbook,剧本,也是把命令行脚本化。脚本的格式是yaml格式

ansible的特性:幂等性

幂等性:多次操作或者是多次执行,对系统的影响不会发送变化,无论执行多少次结果都是一样的。

ansible什么都不会做

restart不是幂等性,restart是先停再起。

httpd get 幂等性

post 上传数据,发生变化

ansible的四大组件:

1、lnventory 主机清单 主机组

必须是要声明管理主机的地址或者其他配置,不声明ansible无法对目标主机进行操作

2、modules 模块 学习的核心

ansible的功能是靠模块来实现的

3、插件

4、playbooks 剧本————脚本(复用)

模块和语法的学习:

命令行

192.168.60.70 ansible

192.168.60.80 被管理端

192.168.60.90 被管理端

安装ansible
#先安装epel语言
[root@test7 ~]# yum -y install epel-release
#安装ansible
[root@test7 ~]# yum -y install ansible
[root@test7 ~]# cd /etc/ansible/
[root@test7 ansible]# vim host20 [web]23 192.168.60.8033 [xy102]37 192.168.60.90
[root@test7 ansible]# ssh-keygen -t rsa         #一路回车
#给80传密码
[root@test7 ansible]# sshpass -p '123' ssh-copy-id root@192.168.60.80
#给90传密码
[root@test7 ansible]# sshpass -p '123' ssh-copy-id root@192.168.60.90
[root@test7 ansible]# ansible-doc -l        #列出ansible所有已安装的模块
#如果报错就再传一次密码
command,ansible的默认模块就是command
[root@test7 ansible]# ansible 192.168.60.80 -m command -a "date"
[root@test7 ansible]# sshpass -p '123' ssh-copy-id root@192.168.60.80
#如果报错就再传一次密码
[root@test7 ansible]# ansible 192.168.60.80 -m command -a "date"
[root@test7 ansible]# sshpass -p '123' ssh-copy-id root@192.168.60.90
#所有组中的所有主机都执行
[root@test7 ansible]# ansible all -m command -a "date"
[root@test7 opt]# ansible 192.168.60.90 -a 'tar -xf /opt/nginx-1.22.0.tar.gz -C /opt'

[root@test7 ansible]# ansible-doc -l        #列出ansible所有已安装的模块
​
1、command模块 基础模块,也是ansible的默认模块 不支持管道符和重定向操作。执行一般的linux命令。

ansible的执行命令

ansible  <组名/ip地址> -m 指定模块,不加-m,默认使用command -a <参数/命令>

常用的参数:

1、chdir 在目标主机提前进入目录,然后执行指令。
[root@test7 ansible]# ansible 192.168.60.80 -a 'chdir=/home ls'
#解压压缩包
[root@test7 opt]# ansible 192.168.60.90 -a 'chdir=/opt tar -xf /opt/nginx-1.22.0.tar.gz'
2、creates 判断文件是否存在,如果存在,就不执行后面的指令
[root@test8 opt]# ls
123 
​
[root@test7 ansible]# ansible 192.168.60.80 -a 'creates=/opt/123 ls /opt'
192.168.60.80 | SUCCESS | rc=0 >>
skipped, since /opt/123 exists
3、removes 判断文件是否存在,如果存在,执行命令
[root@test8 opt]# ls
123 
​
[root@test7 ansible]# ansible 192.168.60.80 -a 'removes=/opt/123 ls /opt'
192.168.60.80 | CHANGED | rc=0 >>
123
elasticsearch-6.7.2.rpm
jenkins-2.396-1.1.noarch.rpm
test
4、shell模块 支持管道符和重定向,也可以用逻辑表达式 &&(且) ;(逻辑或)
[root@test7 ansible]# ansible 192.168.60.80 -m shell -a 'useradd test'
192.168.60.80 | CHANGED | rc=0 >>
​
[root@test7 ansible]# ansible 192.168.60.80 -m shell -a 'echo 123456 | passwd --stdin test'
192.168.60.80 | CHANGED | rc=0 >>
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@test7 ansible]# ansible 192.168.60.90 -m shell -a 'touch /opt/123.txt && echo 123 > /opt/123.txt && cat /opt/123.txt'
ansible.cfg to get rid of this message.
192.168.60.90 | CHANGED | rc=0 >>
123
##目标主机创建一个脚本,在脚本中写#!/bin/bash ifconfig 然后运行脚本,在一条命令中完成。
[root@test7 ansible]# ansible 192.168.60.90 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'
​
[root@test7 ansible]# ansible 192.168.60.80 -m shell -a 'echo "#!/bin/bash" >> /opt/abc.sh && echo "ifconfig" >> /opt/abc.sh && sh /opt/abc.sh'
#安装httpd源
[root@test7 opt]# ansible 192.168.60.80 -m shell -a 'yum -y install httpd'

5、cron模块 定时任务模块 minute/hour/day/month/weekday
#创建定时任务一定要创建名字
[root@test7 ansible]# ansible 192.168.60.80 -m cron -a 'minute=30 hour=8 day=* job="ls /opt" name="test1"'      #job=表示定时任务执行的命令
[root@test8 opt]# crontab -l
#Ansible: None
30 8 * * * ls /opt
#删除定时任务
[root@test7 ansible]# ansible 192.168.60.80 -m cron -a 'name="test1" state=absent'
6、user模块 用户管理模块

name(用户名)必选参数

state=present|absent present 创建 absent删除

system=yes|no 创建用户时,no是普通用户,yes是程序用户

uid 指定用户的uid

group 指定用户组

shell 默认是系统用户可以不加

create_home=yes|no 不是默认的家目录/home。/opt/test1家目录 create_home=yes 创建,no就是不创建

password 用户添加密码

remove=yes|no state=absent删除用户,删除用户时是否删除家目录。

#创建普通用户
[root@test7 ansible]# ansible 192.168.60.80 -m user -a 'name=xy102 system=no'
#创建程序用户
[root@test7 ansible]# ansible 192.168.60.80 -m user -a 'name=xy104 shell=/sbin/nologin system=yes'
#创建普通用户并指定家目录位置和密码
[root@test7 ansible]# ansible 192.168.60.80 -m user -a 'name=xy105 home=/opt/xy105 create_home=yes password=123456'
#删除用户并删除家目录
[root@test7 ansible]# ansible 192.168.60.80 -m user -a 'name=xy103 remove=yes state=absent'
7、copy 复制模块,主机的文件复制到目标主机。
[root@test7 opt]# ansible 192.168.60.80 -m copy -a 'src=/opt/xy102.txt dest=/opt/'

src 表示源文件 dest 目标主机的保存路径

mode 复制文件时,表示权限

owner 文件的所有者 属于主

group 文件的所在组 属于组

content 指定复制内容,就不能用src

#给xy102.txt指定读写执行权限,指定所有者和所在组
[root@test7 opt]# ansible 192.168.60.80 -m copy -a 'src=/opt/xy102.txt dest=/opt/ mode=640 owner=dn group=dn'
#创建应该文件名为houzi.txt,在里面写入黑神话悟空,真好玩!,并指定权限和所有者和所在组
[root@test7 opt]# ansible 192.168.60.80 -m copy -a 'content="黑神话悟空,真好玩!" dest=/opt/houzi.txt mode=777 owner=dn group=dn'
#修改文件名
[root@test7 opt]# ansible 192.168.60.80 -m shell -a 'mv /opt/houzi.txt /opt/sunwukong.txt'
[root@test7 opt]# ansible 192.168.60.80 -a 'mv /opt/houzi.txt /opt/sunwukong.txt'
8、file模块 设置文件属性

mode owner group state=touch|absent touch(创建) absent(删除)

#创建一个文件,权限为777,所有者是dn,所在组是dn
[root@test7 opt]# ansible 192.168.60.80 -m file -a 'path=/opt/abc.txt state=touch mode=777 owner=dn group=dn'
#创建一个软链接文件,链接/opt/abc.txt,
[root@test7 opt]# ansible 192.168.60.80 -m file -a 'path=/opt/abc.txt.link src=/opt/abc.txt state=link'
#删除文件
[root@test7 opt]# ansible 192.168.60.80 -m file -a 'path=/opt/abc.txt.link state=absent'
9、hostname模块 设置远程主机的主机名
[root@test7 opt]# ansible 192.168.60.80 -m hostname -a "name=test8"
10、ping模块 测试与远程主机通不通
[root@test7 opt]# ansible all -m ping
#success就是通
11、yum模块 在目标主机安装软件和卸载软件

yum模块只能安装和卸载软件

[root@test7 opt]# ansible 192.168.60.80 -m yum -a 'name=httpd'
[root@test7 opt]# ansible 192.168.60.80 -m yum -a 'name=httpd state=absent'
12、service模块 用来管理目标主机上的软件的运行状态

name 服务名称

state=started|stopped|restarted

enabled=true #设置开机自启

runlevel=40 #设置运行级别,设置了开机自启就需要声明运行级别

#开启nginx并设置为开机自启,运行级别是60
[root@test7 opt]# ansible 192.168.60.80 -m service -a 'name=nginx enabled=true state=started runlevel=60'
#1、安装nginx 2、开启nginx  开机自启动 3、访问的内容是this  is  nginx!
方法一:
[root@test7 opt]# ansible 192.168.60.80 -m shell -a 'yum -y install nginx && systemctl start nginx && systemctl enable nginx && echo "this is nginx!" > /usr/share/nginx/html/index.html && curl 192.168.60.80'
方法二:
[root@test7 opt]# ansible 192.168.60.90 -m yum -a 'name=httpd'
[root@test7 opt]# ansible 192.168.60.90 -m service -a 'name=nginx enabled=true state=started'
[root@test7 opt]# ansible 192.168.60.90 -m shell -a 'echo "this is nginx!" > /usr/share/nginx/html/index,html && curl 192.168.60.90'
13、防火墙和网络模块
iptables
#拒绝test9    ping    test8
[root@test7 ~]# ansible 192.168.60.80 -m iptables -a 'chain=INPUT protocol=ICMP source=192.168.60.90 jump=REJECT' -b

-b 后台运行

#将test8主机的80端口禁用
[root@test7 ~]# ansible 192.168.60.80 -m iptables -a 'chain=INPUT protocol=tcp destination_port=80 jump=REJECT' -b
#将test8主机的80端口放空
[root@test7 ~]# ansible 192.168.60.80 -m iptables -a 'chain=INPUT protocol=tcp destination_port=80 jump=ACCEPT' -b
#删除防火墙策略
[root@test7 ~]# ansible 192.168.60.80 -m iptables -a 'chain=INPUT protocol=tcp destination_port=80 jump=REJECT state=absent' -b
firewalld
[root@test8 ~]# firewall-cmd --get-services | grep nginx
#放空test8主机防火墙的80端口
[root@test7 ~]# ansible 192.168.60.80 -m firewalld -a "service=nginx zone=public permanent=true state=enabled immediate=true" -b

immedeiate=true 立即生效

#删除test8放空的80端口
[root@test7 ~]# ansible 192.168.60.80 -m firewalld -a "port=80/tcp  zone=public permanent=true state=disabled immediate=true" -
14、配置网卡
[root@test7 ~]# ansible 192.168.60.90 -m ansible.builtin.lineinfile -a "path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp='^IPADDR' line='IPADDR=192.168.60.89'" -b

regexp='^IPADDR' 匹配以IPADDR开头的整行

line='IPADDR=192.168.60.89' 替换整行

#重启test9的网卡
[root@test7 ~]# ansible 192.168.60.90 -m shell -a 'systemctl restart network'

#将89的IP地址加入ansible的hosts配置文件中
[root@test7 ~]# vim /etc/ansible/hosts33 [xy102]34 ## 35 ## db01.intranet.mydomain.net36 ## db02.intranet.mydomain.net37 192.168.60.9038 192.168.60.89
#将IP地址89改为90
[root@test7 ~]# ansible 192.168.60.89 -m ansible.builtin.lineinfile -a "path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp='^IPADDR' line='IPADDR=192.168.60.90'" -b
#重启IP地址为89的网卡配置
[root@test7 ~]# ansible 192.168.60.89 -m shell -a 'systemctl restart network'

15、script模块 运行本地的脚本,把脚本运行的结果输出到目标主机。

脚本的位置是在本机上,运行是目标主机上运行

[root@test7 opt]# vim test1.sh#!/bin/bashecho "Hello world" >/opt/test1.txt
[root@test7 opt]# chmod 777 test1.sh 
[root@test7 opt]# ansible 192.168.60.80 -m script -a '/opt/test1.sh'
[root@test8 opt]# cat test1.txt 
Hello world
16、setup模块 查看目标主机的信息。IP地址、cpu、内核、系统信息
[root@test7 opt]# ansible 192.168.60.80 -m setup

查看目标主机的cpu信息

[root@test7 opt]# ansible 192.168.60.80 -m setup -a 'filter=ansible_*processor*'

查看目标主机的内核版本

[root@test7 opt]# ansible 192.168.60.80 -m setup -a 'filter=ansible_proc_cmdline'

查看目标主机的内存

[root@test7 opt]# ansible 192.168.60.80 -m setup -a 'filter=ansible_mem*'

查看目标主机的系统信息

[root@test7 opt]# ansible 192.168.60.80 -m setup -a 'filter=ansible_system'

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑神话:悟空-配置推荐

显卡推荐&#xff08;按类别整理&#xff09; 1. GTX 10系列、GTX 16系列&#xff1a; 如果希望体验光线追踪&#xff0c;建议根据预算升级到RTX 40系列显卡。对于1080p分辨率&#xff0c;至少需要RTX 4060才能流畅运行。 2. RTX 20系列&#xff1a; RTX 2060、RTX 2070&#…

第二十七节、人物可互动标识

一、多个场景同时存在 方法&#xff1a;将另一个场景拖拽进 当前场景中 这样在一个场景中保存物体&#xff0c;另一个场景切换即可 创建一个场景名为上图&#xff08;这是一个持久化的场景&#xff09; 被激活的场景是粗体字的 二、代码 使用第二个代码获得player的子物体 …

SQL注入(cookie、base64、dnslog外带、搜索型注入)

目录 COOKIE注入 BASE64注入 DNSLOG注入—注入判断 什么是泛解析&#xff1f; UNC路径 网上邻居 LOAD_FILE函数 搜索型注入—注入判断 本文所使用的sql注入靶场为sqli-labs-master&#xff0c;靶场资源文件已上传&#xff0c;如有需要请前往主页或以下链接下载 信安必备…

AVI-Talking——能通过语音生成很自然的 3D 说话面孔

概述 论文地址&#xff1a;https://arxiv.org/pdf/2402.16124v1.pdf 逼真的人脸三维动画在娱乐业中至关重要&#xff0c;包括数字人物动画、电影视觉配音和虚拟化身的创建。以往的研究曾试图建立动态头部姿势与音频节奏之间的关联模型&#xff0c;或使用情感标签或视频剪辑作…

SpringBoot Web请求、响应

一、文章概述 请求方面主要讲&#xff0c;当前端向后端发出请求时&#xff0c;对于不同类型的参数后端都如何接收&#xff1b;对于响应&#xff0c;文章会讲解后端如何向前端响应数据以及如何使返回的数据具有统一的格式。 二、请求 2.1接收简单参数 Controller方法&#xf…

算法的学习笔记—二叉搜索树的后序遍历序列(牛客JZ33)

&#x1f600;前言 在数据结构与算法的学习中&#xff0c;二叉搜索树&#xff08;BST&#xff09;是一个重要的概念&#xff0c;而后序遍历则是树的遍历方式之一。今天&#xff0c;我们将深入探讨一个经典问题&#xff1a;如何判断一个给定的整数数组是否是某个二叉搜索树的后序…

【Prettier】代码格式化工具Prettier的使用和配置介绍

前言 前段时间&#xff0c;因为项目的prettier的配置和eslint格式检查有些冲突&#xff0c;在其prettier官网和百度了一些配置相关的资料&#xff0c;在此做一些总结&#xff0c;以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具&#xff0c;支持ja…

甘肃旅游服务平台代码--论文pf

TOC springboot422甘肃旅游服务平台代码--论文pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0…

Day45 | 99.岛屿数量 深搜 广搜 100.岛屿的最大面积

语言 Java 99.岛屿数量 深搜 广搜 99. 岛屿数量 题目 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可…

【启明智显技术分享】实时操作系统RTOS核心机制与应用

在当今这个对实时性要求日益严苛的嵌入式系统时代&#xff0c;RTOS作为核心软件架构&#xff0c;正扮演着不可或缺的角色。而当我们深入探讨RTOS的广泛应用与优势时&#xff0c;不得不提到启明智显Model系列芯片以其卓越的性能、丰富的外设接口以及对RTOS系统的全面支持&#x…

Qt实现圆型控件的三种方法之子类化控件并重写paintEvent

前言 最近在研究绘制各种形状的控件&#xff0c;这里专门挑出圆形的控件进行记录&#xff0c;其它形状的也大差不差&#xff0c;会了圆形的之后其它的也类似。 正文 这里我挑出Label来进行举例。 子类化 QLabel 并重写 paintEvent 如果需要更复杂的自定义绘制&#xff0c;…

【CSS】使用 CSS 自定义属性(变量)-- var()

自定义属性&#xff08;有时候也被称作CSS 变量或者级联变量&#xff09;是由 CSS 作者定义的&#xff0c;它包含的值可以在整个文档中重复使用。由自定义属性标记设定值&#xff08;比如&#xff1a; --main-color: black;&#xff09;&#xff0c;由 var() 函数来获取值&…

算法全面剖析

算法 查找算法&#xff1a; 顺序查找&#xff1a; 基本思想&#xff1a; 顺序查找也称为线形查找&#xff0c;属于无序查找算法。从数据结构线形表的一端开始&#xff0c;顺序扫描&#xff0c;依次将扫描到的结点关键字与给定值k相比较&#xff0c;若相等则表示查找成功&am…

Nginx--监控

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Nginx的基础监控 进程监控 端口监控 注意&#xff1a; 这两个是必须要加在zabbix监控&#xff0c;加触发器有问题及时告警。 nginx 提供了ngx…

编译linux内核时,让版本号不跟着git变化

文章目录 编译linux内核时&#xff0c;让版本号不跟着git变化现象方法一方法二 编译linux内核时&#xff0c;让版本号不跟着git变化 现象 内核每次重新编译时&#xff0c;uname -r都会跟着变。 4.1.15-00005-g482731e4-dirty 导致报错&#xff0c;modprobe: can’t change …

前端算法 | LeetCode第 70 题爬楼梯问题

目录 流程分析 归纳法分析 为什么是斐波那契数列&#xff1f; 推导过程&#xff1a; 解法1&#xff1a;循环累加计算 解法2&#xff1a;递归计算 解法3&#xff1a;利用数组特性 解法4&#xff1a;利用 JavaScript ES6 新特性 拓展知识&#xff1a;每次可以走 1 步、2…

ClickHouse实时探索与实践 京东云

1 前言 京喜达技术部在社区团购场景下采用JDQFlinkElasticsearch架构来打造实时数据报表。随着业务的发展 Elasticsearch开始暴露出一些弊端&#xff0c;不适合大批量的数据查询&#xff0c;高频次深度分页导出导致ES宕机、不能精确去重统计&#xff0c;多个字段聚合计算时性能…

位运算专题

分享丨【题单】位运算&#xff08;基础/性质/拆位/试填/恒等式/思维&#xff09; - 力扣&#xff08;LeetCode&#xff09; Leetcode 3133. 数组最后一个元素的最小值 我的答案与思路&#xff1a; class Solution { public: // 4 --> (100)2 7 --> (0111)2 // 5 --&g…

怎么让FLV转MP4?建议试试这样做

怎么让FLV转MP4&#xff1f;在数字视频处理的日常中&#xff0c;我们经常会遇到不同格式的视频文件需要相互转换的情况。FLV&#xff08;Flash Video&#xff09;作为一种早期的网络视频格式&#xff0c;虽然在互联网上仍有一定应用&#xff0c;但对比来说&#xff0c;MP4格式更…

vue打包设置 自定义的NODE_ENV

默认NODE_ENV 自定义process.env.NODE_ENV的值_process.node.env的值-CSDN博客 ‌NODE_ENV开发环境下&#xff1a;NODE_ENVdevelopment(默认) 生产环境下&#xff1a;NODE_ENVproduction(默认) NODE_ENV 除了默认的 development 和 production 以外&#xff0c;确实可以自定义…