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

相关推荐
_.Switch34 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_8504108335 分钟前
文件系统和日志管理
linux·运维·服务器
JokerSZ.39 分钟前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代1 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方2 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘2 小时前
NFS服务器
运维·服务器
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰3 小时前
[linux]docker基础
linux·运维·docker
Jason-河山4 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
lihuhelihu4 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算