Ansible简介版

news/2024/11/16 5:54:01/

目录

架构

环境部署

一、Ansible安装部署

1.yum安装Ansible

2.修改主机清单文件

3.配置密钥对验证

ansible-doc-toc" style="margin-left:40px;">4.ansible-doc

5.看被控主机

二、常用模块

1.Command模块

2.Shell模块

3.Cron模块

1.添加

2.删除

4.User模块

5.Group模块

1.创建组 

​编辑

​编辑

​编辑

2.删除组 

​编辑

6.cp模块

​编辑

7.File模块

8.Hostname模块

9.ping模块

10.Yum_repository模块

1.安装httpd 

2.删除 

3.安装nginx

11.Service模块

1.开启nginx

12.Script模块

13.setup模块


架构

    1. 核心:ansible2. 主机清单(Host Inventory):被管理主机的列表的文件;Ansible 可以根据这个清单文件来执行针对不同主机组的任务3. 剧本(playbook):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动去执行4. 核心模块(Core Modules):是ansible自带的模块5. 自定义模块模块(Custom Modules):在核心模块功能不足时,可使用自定义模块6. 连接插件(Connaction Plugins):使用ssh,来连接每一个被控制的主机7. 插件(Plugins):记录日志#######################################################################################1. 用户请求过来之后,给到我们核心Ansible2. Ansible通过主机清单去处理用户请求处理的两种方式:1)使用剧本playbook,命令[yum  install...]操作处理2)使用模块完成1)核心模块【Core  Modules】直接完成,在没有核心模块时,使用自定义模块2)自定义模块【Custom  Modules】3. 通过连接插件【Connaction  Plugins】使用ssh,来连接每一个被控制的主机4. 最后由插件【Plugins】来记录日志

环境部署

主机服务
192.168.91.102Ansible
192.168.91.103————
192.168.91.104————

一、Ansible安装部署

1.yum安装Ansible

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# 
[root@localhost ~]# yum install epel-release -y
[root@localhost ~]# yum install ansible -y

2.修改主机清单文件

[root@localhost ~]# vim /etc/ansible/hosts

 45 [web]46 192.168.91.10347 192.168.91.10448 49 [all]50 192.168.91.[102:110]

3.配置密钥对验证

ssh-keygen -t rsa		#一路回车,使用免密登录
sshpass -p 'abc1234' ssh-copy-id root@192.168.91.103
sshpass -p 'abc1234' ssh-copy-id root@192.168.91.104

同样方法登录一下192.168.91.104

ansible-doc">4.ansible-doc

[root@ansible ~]# ansible-doc -l
#查看所有支持的模块

5.看被控主机

ansible all --list

二、常用模块

1.Command模块

[root@localhost ~]# ansible web -a 'hostname'

[root@localhost ~]# ansible web -a 'touch /opt/test' [root@localhost ~]# ansible web -a 'ls /opt/test'

或者直接去7-3和7-4opt目录看一下,有没有test这个文件

ansible 192.168.91.104 -a "chdir=/opt ls ./"

2.Shell模块

功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >

注意:此模块不具有幂等

[root@localhost ~]# ansible web -m shell -a "echo hello > /opt/hello.txt"[root@localhost ~]# ansible web -m shell -a "cat /opt/hello.txt"

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

3.Cron模块

功能:计划任务

支持时间:minute,hour,day,month,weekday

关键字:

name  会生成一行注释,显示标题如下显示
job   执行的命令

1.添加

[root@localhost mnt]# ansible 192.168.91.102 -m cron -a 'hour=*/2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'

看结果

2.删除

[root@localhost mnt]# ansible 192.168.91.102 -m cron -a 'name="backup mysql" state=absent'

结果

4.User模块

###管理用户

comment         用户的描述信息
createhome      是否创建家目录
force           在使用state=absent时, 行为与userdel –force一致.
group           指定基本组
groups          指定附加组,如果指定为(groups=)表示删除所有组
home            指定用户家目录
move_home       如果设置为home=时, 试图将用户主目录移动到指定的目录
name            指定用户名
non_unique      该选项允许改变非唯一的用户ID值
password        指定用户密码,使用 SHA512 hash
remove          在使用state=absent时, 行为是与userdel –remove一致
shell           指定默认shell
state           设置帐号状态,不指定为创建,指定值为absent表示删除
system          当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid             指定用户的uid
update_ password 
  always      如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always
  on_create   如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定

ansible web -m user -a 'name="test1"'

看结果

删除用户

ansible web -m user -a 'name="test1" state=absent remove=yes'

看结果

5.Group模块

###管理组

1.创建组 

ansible 192.168.91.103 -m group -a 'name=test gid=88 system=yes'

查看创建结果

创建用户导入到组中

ansible 192.168.91.103 -m user -a 'name=test2 uid=504 system=yes group=test'

查看结果

id test2

2.删除组 

[root@ansible ~]# ansible 192.168.91.103 -m user -a 'name="test2" state=absent remove=yes'  ########先删除组中的用户

ansible 192.168.91.103 -m group -a 'name=test state=absent'

查看结果

6.cp模块

功能:解包解压缩

实现有两种用法:

1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略

2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

常见参数:

copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
src:源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限

ansible 192.168.91.103 -m copy -a 'src=/etc/fstab dest=/opt/fstab_bak owner=root mode=640'

看结果

写入文件内容

ansible 192.168.91.103 -m copy -a 'content="xzq" dest=/opt/xzq.txt'

查看结果

7.File模块

功能:设置文件属性,创建软链接等

path       指定文件路径
state      文件状态 有:新建(touch) 删除(absent) 文件夹(directory)  连接文件(link)等
src        源文件
mode       权限
owner      属主
group      属组
recurse    递归

[root@localhost mnt]# ansible web -m file -a "path=/data/666 state=touch mode=644 owner=lisi group=lisi"

创建软连接

ansible web -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'

查看设置结果

8.Hostname模块

###修改被管理主机的主机名

ansible 192.168.91.103 -m hostname -a 'name=node3 '
#一般不使用此模块,主机名会一致

9.ping模块

[root@localhost ~]# ansible web -m ping

Web是我们之前在主机清单文件中写的名字

10.Yum_repository模块

功能:建立yum仓库模块

关键字:

name参数:            必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
baseurl参数:        此参数用于设置 yum 仓库的 baseurl。
description参数:    此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
file参数:            此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作                      为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。
enabled参数:        此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
gpgcheck参数:        此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。
gpgcakey参数:        当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
state参数:        默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。

###yum安装

1.安装httpd 

[root@localhost mnt]# ansible web -m yum -a 'name=httpd state=present'###state=present可以不加

结果

2.删除 

删除

[root@localhost mnt]# ansible web -m yum -a 'name=httpd state=present state=absent'

结果

3.安装nginx

ansible web -m yum_repository -a 'name=epel description=epel  baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no file=epel'

[root@localhost mnt]# ansible web -m yum -a 'name=nginx state=present'

看结果

11.Service模块

功能:管理服务

关键字:

name参数:        此参数用于指定需要操作的服务名称,比如 nginx。
state参数:    此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服               务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded。
enabled参数:    此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。

1.开启nginx

[root@localhost mnt]# ansible web -m service -a 'name=nginx state=started enabled=yes'

curl 192.168.91.102
###看结果###

12.Script模块

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)

注意:此模块不具有幂等性

在Ansible服务器上,创建test.sh脚本

[root@ansible opt]# vim test.sh
[root@ansible opt]# chmod +x test.sh 
[root@ansible opt]# ansible web -m script -a '/opt/test.sh'

查看结果

13.setup模块

功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度

可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信

ansible web -m setup -a "filter=ansible_hostname"

ansible all -m setup
ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_uptime_seconds"
ansible all -m setup -a "filter=ansible_processor*"
ansible all -m setup -a 'filter=ansible_env'

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


http://www.ppmy.cn/news/1456132.html

相关文章

【docker 】 IDEA 安装 Docker 工具

打开File->Settings->Plugins 配置 Docker 的远程访问连接 Engine APIURL :tcp://192.168.0.1:2375 (换成自己的docker开放端口) 使用diea的docker插件 查看已有的镜像 创建一个容器 下面是最近更新的文章: 【docker 】 …

链式队列基本操作

链式队列的基本概念 链式队列是一种常见的数据结构,它使用链表作为其底层数据存储结构。链式队列的特点是动态的内存分配,可以有效地处理队列的入队和出队操作。下面,我将介绍链式队列的实现方法,并提供相应的C语言代码示例。 链…

redux实现原理

Redux 是一个用于 JavaScript 应用程序状态管理的库。它被设计用来管理整个应用程序的状态,并且与 React 结合使用时非常流行。Redux 的实现原理可以简要概括为以下几个关键概念: 单一数据源 (Single Source of Truth):Redux 应用程序的所有状…

01-xss基本原理

核心:攻击的是前端&#xff0c; 一、课程引入 1、开发一个简单的PHP页面&#xff0c;代码如下&#xff1a; <?php // xss 基础演示代码&#xff1a;从浏览器中接受一个URL地址参数名为content if(isset($_GET[content])){$content$_GET[content];echo "你输入的内容…

k8s保持pod健康

存活探针 Kubemetes 可以通过存活探针 (liveness probe) 检查容器是否还在运行。可以为 pod 中的每个容器单独指定存活探针。如果探测失败&#xff0c;Kubemetes 将定期执行探针并重新启动容器。 Kubemetes 有以下三种探测容器的机制&#xff1a; HTTP GET 探针对容器的 IP 地…

【SolidWorks】快速做一个密闭箱体的方法

最近博主在用SolidWorks搭建一个带有上盖的方壳体&#xff0c;经过一番摸索&#xff0c;发现采用“特征”里的“拉伸”和“抽壳”两个功能&#xff0c;就可以快速搭建一个封闭箱体。这里将快速做密闭箱体的方法分享给大家。 1、在草图里画一个箱体的底部图形&#xff0c;比如方…

如何使用Knife4j进行接口测试

Knife4j是一个为Java MVC框架提供增强的Swagger UI界面的开源工具&#xff0c;它集成了Swagger UI并提供了更丰富的功能。使用Knife4j可以进行接口的测试&#xff0c;以下是使用Knife4j进行接口测试的详细步骤和解释&#xff1a; 1. 引入Knife4j依赖 首先&#xff0c;确保你的…

python获取图像边缘轮廓

在计算机视觉领域,图像边缘检测是基础且关键的一环,它能够帮助我们从复杂的图像数据中提取有用的结构信息,进而用于物体识别、形状分析等多种应用。Python凭借其丰富的库支持,如OpenCV、Pillow、Scikit-image等,成为了实现图像边缘检测的热门工具。本文将详细介绍如何使用…