Ansible自动化运维以及模块使用

ansible的作用

  1. 远程操作主机功能

  2. 自动化运维(playbook剧本基于yaml格式书写)

ansible是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起

ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每次都切换主机操作。只要有一台ansible主机,就可以对所有节点操作

ansible不需要agent,客户端。只需要一台主机配置了ansible即可。

ansible基于模块进行工作,只是提供了一种运行的架构。执行操作和辩证的是ansible的模块来实现的。例如:copy模块、service模块

ansible默认是通过ssh的密钥队实现通信(可以自定义,但是一般不更改)

Ansible的特点:所有模块都是幂等性

所谓幂等性指的是多次操作或者多次执行对系统资源的影响是一致的。

例如:

systemctl stop firewalld之后再执行一次这个命令。只要发现要停止的目标服务已经停止了,后续同样的停止操作,不会改变任何结果。

但是systemctl restart firewalld这样的命令每一次操作都会先停止再启动。所以它不属于幂等性。

http的get这样的命令也属于幂等性

post不属于幂等性。即便多次执行相同的post可以创建多个相同的资源。虽然数据相同,但是也创建了不同的资源。

ansible的幂等性决定了可以重复执行某个任务,绝大多数情况下不会对结果产生任何影响(不绝对)

Ansible的四大组件

1、 lnventory主机清单:又叫主机组。定义ansible可以远程操作的服务器。可以理解为声明哪些机器是ansible可以操作的。

2、 模块:常用的模块有13个。通过这些模块可以实现远程的配置和操作。

3、 Plugins插件

4、 Playbook剧本:可以理解为shell脚本。但是格式是yaml格式。

Ansible的优缺点

优点:

1、 部署很简单,主要在控制主机部署即可。被控制的主机需要有ssh和python2.5以上版本。基本上Linux都是自带的。

2、 ansible只能控制Linux系统,无法控制Windows系统。是专门为Linux系统打造的。

3、基于模块工作。可以使用任意语言开发模块(二次开发,底层架构)

ansible的命令格式

语法:

ansible 组名/ip -m 模块名称 -a '参数列表(执行的命令)'

ansible的模块

1、 command模块

在远程主机上执行Linux的命令,不支持管道符,重定向输出。只能在目标主机上执行一般的Linux命令

ansible 20.0.0.20 -m command -a 'date'
#测试是否可以运行
ansible webservers -m command -a 'ls /opt'
#webservers:针对组。这个组内所有的主机都会执行这个命令
ansible all -m command -a 'ls /opt'
#all:表示所有组内所有主机都会执行这个命令

如果不加-m也就是不声明使用的模块。那么默认就是使用command模块只能执行一般的命令。不支持管道和重定向

ansible 20.0.0.20 -a 'date'
#只能执行一般的命令。不支持管道和重定向

2、 shell模块

在远程主机执行命令,相当于在执行shell命令,支持管道符和重定向

ansible 20.0.0.20 -m shell -a 'useradd test'
#远程创建用户
ansible 20.0.0.20 -m command -a 'cat /etc/password'
ansible 20.0.0.20 -m shell -a 'echo 123456 | passwd --stdin test'
#给test用户创建密码
ansible 20.0.0.20 -m shell -a "echo $(ifconfig ens33 | awk 'NR==2{print $2}')"

ansible无法执行交互的命令

在Ansible当中多个引号之间要做隔离

ansible 20.0.0.30 -m shell -a 'touch /opt/123 && echo 123 > /opt/123 && ls /opt/ && cat /opt/123'

多个命令可以使用&&连接在一起只限于shell模块

这里&&表示逻辑且:前一个命令执行成功才会执行后一个命令

ansible 20.0.0.30 -m shell -a 'touch 456 ; echo zyg > /opt/456 ; cat /opt/456'

这里;表示逻辑或:前一个命令执行成功与否,后面的命令都会执行。

3、 cron模块

远程给主机设置定时任务

两种状态:

present:表示添加(默认就是添加,可以省略)

absent:表示移除。absent在整个ansible的语法中都表示移除

分:minute

时:hour

日:day

月:mounth

周:weekday

job:任务执行的命令

name:任务计划的名称

ansible 20.0.0.20 -m cron -a 'minute="*/5" job="ls /opt/" name="test1"'
ansible 20.0.0.20 -a 'crontab -l'

远程删除定时任务

ansible 20.0.0.20 -a 'crontab -l'
ansible 20.0.0.20 -m cron -a 'name="test1" state=absent'
#state=absent:声明状态为删除
ansible 20.0.0.20 -a 'crontab -l'
ansible 20.0.0.20 -m cron -a 'name="None" state=absent'
#如果名字是None直接删除None
#如果有多个None会都被删除

多个计划任务,如果不给名字都是None,一旦删除None,会全部删除。所以不删除(最好是指定一个不重复的名字)

4、 user模块

用户管理模块

常见参数:

name:指定用户名,必须要有

两种模式state:present absent

创建用户可以不加present,但是删除一定要加absent

system=yes | no:标记用户是否是一个程序用户。如果是yes表示是程序用户

还需要使用shell=yes声明程序用户使用的shell

uid:用户的唯一标识

group:用户的所在组

create_home=yes | no:替换用户的家目录。yes表示替换。如果不需要替换用户家目录可以不写

password:创建用户的密码

comment:用户的注释信息。可有可无

remove=yes | no:当删除用户时,加上rmove=yes表示删除用户的家目录。可以理解为userdel -r 如果不需要删除家目录,可以不写。

ansible 20.0.0.20 -m user -a 'name=zygg system=yes'
ansible 20.0.0.20 -a "cat /etc/passwd"

在创建用户时虽然声明了是一个程序用户,但是默认的登录shell如果没有额外声明,还是默认的/bin/bash。但是uid会按照程序用户指定。

ansible 20.0.0.20 -m user -a 'name=zygg1 shell=/sbin/nologin'
#声明用户的shell

使用ansible的user模块创建用户时,如果创建普通用户,可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash。如果创建的是程序用户,一定要声明system=yes同时声明shell的类型shell=/sbin/nologin。

也可以指定uid的方式给用户分配一个uid

ansible 20.0.0.20 -m user 'name=zygg2 uid=1010 password="123456" home=/opt/test1'
ansible 20.0.0.20 -a 'cat /etc/passwd'
ansible 20.0.0.20 -m user -a 'name=zygg2 home=/home/zygg2 create_home=yes'
#home=/home/zygg2:声明跟新后家目录的位置
#create_home=yes:表示需要更改

删除指定用户

ansible 20.0.0.20 -m user -a 'name=zygg2 remove=yes state=absent'
#声明删除用户且一并删除家目录可以理解为userdel -r

5、 group模块

用户组管理模块

name:指定名称必须要有

gid:设置组id

ansible 20.0.0.30 -m group -a 'name=zyg gid=306 system=yes'
#创建一个组而不是用户
ansible 20.0.0.30 -a 'cat /etc/group'

添加用户时候指定组

ansible 20.0.0.30 -m user -a 'name=zygg uid=1011 group=zyg'
#创建用户并指定组
ansible 20.0.0.30 -a 'cat /etc/passwd'

5、 ping模块

检测主机的连通性

ping

6、 ping模块

远程测试主机的连通性

ping

ansible 20.0.0.20 -m ping

只有在ansible主机内的/etc/ansible/hosts声明过的主机,ansible的服务端才可以远程操作

7、 hostname模块

设定管理远程主机的主机名

ansible 20.0.0.30 -m hostname -a 'name=test3'

8、 copy模块

用于复制指定的主机文件到远程主机的命令

常用的参数:

dest:指出要复制的文件在哪。必须使用绝对路径。如果源目标是目录那么指目标也得是目录。如果目标文件存在会覆盖原有内容

src:复制文件的源。最好使用绝对路径。源目标是目录,那么指目标也得是目录。

owner:指出文件的所有者

group:指定文件的所在组

content:从主机复制指定的内容到目标主机。使用了content就不能使用src了。作用相当于替代了src

mode:指定复制之后的文件权限

ansible 20.0.0.20 -m copy -a 'src=/opt/123 dest=/opt/123.txt owner=zyg mode=655'
#src=/opt/123:原文件
#dest=/opt/123.txt:目标文件
#owner=zyg:所有者
#mode=655:文件权限

复制目录时,还是复制完整的目录,即目录当中不能为空。目录内最终要有一个文件

ansible 20.0.0.20 -m copy -a 'content="hello world" dest=/opt/hello.txt'
#指定内容复制,使用content。可以理解为echo命令
#使用了content就不需要使用src了
​
ansible 20.0.0.30 -a 'mv /opt/hello.txt /opt/zyg.txt'
#mv使用command模块即可实现

9、 file模块

管理文件属性,属于文件模块,跟目录无关

owner:所有者

group:所在组

mode:权限

state=link:创建连接文件

state=touch:创建文件

state=absent:删除文件

path:声明文件路径

ansible 20.0.0.30 -m file -a 'path=/opt/zyg.txt state=touch'
#path=/opt/zyg.txt:声明客户机的路径和文件名称
#state=touch:类型为创建文件
ansible 20.0.0.30 -m file -a 'owner=zyg group=zyg1 mode=777 path=/opt/zyg.txt'

设置连接文件

ansible 20.0.0.30 -m file -a 'path=/opt/ky32.link src=/opt/ky32.txt state=link'

远程删除文件

ansible 20.0.0.30 -m file -a 'path=/opt/fstab.link state=absent'

10、yum模块

在远程主机上安装、卸载软件包

ansible 20.0.0.20 -m yum -a 'name=httpd'

在目标主机上的操作都是后台运行,不影响其他用户使用

远程卸载软件包

ansible 20.0.0.20 -m yum -a 'name=tree state=absent'

远程开启服务

11、 service/systemd模块

name:设定管理服务的名称

state=started | stopped | restarted:启动、停止和重启。三种管理动作

enabled=true:是否设置开机自启。如果不加默认就是不自动启动

runlevel:配合enabled的。如果设置开机自启,可以设置运行级别。在命令行设置,但是不生效,一般不在命令行操作

ansible 20.0.0.20 -m service -a 'enabled=true name=httpd state=restarted'

安装nginx服务,设置为开机自启,设置访问页面this is nignx

ansible 20.0.0.20 -m shell -a 'echo "this is nginx" > /usr/local/nginx/html/index.html'
#设置nginx服务的页面
ansible 20.0.0.20 -m service -a 'enabled=true name=nginx state=restarted'
#启动nginx服务并设置为开机自启
ansible 20.0.0.20 -a 'curl 20.0.0.20'
#终端访问测试一下

12、 script模块

运行本地脚本,然后把结果输出到i目标主机

vim test1.sh
echo "hello world" > /opt/test2.txt
chmod 777 test1.sh
ansible all -m script -a 'test1.sh'
ansible all -a 'cat test2.txt'

13、 setup模块

setup查看目标主机的环境系统(facts),目标节点的系统信息。

*:表示所有

filter:用于过滤。查看IP地址

ansible 20.0.0.20 -m setup
ansible all -m setup -a 'filter=*ipv4'
ansible all -m setup -a 'filter=model'
ansible all -m setup -a 'filter=ansible_mem*'
#过滤查找包含内存的信息
ansible all -m setup -a 'filter=ansible_proc*'
#过滤查找包含内核的信息
ansible all -m setup -a 'filter=*os*'
#过滤查找os信息底层信息
ansible all -m setup -a 'filter=*system*'
#过滤查找系统信息
ansible all -m setup -a 'filter=*dev*'
#过滤查找查看硬盘

管理主机清单

快速声明多个主机

vim /etc/ansible/hosts
20.0.0.6[1:3]
#声明主机范围。表示声明20.0.0.61-63主机

取消密钥队免密登录

ansible_host:声明连接时的IP地址

ansible_port:声明对方的连接端口。默认是ssh的默认端口

ansible_user:指定连接时使用对方主机的用户名。不指定表示主机执行ansible的用户即为使用目标主机的用户名

ansible_password:指定连接ssh时的密码。这里是目标主机的用户密码

ansible_become:提升用户权限。也可以改变用户的身份

例如:ansible_become root。需要声明用户的密码

ansible_become-password:指定切换用户的密码。基于免密钥登录实现。

vim /etc/ansible/hosts
#声明主机清单管理组当中的变量名
20.0.0.40 ansible_port=22 ansible_user=root ansible_password=123
vim /etc/ansible/ansible.cfg
---71行取消注释---
host_key_checking = False
#表示取消ssh的密钥队验证
ansible 20.0.0.40 -m ping
​
声明组变量
[webservers:vars]
ansible_user=root
#所有主机用户都是root
ansible_password=123
#所有主机密码都是123
ansible_port=22
#所有主机端口都是22
​
声明所有的主机都是用相同的用户名密码和端口
[all:vars1]
ansible_user=root
#所有主机用户都是root
ansible_password=123
#所有主机密码都是123
ansible_port=22
#所有主机端口都是22

实现组之间的嵌套

声明一个组可以放入多个组

vim /etc/ansible/hosts
[webs:children]
#:children:变量名称可以自定义,但是不能重复
dbservers
webservers
#表示这两个组都在wes这个组里面
ansible webs -m ping

Ansible部署

实验准备

管理端:20.0.0.10  ansible
被管理端1:20.0.0.20
被管理端2:20.0.0.30
被管理端(备用):20.0.0.40
yum -y install epel-release
#安装ansible必须安装epel源
yum -y install ansible
#安装ansible主程序
cd /etc/ansible
ansible.cfg
#ansible的配置文件。一般无需修改
hosts
#主机组。声明可以被控制的主机
roles
#公共角色目录

vim /etc/ansible/hosts
配置主机有两种方式:
1.直接声明主机的IP地址
2.声明主机名。需要提前在/etc/hosts/里做映射
cd /opt/
ssh-keygen -t rsa
#创建密钥队
ansible 20.0.0.20 -m command -a 'date'
ansible 20.0.0.30 -m command -a 'date'
#先运行ansible的命令
sshpass -p '123' ssh-copy-id root@20.0.0.20
sshpass -p '123' ssh-copy-id root@20.0.0.30
#再将密钥队传给20和30
ansible 20.0.0.20 -m command -a 'date'
#测试是否可以运行
tail -f /var/log/messages
#可以查看记录
ansible webservers -m command -a 'ls /opt'
#webservers:针对组。这个组内所有的主机都会执行这个命令
ansible all -m command -a 'ls /opt'
#all:表示所有组内所有主机都会执行这个命令

配置主机有两种方式:

1、 直接声明主机的IP地址

2、 声明主机名。需要提前在/etc/hosts/里做映射

 

需要先使用ansible 20.0.0.20 -m command -a 'date'命令建立连接再将密钥队传给备用主机

会执行但是不会显示只能在本地日志查看到

ansible的常用参数

chdir:在远程主机上运行命令,提前进入目录

ansible all -m command -a 'chdir=/home ls'
#表示所有主机先进入home目录在执行ls这个命令

creates:判断指定文件是否存在,如果存在,不执行后续操作

ansible all -m command -a 'creates=/opt/123 ls /opt/'

removes:判断指定文件是否存在,如果存在,执行后续操作

ansible all -m command -a 'removes=/opt/123 ls /opt/'

总结

1、 command模块:只能执行基础命令操作,不支持管道符和重定向。只有command模块可以不加-m

2、 shell模块:支持管道符和重定向,多个命令可以写在一起

&&:逻辑且。前一个命令执行成功才能只能下一个命令

;:逻辑或。前一个命令执行失败,也可以执行下一个命令

3、 cron模块:远程给主机设置定时任务

4、user模块:添加用户

5、 group模块:添加组

6、 ping模块

7、 hostname模块

8、 copy模块

9、 file模块

10、 yum模块

11、 service/systemd模块

12、 script模块

13、 setup模块

管理主机清单

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ITIL® 4 Foundation​,12月23日即将开课~想了解点击查看

ITIL 4 Foundation即将开课~ 想报名的必须提前预约啦 👇👇👇 培训地点: 远程直播:线上平台学习 开课时间: 周末班:12月23日、24日; 什么是ITIL? 信息技术基础架构…

【史上最易懂】变分推断:从【求分布】的推断问题,变成【缩小距离】的优化问题,用简单的分布 q 去近似复杂的分布 p

变分推断:从求分布的推断问题,变成缩小距离的优化问题 频率学派与贝叶斯学派变分推断完整推导 频率学派与贝叶斯学派 学过概率论,应该了解过,概率分为 2 个学派: 频率学派:数据是客观的(看到啥…

【ArcGIS微课1000例】0081:ArcGIS指北针乱码解决方案

问题描述: ArcGIS软件在作图模式下插入指北针,出现指北针乱码,如下图所示: 问题解决 下载并安装字体(配套实验数据包0081.rar中获取)即可解决该问题。 正常的指北针选择器: 专栏介绍&#xff…

专攻代码型闪存芯片赛道,芯天下授权世强硬创代理全线产品

近年来受下游应用需求增长的驱动,代码型闪存芯片市场空间持续扩张,在后疫情之下NOR Flash及SLC NAND Flash市场规模整体仍保持逐步增长的趋势。 为了迎合市场需求,世强先进(深圳)科技股份有限公司(下称“世…

青少年CTF-qsnctf-Web-PingMe02

题目环境: 题目难度:★ 题目描述:诶?又是一道Ping题目诶! 给了一个ip参数 传参: ?ip1.1.1.1 有回显结果 使用英文分号";"进行连接后续命令 列出此路径下的目录和文件 ?ip1.1.1.1;ls 列出根目录…

drf知识--01

前后端开发模式 在开发Web应用中,有两种应用模式: 前后端混合开发: bbs 项目--renderajax 1、全栈开发--前端html后端都是一个人写 2、前端人员:写空页面,没有模板语法,只要html,c…

在区块链中看CHAT的独特见解

问CHAT:谈谈对区块链以及区块链金融的理解 CHAT回复:区块链是一种去中心化的分布式数据库技术,这种技术通过加密算法,使数据在网络中传输和存储的过程变得更加安全可靠。区块链的出现引领了存储、交易等形式的革命,改变…

航空港务数据大屏为航空港的可持续发展提供有力支撑!

随着经济的发展,不断加建与扩建民用机场,空港行业规模不断扩大。在不断引进和消化发达国家先进技术的同时,中国深入开展了对新技术和新材料的研究,极大地丰富和发展了中国的机场建设技术。且各项机场建设计划均已落实推进&#xf…

hadoop格式化报错

在var/bigdata/hadoop/ha/dfs/jn/下没有mycluster目录增加后就格式化成功了

Flask ImportError: DLL load failed: 找不到指定的模块。

一、anaconda环境 将anaconda3安装路径下DDL目录中的 libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll 拷贝到 虚拟环境目录下的DLL中 完美解决 成功了给个赞吧!

【IDEA】Intellij IDEA相关配置

IDEA 全称 IntelliJ IDEA,是java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超…

真VS假(数字化前提)

元宇宙最近消停了很多,起始这个词刚出来的时候,很多人搞不清楚,元宇宙就是看待真假一个典范。如果对真假有个清晰的认知,那么对于看待很多事情,会给您带来不一样的视角,不仅仅是对企业数字化,可…

Spring MVC框架支持RESTful,设计URL时可以使用{自定义名称}的占位符@Get(“/{id:[0-9]+}/delete“)

背景:在开发实践中,如果没有明确的规定URL,可以参考: 传统接口 获取数据列表,固定接口路径:/数据类型的复数 例如:/albums/select RESTful接口 - 根据ID获取某条数据:/数据类型的复数/{id} - 例…

3D小球跑酷

目录 一、前言 二、开发环境 三、场景搭建 1. 创建项目 2. 创建场景内物体 2.1 创建跑道 2.2 创建玩家 2.3 创建障碍物 2.4 改变跑道和障碍物的颜色 2.4.1 创建材质 2.4.2 给跑道和障碍物更换材质 四、功能脚本实现 1. 创建玩家脚本 2. 相机跟随 3. 胜负的判定 3…

DeepLabV3+实现sar影像海面溢油区识别

今天我们分享DeepLabV3的sai影像水体提取。 数据集 本次使用的数据集是Deep-SAR Oil Spill (SOS) dataset。该数据集由中国地质大学的朱祺琪团队制作并共享。该数据集包含墨西哥湾溢油区域和波斯湾溢油区域,分别获取于ALOS 和Sentinel-1A卫星。由ECHO研究组搜集制作…

phpmyadmin4.8.1远程文件包含漏洞 [GWCTF 2019]我有一个数据库1

打开题目 我们用dirsearch扫描一下后台看看 扫描结果如下 我们访问一下robots.txt看看,提示有phpinfo.php 那我们访问一下phpinfo.php 发现没有任何信息后我们转去看看phpmyadmin看看 成功访问到页面 在这里我们看到phpmyadmin的版本号是4.8.1 我们百度搜索一下看…

ABAP与HANA集成 2:ABAP调用HANA存储过程或SQL语句

作者 idan lian 如需转载备注出处 需求 虽然是做BW模块,但是最近项目上种种,都需要给ABAP人员或者前台用户提供能供他们使用的表,就稍微研究了下ABAP和HANA的集成问题,因为我们BW更擅长的还是HANA,而且HANA的运行效…

使用JS来监控前端页面的性能!

说起性能测试, 我们很多时候都在说后端, 前端的性能测试, 我们关注较少. 那我们今天就来讨论一下如何来监控前端的性能.window.performance 是W3C性能小组引入的新的API,目前IE9以上的浏览器都支持。一个performance对象的完整结构如下图所示:memory字段…

【Spark-ML源码解析】Word2Vec

前言 在阅读源码之前,需要了解Spark机器学习Pipline的概念。 相关阅读:SparkMLlib之Pipeline介绍及其应用 这里比较核心的两个概念是:Transformer和Estimator。 Transformer包括特征转换和学习后的模型两种情况,用来将一个DataFr…

FastAdmin 的 icon (图标)文档

FastAdmin 的 icon (图标)文档 FastAdmin的icon使用的是font-awesome,凡是font-awesome的图标均可使用。 点击打开font-awesome的网址 js中的icon填写