Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

目录

一、ansible概述

1、简介

2、Ansible主要功能:

3、Ansible的另一个特点:所有模块都是幂等性

4、Ansible的优点:

5、Ansible的四大组件:

二、ansible环境部署:

1、环境:

2、安装ansible:

3、Ansible的配置文件:

4、 配置远程主机清单

三、ansible的模块(重要)

1、ansible的命令格式:

2、模块1:command模块

3、模块二:shell模块

4、模块3:cron模块

5、模块4:USER模块

6、模块5:group模块(了解)

7、模块6:ping模块

8、模块7:hostname模块

9、模块8:COPY模块

10、模块9:file模块

11、模块10:yum模块

12、模块11:service/systemd模块

13、模块12:script模块

14、模块13:setup模块

四、管理主机清单

1、主机变量

2、组变量

3、组嵌套


一、ansible概述

1、简介


Ansible是自动化运维工具,能实现跨主机对应用编排管理部署。

Ansible能批量配置、部署、管理上千台主机,是应用级别的跨主机编排工具。

比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。
是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起

2、Ansible主要功能:

远程操控主机功能

自动化运维(playbook剧本yaml格式)

Ansible能批量的配置、部署、管理上千台主机。类似于xshell的一键输入的工具,不需要每次都切换主机进程操作,只要有一台Ansible的固定主机,就可以实现所有节点的操作

不需要agent(客户端)的概念,只需要一台主机上配置了Ansible即可

Ansible是基于模块来进行工作的,只是提供了一种运行的架构,真正执行操作和变更的是Ansible的模块来实现的。

Ansible默认是通过ssh的密钥对实现通信。(可以改)

3、Ansible的另一个特点:所有模块都是幂等性

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

systemctl stop firewalld 是幂等性

systemctl restart firewalld不是幂等性

http的get是幂等性

http的post不是幂等性

Ansible的幂等性,决定了你可以放心大胆的使用,重复执行摸个任务不会对结果产生任何影响(绝大多数情况)

4、Ansible的优点:

部署较为简单,只要在控制主机部署即可。被控制主机需要有ssh和python2.5以上版本。基本上Linux虚拟机都能满足这两个

Ansible只能控制Linux系统,Windows不行

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

5、Ansible的四大组件:

  1. inventory主机清单(主机组):定义Ansible可以远程操作的服务器
  2. 模块:常用的有13个模块。通过模块可以实现远程的配置和操作
  3. plugins插件
  4. playbook:基本(shell脚本)yaml格式

二、ansible环境部署:

1、环境:

        管理端:20.0.0.21 Ansible

        被管理端:20.0.0.22、20.0.0.23

2、安装ansible:

基于epel源安装
先安装 epel 源
yum install -y epel-release

yum安装ansible
yum install -y ansible

3、Ansible的配置文件:

/etc/ansible/

ansible.cfg:ansible的主配置文件,一般无需修改

hosts:主机组,声明可以被控制的主机

roles:公共角色目录

4、 配置远程主机清单

修改hosts文件:

vim hosts

配置主机有两种方式:1、直接声明主机的IP地址 2、主机名(要在/etc/hosts中做映射)

主机上生成密钥对并且传给被控制主机:

ssh-keygen -t rsa

配置密钥对验证

ssh-keygen -t rsa #一路回车,使用免密登录

sshpass -p '123' ssh-copy-id root@20.0.0.22

sshpass -p '123' ssh-copy-id root@20.0.0.23

若发送密钥对不成功,先到目标主机上执行一个命令,然后再传

ansible 20.0.0.23 -m command -a 'date'

ansible 20.0.0.22 -m command -a 'date'

三、ansible的模块(重要)

1、ansible的命令格式:

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

ansible 20.0.0.23 -m shell -a 'touch /opt/123 && echo 123 > /opt/123 && cat /opt/123'
&& 逻辑且,前一个命令成功才会执行下一个命令

ansible 20.0.0.23 -m shell -a 'touch /opt/456 ; ehco 456 > /opt/456 ; cat /opt/456'
;分号表示逻辑或,前面不管成功与否,后面的命令都会执行

ansible不适用交互式的命令

2、模块1:command模块

在远程主机执行Linux命令,不支持管道符,重定向输出

指定IP地址:

ansible 20.0.0.23 -m command -a 'date'
ansible 20.0.0.22 -m command -a 'date'

指定组,组内所有的声明主机都会执行:

ansible webserver -m command -a 'date'
ansible dbservers -m command -a 'date'

所有声明的主机全都执行:

ansible all -m command -a 'date'

不加-m,不声明使用的模块,默认就是command模块:

ansible 20.0.0.23  -a 'date'

command的一些常用参数:

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

先进home目录,然后再执行命令

ansible all -m command -a 'chdir=/opt ls'

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

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

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

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

3、模块二:shell模块

在远程主机上执行命令,相当于远程主机

ansible 20.0.0.22 -m shell -a 'useradd test'

#创建用户test
ansible 20.0.0.22 -m shell -a 'echo 123456 | passwd --stdin test'

#给test用户创建密码

举个例子:将IP地址切片出来:

ansible 20.0.0.22 -m shell -a "echo $(ifconfig ens33 | awk  'NR==2{print $2}')"

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

创建脚本,再写入内容,最后执行

举个例子:写一个脚本

ansible 20.0.0.22 -m shell -a 'echo -e "#/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'

4、模块3:cron模块

远程给主机设置定时任务

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

absent:表示移除。在ansible中absent都可以表示移除的意思(删除)

* * * * * 分时日月周

分=minute

时=hour

日=day

月=month

周=weekday

job:任务计划需要执行的命令或者脚本

name:任务计划的名称,可以不加

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

举个例子:

写一个9月1号8点30分,执行ls /opt 任务名:test2

30 8 1 9 *

ansible 20.0.0.22 -m cron -a 'minute="30" hour="8" day="1" month="9" job="ls /opt" name="test2"'

查看定时任务:

ansible 20.0.0.22 -m command -a 'crontab -l'

删除定时任务:

ansible 20.0.0.22 -m cron -a 'name=test1 state=absent'

删除未命名的定时任务(所有的None都会删除):

多个定时任务,如果不给名字都是None,一旦删除None,全部删除,不推荐(最好是指定一个不重复的名称)

ansible 20.0.0.22 -m cron -a 'name=None state=absent'

5、模块4:USER模块

用户管理模块

常用的参数:

name 指定用户名,必须要有

state present:创建用户,可以不加,默认

absent :删除一定要加absent

system=yes|no。标记用户使用是一个程序用户

uid:用户的唯一标识

group:指定用户的所在组

create_home=yes|no:替换用户的家目录,不替换可以不写,可省略

password:给用户创建密码

comment:添加用户的注释信息,可有可无

remove=yes|no,当删除用户时,加上remove=yes,删除用户的家目录,相当于userdel -r。如果不需要删除用户家目录,可省略这一项

ansible 20.0.0.22 -m user -a 'name=koeda system=yes '

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

创建程序用户:

ansible 20.0.0.22 -m user -a 'name=koeda1 system=yes shell=/sbin/nologin'

使用ansible的USER模块创建用户时,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash

如果创建程序用户,一定要声明system=yes,声明shell的类型 shell=/sbin/nologin

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

创建用户,选择uid,创建密码,指定家目录:

ansible 20.0.0.22 -m user -a 'name=koeda3 uid=1010 password=123456 home=/opt/test1'

更改用户家目录:

ansible 20.0.0.22 -m user -a 'name=koeda3 home=/home/koeda3 create_home=yes'

删除用户及其家目录:

ansible 20.0.0.22 -m user -a 'name=koeda remove=yes state=absent'

6、模块5:group模块(了解)

用户组的管理模块

gid 设置组的id

name必须要有

创建用户组:

ansible 20.0.0.22 -m group -a 'name=test1 gid=306 system=yes'

创建用户时添加到指定的组:

ansible 20.0.0.22 -m user -a 'name=test uid=1011 group=test1 '

删除用户组:

ansible 20.0.0.22 -m group -a 'name=test1 state=absent'

7、模块6:ping模块

ansible all -m ping

能ping通的主机必须是声明的主机

只有在/etc/ansible/hosts文件中声明的主机,ansible的控制端才可以进行远程操作

8、模块7:hostname模块

更改被控制端的主机名:

ansible 20.0.0.22 -m hostname -a 'name=webservers'

ansible 20.0.0.23 -m hostname -a 'name=dbservers'

9、模块8:COPY模块

用于复制指定的主机文件到远程主机的模块

常用的参数:

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

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

owner:支出文件的所有者

group:指定文件的所在组

content:从主机复制指定的内容到目标主机,用content就不能使用src

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

ansible 20.0.0.22 -m copy -a 'src=/opt/123 dest=/opt/123.txt owner=test mode=655'

举个例子:将ky32.txt文件复制到22主机,所有者test程序用户,所在组test,文件的权限600

ansible 20.0.0.22 -m user -a 'name=test system=yes shell=/sbin/nologin'
#创建程序用户
ansible 20.0.0.22 -m group -a 'name=test gid=333 system=yes'
#创建用户组
ansible 20.0.0.22 -m copy -a 'src=/opt/ky32.txt dest=/opt/32.txt owner=guoqi group=guoqi mode=600'
#复制文件,并且给权限

复制目录:

复制目录时,要保证不是空目录,要有文件

ansible 20.0.0.22 -m copy -a 'src=/opt/test dest=/opt/test1/ mode=777'

指定输入一个内容:

相当于echo功能

echo一个hello world!到22主机的opt下

ansible 20.0.0.22 -m copy -a 'content="hello world!" dest=/opt/hello.txt'

10、模块9:file模块

文件模块跟目录没有关系

管理文件属性

相关参数:

owner、group、mode等

state=link:创建链接文件

state=touch:创建文件

state=directory 创建目录

state=absent:删除文件

修改文件的所有者和所在组

ansible 20.0.0.22 -m file -a 'owner=test group=test mode=777 path=/opt/demo.txt'

file模块创建文件

ansible 20.0.0.22 -m file -a 'path=/opt/ky32.txt state=touch'
#创建文件

file模块创建目录

ansible 20.0.0.22 -m file -a 'path=/opt/ky32 state=directory'

将本机的/etc/fatab文件复制到远程主机,再用这个文件创建一个连接文件:

ansible 20.0.0.23 -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak'
#先复制
ansible 20.0.0.23 -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'
#在创建链接文件

基于file模式删除远程文件

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

11、模块10:yum模块

在远程主机上安装软件包

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

ansible 20.0.0.23 -m yum -a 'name=tree'

在目标主机上的操作都是后台运行,不影响其他用户的使用。在日志中能打印

卸载软件:

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

12、模块11:service/systemd模块

常用参数:

state=started|stopped|restarted 三种管理动作

enabled=true 表示是否设置开机自启,默认就是开机不自动启动

runlevel:配合enabled的,若设置开机自启,可以设置运行级别。在命令行可以设置,但是不生效,必须要在playbook中使用

ansible 20.0.0.52 -m service -a 'enabled=ture name=nginx state=restarted'

举个例子:nginx 安装nginx 设置为开机自动,设置访问页面this is nginx

ansible 20.0.0.52 -m yum -a 'name=epel-release'

ansible 20.0.0.52 -m yum -a 'name=nginx'

ansible 20.0.0.52 -m service -a 'enabled=true name=nginx state=restarted'

ansible 20.0.0.52 -m shell -a 'echo this is nginx > /usr/share/nginx/html'

13、模块12:script模块

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

先创建一个脚本

chmod  777 test.sh

运行脚本,将内容输出到远程主机上

ansible all -m script -a 'test.sh'

14、模块13:setup模块

主要作用就是查看目标主机的环境信息(facts),目标节点的系统信息

查看所有环境信息

ansible all -m setup

查看目标主机的IP信息

ansible all -m setup -a 'filter=*ipv4'

查看CPU信息:

ansible all -m setup -a 'filter=*memory*'
ansible_processor

查看内存信息:

ansible all -m setup -a 'filter=*memory*'
ansible_memory_mb

查看内核:

ansible all -m setup -a 'filter=*proc*'
ansible_processor

查看os系统:

ansible all -m setup -a 'filter=*os*'
ansible_os_family

查看硬盘信息:

ansible all -m setup -a 'filter=*dev*'
ansible_devices

四、管理主机清单

快速声明多个主机

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:指定切换用户的密码。基于免密钥登录实现。
 

1、主机变量

vim /etc/ansible/hosts
#声明主机变量

#指定ip,定义好ssh连接的端口,用户,密码。做到免密连接
20.0.0.2[5:6] ansible_port=22 ansible_user=root ansible_password=123

这里将25、26主机生面变量,27没有声明

vim /etc/ansible/ansible.cfg

取消ssh的秘钥对验证

#---71行取消注释---
host_key_checking = False

测试连通性:

ansible webservers -m ping

这里注意:

声明好的主机节点的端口必须是22,root用户的密码必须是123

2、组变量

声明组变量
[webservers:vars]        #表示为 webservers 组内所有主机定义变量
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

3、组嵌套

[nginx]
20.0.0.20
20.0.0.21
20.0.0.22

[apache]
20.0.0.3[0:3]

[webs:children]	#表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache

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

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

相关文章

web前端游戏项目-雷霆战机飞机大战游戏【附源码】

文章目录 一:雷霆战机HTML源码:JS文件:(1)function.js(2)impact.js(3)move.1.1.js(4)script.js 二:飞机大战HTML源码:CSS源…

短视频时代,又恰逢双旦来临之际,普通人又该如何立足?

我是电商珠珠 在电商发展迅速的同时,短视频也在同步发展。国内的短视频比较热门的有抖音、视频号、快手这几个。 抖音在19年的时候发展起了自己的电商行业-抖音小店,并顺势掀起了直播电商的热潮。 直播电商在短视频中很火,所以很多人都选择…

电源模块测试方法 | 怎么测试电源负载瞬态响应?

负载瞬态响应测试是检测电源稳定性和质量的重要方法之一,而电源稳定性是设备正常运行的基础。通过负载瞬态响应测试来检测电源的响应速度和稳定性,从而优化电源设计,提升性能,确保电子设备可以稳定工作。 什么是负载瞬态响应测试?…

技术博客:市面上加密混淆软件的比较和推荐

引言 市面上有许多加密混淆软件可供开发者使用,但哪些软件是最好用的?哪些软件受到开发者的喜爱?本文将根据一次在CSDN上的投票结果,为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果,希望能对大家的选…

如何进一步优化Ubuntu服务器的性能

导读: 要进一步优化Ubuntu服务器的性能,您可以考虑以下几个方面:优化软件包管理: Ubuntu使用APT(Advanced Package Tool)作为其软件包管理工具。为了提高性能,您可以采取以下措施 要进一步优化U…

鸿蒙ArkTS语言介绍与TS基础法

1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言,它在TS基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等响应的能力,让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言,已经被广泛用…

纵横字谜的答案 Crossword Answers

纵横字谜的答案 Crossword Answers - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 翻译后大概是&#xff1a; 有一个 r 行 c 列 (1<r,c<10) 的网格&#xff0c;黑格为 * &#xff0c;每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格&…

一文读懂光量子技术

量子力学理论是在二十世纪初提出的&#xff0c;目的是为了更好地解释原子发出的光的光谱。当时&#xff0c;许多人认为物理学几乎已被完全理解&#xff0c;只剩下一些异常现象有待“解决”。 量子力学完整理论的出现完全出乎人们的意料&#xff1a;它从根本上描述了自然界。它描…

python+torch线性回归模型机器学习

程序示例精选 pythontorch线性回归模型机器学习 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《pythontorch线性回归模型机器学习》编写代码&#xff0c;代码整洁&#xff0c;规则&#xf…

[CVPR-23] PointAvatar: Deformable Point-based Head Avatars from Videos

[paper | code | proj] 本文的形变方法被成为&#xff1a;Forward DeformationPointAvatar基于点云表征动态场景。目标是根据给定的一段单目相机视频&#xff0c;重建目标的数字人&#xff0c;并且数字人可驱动&#xff1b;通过标定空间&#xff08;canonical space&#xff09…

域架构下的功能安全思考

来源&#xff1a;联合电子 随着整车电子电气架构的发展&#xff0c;功能域控架构向整车集中式区域控制演进。新的区域控制架构下&#xff0c;车身控制模块(BCM)&#xff0c;整车控制单元&#xff08;VCU&#xff09;&#xff0c;热管理系统&#xff08;TMS&#xff09;和动力底…

机器学习笔记:支持向量机回归SVR

1 主要思想 主要思路类似于机器学习笔记&#xff1a;支持向量机SVM_支撑向量学习-CSDN博客 和SVM的区别主要有 解法和SVM区别不大&#xff0c;也是KKT 2 和线性回归的区别 对SVR&#xff0c;如果f(x)和y之间的差距小于阈值ε【也即落在两条间隔带之间】&#xff0c;则不计算…

Text2SQL学习整理(三)SQLNet与TypeSQL模型

导语 上篇博客&#xff1a;Text2SQL学习整理&#xff08;二&#xff09;&#xff1a;WikiSQL数据集介绍简要介绍了WikiSQL数据集的一些统计特性和数据集特点&#xff0c;同时简要概括了该数据集上一个baseline&#xff1a;seq2sql模型。本文将介绍seq2SQL模型后一个比较知名的…

盲盒电商:万物皆可盲盒

随着社会的进步和消费观念的改变&#xff0c;盲盒已经成为了年轻人喜爱的消费方式之一。从玩具、文具到美妆、服饰&#xff0c;甚至是旅行、餐饮等领域&#xff0c;盲盒的形态和内容也在不断变化和丰富。今天&#xff0c;我们就来聊聊这个充满惊喜和未知的盲盒世界。 一、盲盒的…

JDK bug:ciObjectFactory::create_new_metadata:原因完全解析

文章目录 1、问题2.详细日志2.关键日志3.结论4.JDK&#xff1a;bug最终bug链接&#xff1a; 京东遇到过类似bug各位大佬如果有更详细的解答可以留言。 1、问题 服务不通&#xff0c;接口404&#xff0c;查看日志有一下截图&#xff0c;还有一个更详细的日志 2.详细日志 # #…

Missing artifact org.wltea.analyzer:ik-analyzer:jar:5.0

没有找到【org.wltea.analyzer】 找到了【org.wltea.ik-analyzer】 https://github.com/wks/ik-analyzer https://github.com/wks/ik-analyzer.git https://code.google.com/archive/p/ik-analyzer/downloads?page2 C:\Users\Administrator\Desktop\ik-analyzer-master>m…

java实现回文数算法

判断一个数是否为回文数可以使用以下算法&#xff1a; 将数字转化为字符串&#xff1b;初始化左右两个指针&#xff0c;分别指向字符串的首尾&#xff1b;循环比较左右指针指向的字符&#xff0c;如果相等则继续比较&#xff0c;直到左右指针相遇或者发现不相等的字符为止&…

《opencv实用探索·二十一》人脸识别

Haar级联分类器 在OpenCV中主要使用了两种特征&#xff08;即两种方法&#xff09;进行人脸检测&#xff0c;Haar特征和LBP特征。用的最多的是Haar特征人脸检测。 Haar级联分类器是一种用于目标检测的机器学习方法&#xff0c;它是一种基于机器学习的特征选择方法&#xff0c;…

【halcon深度学习】create_dl_model_detection

基本介绍 create_dl_model_detection 不是一个封装的库函数&#xff0c;是一个算子。用于创建用于目标检测或实例分割任务的深度学习模型。 输入参数&#xff1a; Backbone (input_control): 指定用作背骨网络的深度学习分类器&#xff0c;充当模型的基础。用户可以选择不同的…

python+pytest接口自动化之测试函数、测试类/测试方法的封装

前言 今天呢&#xff0c;笔者想和大家聊聊pythonpytest接口自动化中将代码进行封装&#xff0c;只有将测试代码进行封装&#xff0c;才能被测试框架识别执行。 例如单个接口的请求代码如下&#xff1a; import requestsheaders {"user-agent": "Mozilla/5.0…