ansible运维自动化

1 环境准备

主机IP192.168.199.149(主配置)

ip1:192.168.199.150

IP2:192.168.199.151

下载ansible:yum -y install epel-release
yum install ansible

2 ansilble介绍

• 模块化:调用特定的模块,完成特定的任务
•Paramiko (Python 对 ssh 的实现 ) , PyYaml , Jinja2( 模板语言 ) 三个关键模块
• 支持自定义模块,可使用任何编程语言写模块
• 基于 Python 语言实现
• 部署简单,基于 python 和 SSH( 默认已安装 ) , agentless ,无需代理不依赖 KPI (无需
SSL )
• 安全,基于 OpenSSH
• 幂等性:一个任务执行 1 遍和执行 n 遍效果一样,不因重复执行带来意外情况
• 支持 playbook 编排任务, YAML 格式,编排任务,支持丰富的数据结构
• 较强大的多层解决方案 role

Ansible工作原理:

把我们执行的命令翻译为 shell 命令,通过 openssh 拷贝到目标主
机 /root/.ansible/tmp/ 下,然后再执行,执行完成后删除 tmp 文件。

ansible命令执行过程

1 . 加载自己的配置文件 默认 /etc/ansible/ansible.cfg
2 . 加载自己对应的模块文件,如 command
3 . 通过 ansible 将模块或命令生成对应的临时 py 文件,
并将该文件传输至远程服务器的对应执行用户
$HOME /.ansible/tmp/ansible-tmp- 数字 /XXX.PY 文件
4 . 给文件 + x 执行
5 . 执行并返回结果
6 . 删除临时 py 文件, sleep 0 退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败

3 模块介绍

运行ansible前先把要目标主机的IP添加到/etc/ansible/hosts中,可以分开加,也可以添加到一个组中,模块名自己命名,执行组名则表示执行所有ip

执行ssh-keygen 把密钥传送到目标主机

ssh-copy-id 192.168.199.150

ssh-copy-id 192.168.199.151

ansible格式为 ansible -m [模块名] -a[模块] [组名]

commond模块(默认模块)

ansible -m command -a 'ls' test 分别在150,151主机上执行ls命令,并将结果显示出来

ansible -m command -a 'echo $HOSTNAME' test 打印test组的用户名

commond模块不支持正则表达式,不支持变量

shell模块

和commond类似,但是支持正则表达式

ansible all -m shell -a 'getenforce' 获取selinux状态

ansible -m shell -a "awk '/db/{print}' /opt/a.txt" test 显示目标主机/opt/a.txt中含有db的行

copy模块

复制本地主机的文件复制到远程主机,src:本地文件路径,dest:目标路径,mode:设置权限,backup:备份源文件

ansible -m copy -a "src=/root/b.txt dest=/opt/" test 把本地b.txt复制到目标主机

fetch模块

从远程主机提取文件到本地,不支持目录,可以先打包,再提取文件

file模块

创建文件,设置文件的权限

path: 要管理的文件路径 (强制添加)
recurse: 递归 , 文件夹要用递归
src: 创建硬链接 , 软链接时 , 指定源目标 , 配合 'state=link' 'state=hard' 设置软链接 , 硬链接
ansible -m file -a "path=/opt/d.txt state=touch" test 在目标主机路径下创建文件

ansible -m file -a "path=/opt/test state=directory" test 在目标主机路径下创建目录

ansible -m file -a "path=/opt/test owner=rsync mode=755" test 目标主机下修改目录的权限和属主

unarchive模块

解包解压缩
1,将 ansible 主机上的压缩包传到远程主机后解压缩至特定目录,设置 copy=yes.
2 、将远程主机上的某个压缩包解压缩到指定路径下,设置 copy=no
src : 源路径,可以是 ansible 主机上的路径,也可以是远程主机上的路径,
如果是远程主机上的路径,则需要设 置 copy = no
dest :远程主机上的目标路径
mode :设置解压缩后的文件权限
ansible websrvs -m unarchive -a 'src=foo.tgz dest=/var/lib/foo'

默认 copy 为 yes , 将本机目录文件解压到目标主机对应目录下

archive****模块

Archive :打包压缩,将远程主机目录打包
path: 指定路径 dest: 指定目标文件 format: 指定打包格式 owner: 指定所属者
mode: 设置权限

Hostname****模块

Hostname :管理主机名

Cron****模块

cron 模块主要用于添加、删除、更新操作系统的 crontab 任务计划
ansible websrvs -m unarchive -a
'src=https://example.com/example.zip dest=/data copy=no' > ansible all -m archive -a 'path=/etc/sysconfig

相关推荐
热爱嵌入式的小许1 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
Pythonliu75 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我5 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
小O_好好学7 小时前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥7 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
john_hjy7 小时前
11. 异步编程
运维·服务器·javascript
x晕x7 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器
活跃的煤矿打工人8 小时前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
tangdou3690986559 小时前
两种方案手把手教你多种服务器使用tinyproxy搭建http代理
运维·后端·自动化运维
北京智和信通9 小时前
云平台和虚拟化智慧运维监控,全面提升故障感知与处置能力
运维·虚拟化·云平台·虚拟机监控