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.mzph.cn/bicheng/52477.shtml

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

相关文章

EmguCV学习笔记 VB.Net 6.4 霍夫变换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示&#xff0c;有2个矢量图斑&#xff0c;一个是耕地地块&#xff0c;另一个是范围图斑&#xff0c;如果我们需要把此工程的所有数据以及引用地图一起分享给别人&#xff0c;就可以使用【打包工程】这个工具。 如上所示&#xff0c;在【地理处理】下输入【打包工程】&am…

【C语言】常见文件操作

文件的常见操作 #include<stdio.h>// 由于devc代码编码为ANCI&#xff0c;故读取的文件中若有中文&#xff0c;请设置文件编码为ANCI&#xff0c;否则会乱码 // 读文件 void test1() {char ch;FILE *fp; // 创建文件指针fp fopen("./file.txt", "r"…

数据结构系列-归并排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 归并排序 递归版本 首先&#xff0c;我们来看一下归并的示意图&#xff1a; 这是归并排序当中分解的过程。 然后便是两个两个进行排序&#xff0c;组合的过程。 归并完美的诠释…

系统编程-管道

管道 目录 管道 1、管道的特点 2、无名管道的使用步骤 &#xff08;1&#xff09;在进程中使用 pipe 函数来获取管道的文件描述符 &#xff08;2&#xff09;使用 fork 函数来创建子进程 &#xff08;3&#xff09;通过获取到的文件描述符来进行数据的传输 &#xff08…

[论文阅读] mobile aloha实验部分

DP:[1] CHI C, FENG S, DU Y, et al. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion[J]. 2023. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion精读笔记&#xff08;一&#xff09;-CSDN博客 哥伦比亚大学突破性的方法- Diffusio…

【SpringBoot】11 多数据源(MyBatis:dynamic-datasource)

介绍 多数据源&#xff1a;指的是一个单一应用程序中涉及了两个及以上的数据库&#xff0c;这种配置允许应用程序根据业务需求灵活地管理和操作不同的数据库。 需求 一个应用服务中&#xff0c;连接多个数据库&#xff0c;有本地的也有远程的&#xff0c;有MysQL、Oracle、P…

PDPS软件 那智机器人 (丰田版)离线程序导出处理

在PDPS仿真软件中导出的那智机器人离线程序&#xff0c;一般是无法直接给TFD控制装置-那智机器人&#xff08;丰田式样版&#xff09;导入及识别使用。因此要对导出的程序进行转换编译处理&#xff0c;才能给TFD那智机器人&#xff08;丰田式样版&#xff09;导入离线程序。以下…

react antd TreeSelect实现自定义标签

<ProFormTreeSelectlabel"接收对象"name"receiverObjects"colProps{{ span: 16 }}labelCol{{span: 6,}}wrapperCol{{span: 18,}}rules{[{ required: true }]}fieldProps{{showSearch: true,multiple: true,// autoClearSearchValue: true,filterTreeNod…

NASA:北极辐射-冰桥海冰实验(ARISE)2014年原地云数据产品

ARISE_Cloud_AircraftInSitu_C130_Data 简介 ARISE_Cloud_AircraftInSitu_C130_Data_1是北极辐射-冰桥海冰实验&#xff08;ARISE&#xff09;2014年原地云数据产品。该产品是位于华盛顿的美国宇航局科学任务局地球科学部辐射科学、冰冻层科学和机载科学计划共同努力的成果。…

基于单片机的一氧化碳报警系统的设计与实现

摘 要&#xff1a; 一氧化碳对人体有害&#xff0c;尤其超标时会影响人们的健康 。 因此文章设计了一款基于单片机的一氧化氮报警器设计。 论文通过传感器检测一氧化碳浓度&#xff0c;经过 AD 转换&#xff0c;再把检测信号传递给单片机&#xff0c;经过分析处理&#xff0c…

论文辅助笔记:Large Language Models are Zero-Shot Next LocationPredictors

论文理论部分&#xff1a;论文笔记&#xff1a;lunLarge Language Models are Zero-Shot Next LocationPredictors-CSDN博客 2 Data 2.1 Dataset类 2.2 下载文件 2.3 get_dataset 2.4 get_trajectories trajectory_split暂时略去 # save the test dictionary and the true l…

redis核心数据结构源码分析

dictEntry和redisObject 在 Redis 的实现中&#xff0c;当一个键值对被创建并存储时&#xff0c;键通常是一个字符串&#xff0c;而值则是一个 redisObject。因此&#xff0c;在 dictEntry 结构中&#xff0c;key 成员指向的是一个字符串&#xff0c;而 v.val 成员则指向一个 …

45.5【C语言】typedef

目录&#xff1a; *全称 *格式 一般指针 数组指针 函数指针 *细节 *全称 type define 类型&#xff08;重新&#xff09;定义&#xff08;或命名&#xff09;&#xff0c;可简化输入 *格式 1.非指针类型: typedef 类型 简化名称 typedef signed long long k; signed long …

搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类

0x00 前言 由于此前从深交所下载的股票信息中只有行业门类信息&#xff0c;没有行业大类信息&#xff0c;导致后续解析三大报表和量化选股的时候无法进行&#xff1a; 可以看到深交所的股票是没有大类信息的。 再看看上交所的保险股&#xff1a; 因此需要将深交所股票的所属…

WIFI驱动开发

Linux 4.9 内核驱动移植 Linux 4.9 BSP 内核驱动 下载驱动后获得驱动的 tar.gz 压缩包 解压后找到如下驱动与文件夹 进入内核&#xff0c;找到 linux-4.9/drivers/net/wireless 文件夹中&#xff0c;新建文件夹aic8800 并且把上面的驱动与文件夹放入刚刚创建好的 aic8800 中。…

【MySQL】 黑马 MySQL进阶 笔记

文章目录 存储引擎MySQL的体系结构存储引擎概念存储引擎特点InnoDBMyISAMMemory 存储引擎选择 索引概述结构B Tree(多路平衡查找树)B TreeHash为什么InnoDB存储引擎选择使用Btree索引结构? 分类思考题 语法SQL性能分析&#xff08;索引相关&#xff09;SQL执行频率慢查询日志p…

SSRF和CSRF实战复现

文章目录 SSRFWeb-Hacking-Lab-master1、Centos未授权访问2、Ubuntu未授权访问3、Ubuntu传入公钥访问4、ssrf_redis_lab_pickle_redis_lab CSRF:windphp SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 f…

Unity 波函数坍缩算法随机地图生成

Unity 波函数坍缩算法随机地图生成 波函数波函数基本概念位置空间波函数动量空间波函数两种波函数之间的关系波函数的本征值和本征态波函数坍缩 熵是什么熵作为状态函数时间之箭 实现原理举个例子&#xff1a;2D迷宫地图生成 Unity 如何实现前期准备单元格代码瓦片地图代码波函…

通过建模走出人工智能寒冬

很多人对 GenAI 是否会产生商业影响持怀疑态度&#xff0c;但我认为他们不仅错了&#xff0c;而且犯了 2001 年人们在互联网上犯下的错误。他们认为硅谷的炒作是无稽之谈&#xff0c;因此其背后的想法也是无稽之谈。 这是很危险的&#xff0c;我认为&#xff0c;这比大多数零售…