一、ansible简介

ansible是一种基于python开发的自动化运维工具,它只需要在服务端安装ansible,无需在每个客户端安装客户端程序,通过ssh的方式来进行客户端服务器的管理,基于模块来实现批量数据配置、批量设备部署以及批量命令执行。

ansible大致模块工作原理见下图:

大致工作原理就是ansible程序调用读取/etc/ansible/ansible.cfg配置文件获取主机列表清单/etc/ansible/hosts文件,获取所要处理的主机列表,然后查看剧本任务,在根据剧本中一系列任务生成一个临时的脚本文件,然后将该脚本文件发送给所管理的主机,脚本文件在远程主机上执行完成后返回结果,然后删除本地临时文件

二、ansible的安装部署及免密设置

ansible安装比较简单,只要安装第三方源后,使用包管理工具dnf一键安装即可,步骤如下:

dnf install -y epel-releasednf install -y ansible

安装完成后,为了方便管理可以配置ssh免密,命令如下:

ssh-keygen -t rsa //在/root/.ssh/目录下生产公钥(id_rsa.pub)和私钥(id_rsa)两个文件ssh-copy-id root@<ip> //分发秘钥至需要免密登录的目标设备

三、ansible工作模式

ansible分为两种工作模式:

一是adhoc(点对点模式):此模式相当于对管理主机执行单个的shell命令

二是playbook(剧本模式):该模式应用较多,该模式是指将一系列任务整合形成一个剧本,以此来达成某种功能(譬如部署某个服务,数据库备份等)的目的。

上述两种模式可类比于一个是执行单个shell命令,一个是shell脚本。

四、ansible配置文件关键配置介绍

4.1、ansible.cfg配置文件

inventory :管理的主机清单文件路径

library:ansible的模块存放的目录

remote_tmp:上述工作原理中提到的将脚本发送至对端的临时目录

local_tmp:上述工作原理中提到本地生成脚本存放的临时目录

forks:并发连接数,默认为5

sudo_user :命令执行用户

remote_port :访问管理主机的端口

host_key_checking:设置是否检查SSH主机的密钥,默认为false

timeout :ssh连接被管理主机的超时时间

log_path:ansilbe日志文件路径

4.2、hosts配置文件

hosts配置文件是ansible管理的主机列表文件,里面记载着管理主机的ip、端口等信息

其有两种方式:

一是单个主机名或主机ip记录

二是将某一类主机分组记录,譬如数据库主句:

[dbserver]

192.168.1.1

192.168.1.2

192.168.1.3

........

当需要对该类主机进行操作时,只要调用dbserver即可调用该分组内所有主机,且此处可支持通配符

五、 ansible常用参数

ansible-doc -l :列出所有模块ansible-doc -s <模块名> :查看模块的参数信息ansible --version :查看ansible版本ansible -v :输出详细详细;-vv:输出更详细的信息ansible -m :指定调用的模块名称ansible -a :调用模块的参数ansilbe -c :测试命令执行结果,不实际执行ansible -k :提示输入ssh的秘密,而不是基于ssh认证ansible -u :指定执行命令的用户ansilbe -i :指定访问的主机列表文件ansilbe -f :指定并发进程数

六、ansible常用模块

以下模块举例主机组为client

1、ping模块连通性测试

[root@server ~]# ansible client -m ping                      //检测主机组主机连通性192.168.91.128 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}

2、command模块

[root@server ~]# ansible client -m command -a 'df -h'              //执行某个命令,不会通过shell进行处理,不支持管道192.168.91.128 | CHANGED | rc=0 >>
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             362M     0  362M   0% /dev
tmpfs                392M     0  392M   0% /dev/shm
tmpfs                392M   26M  366M   7% /run
tmpfs                392M     0  392M   0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  8.8G  8.3G  52% /
/dev/sda1           1014M  255M  760M  26% /boot
tmpfs                 79M   24K   79M   1% /run/user/1000
/dev/sr0             723M  723M     0 100% /run/media/wujw/CentOS-8-4-2105-x86_64-dvd
tmpfs                 79M     0   79M   0% /run/user/0

3、shell模块

ansible client -m shell -a 'df -h|grep dev'           //万能模块,支持所有shell命令192.168.91.128 | CHANGED | rc=0 >>
devtmpfs             362M     0  362M   0% /dev
tmpfs                392M     0  392M   0% /dev/shm
/dev/mapper/cl-root   17G  8.8G  8.3G  52% /
/dev/sda1           1014M  255M  760M  26% /boot
/dev/sr0             723M  723M     0 100% /run/media/wujw/CentOS-8-4-2105-x86_64-dvd

4、copy模块

支持的参数:

src    被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径
content  用于替换"src",可以直接指定文件的内容
dest     将源文件复制到的远程主机的绝对路径
backup    当文件内容发生改变后,在覆盖之前把源文件备份
force   当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设                                  为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"

[root@server ~]# ansible client -m copy -a 'src=mem.txt dest=/root'      //从当前设备拷贝文件至对端192.168.91.128 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": true,"checksum": "321b4039b2d0805781db9c38df6ab75cc1a4fe32","dest": "/root/mem.txt/192.168.91.128","gid": 0,"group": "root","md5sum": "fb3a8f8cafdeccd3312e69eb18b5c205","mode": "0644","owner": "root","secontext": "system_u:object_r:admin_home_t:s0","size": 333,"src": "/root/.ansible/tmp/ansible-tmp-1653312782.0254133-7348-72341069223651/source","state": "file","uid": 0
}
[root@server ~]# ansible client -m shell -a 'ls -l /root'    //查看文件已发送过来192.168.91.128 | CHANGED | rc=0 >>
total 24
-rw-r--r--. 1 root    root     142 May 18 10:27 1.sh
drwxr-xr-x. 2 root    root       6 May  8 04:15 123
-rw-------. 1 root    root    1429 Aug 20  2021 anaconda-ks.cfg
-rw-r--r--. 1 root    root    1721 Aug 21  2021 initial-setup-ks.cfg
drwxr-xr-x. 2 root    root      28 May 23 09:33 mem.txt
-rw-r--r--. 1 root    root      53 May 18 10:54 temp.txt
drwxr-xr-x. 2 root    root      79 May  8 04:04 test
-rw-r--r--. 1 root    root     142 May 18 10:54 test.sh
-rw-r--r--. 1 tcpdump tcpdump   39 May 18 10:34 test.txt

五、 file模块

支持的参数:
group  定义文件/目录的所属组
owner  定义文件/目录的所属用户。后面必须跟上path:定义文件/目录的路径
dest    被链接到的路径,只应用于state=link的情况
state  状态,有以下选项:

directory:如果目录不存在,就创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其               最后修改时间
absent:删除目录、文件或者取消链接文件

[root@server ~]# ansible client -m file -a 'path='/root/mem.txt' state=absent'
//删除文件/root/mem.txt
192.168.91.128 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": true,"path": "/root/mem.txt","state": "absent"
}
[root@server ~]# ansible client -m shell -a 'ls -l /root'
//查看文件/root/mem.txt已被删除
192.168.91.128 | CHANGED | rc=0 >>
total 24
-rw-r--r--. 1 root    root     142 May 18 10:27 1.sh
drwxr-xr-x. 2 root    root       6 May  8 04:15 123
-rw-------. 1 root    root    1429 Aug 20  2021 anaconda-ks.cfg
-rw-r--r--. 1 root    root    1721 Aug 21  2021 initial-setup-ks.cfg
-rw-r--r--. 1 root    root      53 May 18 10:54 temp.txt
drwxr-xr-x. 2 root    root      79 May  8 04:04 test
-rw-r--r--. 1 root    root     142 May 18 10:54 test.sh
-rw-r--r--. 1 tcpdump tcpdump   39 May 18 10:34 test.txt

六、fetch模块

dest:用来存放文件的目录
src:在远程拉取的文件,并且必须是一个file,不能是目录

[root@server ~]# ansible client -m fetch -a 'src=/root/test.sh dest=/root'192.168.91.128 | SUCCESS => {"changed": false,"checksum": "061375bc913062287ccd658347e8575d38dfa857","dest": "/root/192.168.91.128/root/test.sh","file": "/root/test.sh","md5sum": "35dcd724c02d10850a560df9129a1cf2"
}

七、cron模块

day:  每天应该运行的工作( 1-31)
hour: 每小时 ( 0-23 )
minute:每分钟( 0-59 )
month:每月( 1-12 )
weekday:每周 ( 0-6 for Sunda y-Saturday,, )
job:指明运行的命令
name:定时任务描述
reboot :任务在重启时运行,不建议使用,建议使用special_time
special_time :特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state:指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务

user :以哪个用户的身份执行

[root@server ~]# ansible client -m cron -a 'name="restart httpd" hour=*/5 job="systemctl restart httpd"'
//每5小时重启httpd模块
192.168.91.128 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": true,"envs": [],"jobs": ["restart httpd"]
}
[root@server ~]# ansible client -m shell -a 'crontab -l'192.168.91.128 | CHANGED | rc=0 >>
#Ansible: restart httpd
* */5 * * * systemctl restart httpd

八 、yum模块

支持的参数:

name:安装包名称
state:

present:安装

latest:安装最新的

absent: 卸载软件

ansible client -m yum -a 'name=httpd state=present'

九、service模块

支持的参数:
enabled :设置开机启动。
name : 服务名称
state :四种状态

     started:启动服务                 stopped:停止服务

     restarted:重启服务             reloaded:重载配置

[root@server ~]# ansible client -m service -a 'name=httpd state=restarted'    //重启httpd服务192.168.91.128 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": true,"name": "httpd","state": "started","status": {"ActiveEnterTimestamp": "Mon 2022-05-23 10:16:02 EDT","ActiveEnterTimestampMonotonic": "134284476109","ActiveExitTimestamp": "Mon 2022-05-23 10:16:01 EDT","ActiveExitTimestampMonotonic": "134283332327","ActiveState": "active",........}
}

十、user模块

支持的参数:

name:指定用户名

group:指定基本组
state:设置帐号状态,不指定为创建,指定值为absent表示删除
system:当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid: 指定用户的uid

password: 指定用户密码

[root@server ~]# ansible client -m user -a 'name=test uid=23'    //创建用户test,uid为23192.168.91.128 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": true,"comment": "","create_home": true,"group": 1001,"home": "/home/test","name": "test","shell": "/bin/bash","state": "present","system": false,"uid": 23
}删除用户state=absent

十一、group模块

支持的参数:

gid:设置组ID
name:组的名称
state:组的状态,默认为创建,设置值为absent为删除
system:值为yes,表示创建为系统组

[root@server ~]# ansible client -m group -a 'name=test1 gid=233'     //创建组test1,gid为233192.168.91.128 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": true,"gid": 233,"name": "test1","state": "present","system": false
}

十二、script模块

该模块用于将本地的一个脚本文件在管理设备上执行,脚本文件需有可执行权限

ansible client -m script -a '/root/192.168.91.128/test.sh'

十二、 setup模块

该模块用于采集被管理设备信息并返回给服务端,后面跟--tree <目录>,可以将采集信息以ip为文件名保存至指定目录下

ansible client -m setup    //输出所有设备信息输出内容较多,可通过过滤采集我们需要的设备信息,譬如只要内存信息[root@server root]# ansible client -m setup -a 'filter=*mem*'
192.168.91.128 | SUCCESS => {"ansible_facts": {"ansible_memfree_mb": 55,"ansible_memory_mb": {"nocache": {"free": 216,"used": 566},"real": {"free": 55,"total": 782,"used": 727},"swap": {"cached": 56,"free": 1175,"total": 2047,"used": 872}},"ansible_memtotal_mb": 782,"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false
}再或者仅要ipv4地址:[root@server root]# ansible client -m setup -a 'filter=*all_ipv4*'192.168.91.128 | SUCCESS => {"ansible_facts": {"ansible_all_ipv4_addresses": ["192.168.122.1","192.168.91.128"],"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false
}

七、ansible的剧本模式(playbook)

后续补充

自动化运维工具-ansible详解相关推荐

  1. 自动化运维工具——ansible详解(一)

    ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...

  2. Linux自动化运维工具ansible详解

    文章目录 认识ansible ansible的组成 ansible的相关文件 ansible的使用 ansible的常用模块 1.copy模块 2.fetch模块 3.command模块 4.shel ...

  3. 自动化运维工具——puppet详解(二)

    自动化运维工具--puppet详解(二) 目录 一.class 类 1)什么是类? 2)带有参数的类 3)类的继承 1.新增属性 2.新增原有值 3.修改原有值 4.整体调用父类,并重写部分值 二.模 ...

  4. 项目10.2-企业级自动化运维工具---puppet详解

    1.认识puppet 1.1 引入 puppet是什么,咱们先不用专业的名词解释它,咱们先描述一些工作场景,看明白这些工作场景,自然会知道puppet是什么. (1)场景一: 管理员想要在100台服务 ...

  5. 自动化运维工具——puppet详解(一)

    一.puppet 介绍 1.puppet是什么 puppet是一个IT基础设施自动化管理工具,它能够帮助系统管理员管理基础设施的整个生命周期: 供应(provisioning).配置(configur ...

  6. 自动化运维工具—puppet详解

    文章目录 一.puppet 介绍 1.puppet是什么 2.puppet的工作机制 1)工作模型 2)工作流程 3)使用模型 3.puppet 名词解释 二.puppet 资源详解 1.程序安装及环 ...

  7. 自动化运维工具Ansible实战---常用模块

    Ansible默认提供了很多模块来供我们使用.在Linux中,我们可以通过 ansible-doc -l 命令查看到当前Ansible支持哪些模块,通过 ansible-doc -s [模块名] 又可 ...

  8. 自动化运维工具----ansible

    自动化运维工具----ansible ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能. 主要模块以及功能 ...

  9. 自动化运维工具ansible(安装与模块介绍)

    自动化运维工具ansible(安装与模块介绍) 一.ansible运维工具概述 (一).ansible的特点 (二).ansible的原理 (三)ansible的优点 二.安装ansible 三.an ...

最新文章

  1. mybatis-plus 错误java.lang.NoClassDefFoundError: org
  2. 《Cocos2d 跨平台游戏开发指南(第2版)》一1.9 添加动作到精灵
  3. adb安装apk报错Failure [INSTALL_FAILED_INVALID_URI]
  4. 使用sikuli和Arquillian测试HTML5 canvas应用程序
  5. Java设计模式之七大结构型模式
  6. 软件测试都有哪些证书,软件测试都有哪些证书呀?有用吗?
  7. mysql union 不同字段_mysql中union和union all的区别和注意点
  8. 总结的几个cocoapods的几个常见问题
  9. oracle官网(中文)
  10. 计算机英语面试翻译,计算机面试英文自我介绍范例
  11. MTK平台前后摄使用PMIC供电无法设置不同的DVDD电压
  12. 相位延时、相位延迟、群延时
  13. asp.net线上宠物商店系统
  14. SpringBoot#InitBinder
  15. N9H30 FMI NAND controller driver for RTT
  16. matlab 风资源,自己开发的风资源分析工具包WindAnalysis
  17. VB中do循环的四种格式
  18. 大数据课程设计(一)二手房数据挖掘可视化
  19. 店盈通:拼多多店铺该怎么运营?店铺运营思路解析
  20. erp5开源制造业erp产品工艺路线定义

热门文章

  1. 基于Java的多用户日程管理系统
  2. Wav2Lip---嘴型同步模型Wav2Lip
  3. 史上最详细 Lipreading using Temporal Convolutional Networks 环境配置
  4. python 画K线
  5. Social Network (easy version)
  6. Excel系列-1.Excel引用
  7. Box2D C++ tutorials - 运行轨迹(Projected trajectories)
  8. Excel表格在编辑状态时文字完整显示,但是预览和打印时表格内容显示不全问题,如何解决
  9. Java中的Hash碰撞是什么?该如何解决?
  10. c语言快速入门 惧留孙,《封神英雄榜2》阴阳镜是什么法宝殷洪最后结局死了吗...