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

相关推荐
C-cat.20 分钟前
Linux|环境变量
linux·运维·服务器
yunfanleo35 分钟前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
烦躁的大鼻嘎1 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师1 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char1 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾1 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
传而习乎2 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary2 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
qq_383139843 小时前
ansible playbook安装nacos
ansible
运维&陈同学4 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列