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

相关推荐
Linux蓝魔3 分钟前
外网同步麒麟源到内网搭建,包含桌面和服务器版本
linux·运维·服务器
heze095 分钟前
sqli-labs-Less-14自动化注入方法
mysql·网络安全·自动化
什么都不会的Tristan23 分钟前
网关登录校验
运维·服务器·网络
Apex Predator26 分钟前
gitlab备份与恢复
运维·gitlab
梦想的旅途228 分钟前
企微API开发:外部群高效自动化推动消息
运维·自动化·企业微信
馨谙31 分钟前
linux面试题-----重定向,管道,tee,vim,shell,path,/etc/profile
linux·运维·服务器
~黄夫人~33 分钟前
Linux中常见的离线安装方式(Ubuntu和CentOS)
linux·运维·服务器·常见问题·下载安装
JH307337 分钟前
openfeign vs nginx 负载均衡对比
运维·nginx·负载均衡
未定义.22138 分钟前
第7篇:跨端拓展!Playwright+Appium实现Web+移动端全覆盖
python·ui·appium·自动化·jenkins·pytest
The Chosen One98540 分钟前
【Linux】从底层架构到调试工具:Linux GDB与冯·诺依曼模型的详解
linux·运维·服务器