Linux下ansible使用
一、ansible的功能和意义
1、功能
1 2 3 4 5 | ansible批量功能 ----------------------> 并行<br> 01. 可以实现批量系统操作配置 02. 可以实现批量软件服务部署 03. 可以实现批量文件数据分发 04. 可以实现批量系统信息收集 |
2、意义
1 2 3 4 | 01. 提高工作的效率 02. 提高工作准确度 03. 减少维护的成本 04. 减少重复性工作 |
二、ansible的特点
1 2 3 | 1. 没有配置文件(不需要配置) 2. 不需要启动服务 3. 客户端不需要部署任务 |
三、ansible和相似的软件对比
和ansible相似的软件:saltstack
saltstack也是自动化批量管理软件。
但是saltstack比较复杂,软件服务比较重。
四、ansible安装
yum安装(需要epel源):
1 | yum -y install epel-release |
1 | yum install -y ansible |
五、ansible基本使用(默认是以root用户执行,但是基于ssh连接操作要多次输入密码,为方便可以使用基于ssh密钥方式进行认证)
1、ansible主要配置文件
1 2 3 | (1) ansible应用程序的主配置文件: /etc/ansible/ansible .cfg (2) Host Inventory定义管控主机: /etc/ansible/hosts |
2、ansible应用程序命令
1 2 3 4 | ansible-doc 命令:获取模块列表,及模块使用格式; ansible-doc -l:获取模块列表 ansible-doc -s module_name:获取指定模块的使用信息 |
ansible的命令格式可以理解为(ansible还有很多参数):
1 | ansible 主机信息(IP 主机组 all ...) -m (模块名) command -a "操作动作" |
3、ansible执行命令返回信息的颜色的含义
(1)绿色:执行成功
(2)黄色:执行成功并且状态发生了改变
(3)红色:执行失败
提示:可以在ansible.cfg中进行定制颜色的设定
六、ansible主机清单功能模块(指定可以管理哪些主机)
1、主机清单配置方式:
方式1:直接把IP写在配置文件中
方式2:指定分组
1 2 3 4 5 6 | [oldboy] 172.16.1.41 172.16.1.31 [oldgirl] 172.16.1.7 |
方式3:支持主机名符号匹配配置
1 2 3 | [oldboy] 172.16.1.[1:50] web[01:03] |
方式4:支持内置变量信息配置
1 2 3 4 5 | [oldboy] 172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22 [oldboy] 172.16.1.7 ansible_user=root ansible_password=123456 ansible_port=22 |
方式5:支持特殊变量信息配置 (剧本)
1 2 3 4 5 6 7 | [oldboy] 172.16.1.7 [oldboy:vars] ansible_user=root ansible_password=123456 ansible_port=22 |
方式6:嵌入式配置方法
1 2 3 4 5 6 7 8 9 | [backup:children] backupclient backupserver [backupclient] 172.16.1.7 ansible_user=root ansible_password=123456 172.16.1.31 [backupserver] 172.16.1.41 |
2、ansible命令指定管理的主机方式
ansible命令后面指定要管理的主机,all表示主机清单里面的全部主机,也可指定主机清单里面的分组名等。
七、ansible的模块使用(以下列举的是一些常用的模块)
1、ping模块
2、command模块 :命令模块=========在目标主机执行命令
参数:
1 2 3 4 | chdir: 在执行命令前,先切换目录信息 creates: 判断一个文件是否存在,如果存在,后面命令被跳过(不执行) removes: 判断一个文件是否存在,如果存在,后面命令就执行 free_form:在使用 command 模块时候必须输入一个合法的linux命令 |
基本用法:
1 2 3 4 5 6 7 8 9 | [root@m01 ansible] # ansible backup -m command -a "hostname" 172.16.1.31 | CHANGED | rc=0 >> nfs01 172.16.1.41 | CHANGED | rc=0 >> backup 172.16.1.7 | CHANGED | rc=0 >> web01 |
特殊用法:
1 2 3 4 5 6 7 8 9 10 | chdir 参数: [root@m01 ansible] # ansible backup -m command -a "chdir=/tmp pwd" 172.16.1.31 | CHANGED | rc=0 >> /tmp 172.16.1.7 | CHANGED | rc=0 >> /tmp 172.16.1.41 | CHANGED | rc=0 >> /tmp |
1 2 3 4 5 6 7 8 | creates 参数: [root@m01 tmp] # ansible backup -m command -a "creates=/etc/oldboy.txt touch /opt/oldboy.txt" 172.16.1.41 | CHANGED | rc=0 >> 172.16.1.7 | SUCCESS | rc=0 >> skipped, since /etc/oldboy .txt exists 172.16.1.31 | CHANGED | rc=0 >> |
3、shell模块:万能模块==========在目标主机执行命令
1 2 3 4 5 6 | chdir: 在执行命令前,先切换目录信息 creates: 判断一个文件是否存在,如果存在,后面命令被跳过(不执行) removes: 判断一个文件是否存在,如果存在,后面命令就执行 free_form:在使用 command 模块时候必须输入一个合法的linux命令 可以识别一些特殊字符 < > | ; $<br> 提示:shell模块虽然是万能模块,但最好选择专业的模块完成专业事情 |
例如:
1 | ansible backup -m shell -a "rpm -qa iftop" |
4、script模块:命令模块==========执行脚本
例如:
1 | ansible backup -m script -a "/server/scripts/yum.sh" |
5、copy模块:=============批量分发文件
作用:
1 2 3 | 01. 分发文件数据信息 从管理端 -- 被管理端 02. 修改文件权限属性信息 03. 移动远程主机数据信息 被管理端 -- /tmp/oldboy .txt --- /opt/ |
1 2 3 4 5 6 7 8 9 | 参数: src: 指定要推送的数据信息 dest:指定数据保存在远程主机什么目录中 mode:修改文件权限信息 owner:修改文件属主信息 group:修改文件属组信息 backup: 分发文件数据时,会对源文件进行备份 remote_src: 复制远程主机文件到其他路径,或者进行远程主机数据备份 content: 直接编辑文件内容 |
基本用法:
1 | ansible backup -m copy -a "src=/etc/hosts dest=/etc/" |
特殊用法:
传输文件时,修改文件权限:
1 | ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.bak mode=600 owner=oldboy666 group=oldboy666" |
分发文件时,对源文件进行备份:
1 | ansible backup -m copy -a "src=/etc/hosts dest=/etc/ backup=yes" |
远程主机文件进行复制备份(便于批量还原):
1 | ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.backup remote_src=yes" |
批量还原:
1 | ansible backup -m copy -a "src=/etc/hosts.backup dest=/etc/hosts remote_src=yes" |
直接编辑文件信息,并且进行批量分发:
1 | ansible backupclient -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600" |
6、fetch模块:===================批量拉取文件
1 | ansible 172.16.1.7 -m fetch -a "src=/etc/oldgirl.txt dest=/tmp" |
7、file模块:
作用:
01. 修改文件权限信息
02. 创建数据信息/删除数据信息
基本用法:修改文件权限
1 | ansible 172.16.1.7 -m file -a "path=/etc/oldgirl.txt mode=666 owner=oldboy666 group=oldboy666" |
特殊用法:创建数据信息
1 2 3 4 5 6 7 | 参数:state absent -- 删除数据信息 directory -- 创建目录 file ← hard -- 创建硬链接 link -- 创建软链接 touch -- 创建文件 |
创建文件:
1 | ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy.txt state=touch" |
创建目录:
1 | ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir state=directory" |
删除文件数据:
1 | ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir/oldboy_soft_link state=absent" |
8、cron模块:定时任务模块=========批量添加设置定时任务信息
1 2 3 4 5 6 | 参数: minute hour day month weekday --- 时间参数 job -- 指定定时任务信息 name -- 添加注释信息 state -- absent 删除定时任务 present 添加定时任务 disabled -- 注释定时任务 yes 取消定时任务注释 no |
每隔5分钟,时间同步:
1 | ansible backup -m cron -a "name='date ntpdate crond02' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'" |
批量删除定时任务信息:
1 | ansible backup -m cron -a "name='date ntpdate crond' state=absent" |
批量注释定时任务信息:
1 | ansible backup -m cron -a "name='date ntpdate crond' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes" |
9、yum模块:批量下载安装软件
1 2 3 | 参数: name: 指定软件名称 state: 指定动作信息 installed |
1 | ansible backup -m yum -a "name=nmap state=installed" |
10、service模块:管理服务状态模块
作用:批量启动/停止服务程序 设置服务是否开机自动启动
1 2 3 4 | 参数: name: 定义服务名称 state: 是否启动 started 停止 stopped 重启 restarted 平滑重启 reloaded enabled:设置服务是否开机自动启动 |
1 2 3 | ansible backup -m service -a "name=firewalld state=started enabled=yes" ansible backup -m service -a "name=firewalld state=stopped enabled=no" |
11、user模块:用户管理
1 2 3 4 5 6 7 8 | 参数 name 创建的用户名称 uid 指定用户的uid信息 group 指定属于主要组 groups 指定属于哪个附属组 password 设置用户密码信息??? shell 指定登录方式 /bin/bash /sbin/nologin create_home: |
创建虚拟用户:
1 | ansible backup -m user -a "name=Alex uid=250 group=root groups=oldboy shell=/sbin/nologin create_home=no" |
12、mount模块:挂载
1 2 3 4 5 6 7 8 9 | 参数: src:需要挂载存储设备信息 path: 挂载点路径信息 fstype:挂载类型信息 state:挂载操作(mounted present)/卸载操作(unmounted absent) mounted:可以实现立即挂载 永久开机自动挂载 present:永久开机自动挂载 unmounted:可以实现立即卸载 absent:可以实现立即卸载 永久卸载 |
批量挂载:
1 | ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted" |
八、ansible剧本
1、具体的编写规范
(1)python yaml 语法规范
(2)规范位置
1 2 3 | mkdir /etc/ansible/ansible_playbook vim /etc/ansible/ansible_playbook/test .yaml |
(3)语法规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 规则一:缩进 yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键 规则二:冒号 CMD= "echo" yaml: mykey: 每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格) 规则三:短横线 想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分 |
核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab的
2、剧本的执行方式
(1)检查剧本的语法
1 | ansible-playbook --syntax-check test .yaml |
(2)剧本模拟执行
1 | ansible-playbook -C test .yaml |
(3)正式执行剧本
1 | ansible-playbook test .yaml |
3、ansible剧本的编写
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现