一、ansible简介
ansible是一种基于python开发的自动化运维工具,它只需要在服务端安装ansible,无需在每个客户端安装客户端程序,通过ssh的方式来进行客户端服务器的管理,基于模块来实现批量数据配置、批量设备部署以及批量命令执行。
ansible大致模块工作原理见下图:
大致工作原理就是ansible程序调用读取/etc/ansible/ansible.cfg配置文件获取主机列表清单/etc/ansible/hosts文件,获取所要处理的主机列表,然后查看剧本任务,在根据剧本中一系列任务生成一个临时的脚本文件,然后将该脚本文件发送给所管理的主机,脚本文件在远程主机上执行完成后返回结果,然后删除本地临时文件
二、ansible的安装部署及免密设置
安装
apt install 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配置文件关键配置介绍
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日志文件路径
ansible的配置,配置主目录/etc/ansible
ansible.cfg为主配置文件。hosts定义了主机组相关的内容。
vi /etc/ansible/ansible.cfg
private_key_file = /root/.ssh/id_rsa #定义ssh信任的文件目录
定义inventory文件(定义主机组)
vi /etc/ansible/hosts
[web]
192.168.163.145
192.168.163.100
4.1 ping模块连通性测试

root@ubuntu:~# ansible web -m ping
192.168.163.145 | FAILED! => {
"changed": false,
"failed": true,
"module_stderr": "",
"module_stdout": "bash: /usr/bin/python: No such file or directory\r\n",
"msg": "MODULE FAILURE",
"parsed": false
}
提示这个目标机器没有安装python环境
4.2 command模块
4.3 shell模块
4.4 copy模块
支持的参数:
src 被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径
content 用于替换"src",可以直接指定文件的内容
dest 将源文件复制到的远程主机的绝对路径
backup 当文件内容发生改变后,在覆盖之前把源文件备份
force 当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设 为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
查看发送过来的文件
4.5 file模块
支持的参数:
group 定义文件/目录的所属组
owner 定义文件/目录的所属用户。后面必须跟上path:定义文件/目录的路径
dest 被链接到的路径,只应用于state=link的情况state 状态,有以下选项:
- directory:如果目录不存在,就创建目录
- file:即使文件不存在,也不会被创建
- link:创建软链接
- hard:创建硬链接
- touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其 最后修改时间
- absent:删除目录、文件或者取消链接文件
4.6 fetch模块
dest
:用来存放文件的目录src
:在远程拉取的文件,并且必须是一个file,不能是目录
4.7 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 :以哪个用户的身份执行
4.8 script模块
该模块用于将本地的一个脚本文件在管理设备上执行,脚本文件需有可执行权限
4.9 apt 和 yum 模块
支持的参数:
name:
安装包名称state:
present:
安装
latest:
安装最新的
absent:
卸载软件
4.10 setup模块
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。