总结:运维自动化之ANSIBLE

本文详细介绍了Ansible的使用,包括环境准备、常用模块如command、shell、file等,以及如何通过ansible-playbook编排任务。此外,还讨论了变量、模板、条件判断和roles的运用,是学习和应用Ansible进行运维自动化的实用教程。
摘要由CSDN通过智能技术生成

etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录

/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具

环境准备
安装配置软件
[root@CentOS7 ~]# yum install ansible
[root@CentOS7 ~]# vim /etc/ansible/ansible.cfg 
host_key_checking = False           #不检查对应服务器的host_key
log_path = /var/log/ansible.log     #日志文件
module_name = shell                 #默认模块(command)修改为shell

[root@CentOS7 ~]# vim /etc/ansible/hosts    #添加管理的主机
[websrvs]
192.168.8.17
192.168.8.27

[appsrvs]
192.168.8.[2:3]7

##创建基于key的验证
[root@CentOS7 ~]# ssh-keygen
[root@CentOS7 ~]# ssh-copy-id 192.168.8.17
[root@CentOS7 ~]# ssh-copy-id 192.168.8.27
[root@CentOS7 ~]# ssh-copy-id 192.168.8.37

ansible-doc
[root@CentOS7 ~]# ansible-doc  -l   列出所有模块
[root@CentOS7 ~]# ansible-doc  user     查看指定模块帮助用法
[root@CentOS7 ~]# ansible-doc -s user    简要列出指定模块帮助用法
   
ansible

ansible [-m module_name] [-a args]
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
–list-hosts 显示主机列表,可简写 --list
-k, --ask-pass 提示输入ssh连接密码,默认Key验证
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户

[root@CentOS7 ~]# ansible all --list-hosts
  hosts (3):
    192.168.8.27
    192.168.8.37
    192.168.8.17
[root@CentOS7 ~]# ansible websrvs -m ping
[root@CentOS7 ~]# ansible 192.168.8.27 -m ping
[root@CentOS7 ~]# ansible all -m ping -k -u wang   

All :表示所有Inventory中的所有主机
* :通配符
: 或关系
:&逻辑与
:!逻辑非

[root@CentOS7 ~]# ansible all --list-hosts
  hosts (3):
    192.168.8.27
    192.168.8.37
    192.168.8.17
[root@CentOS7 ~]# ansible '*' --list-hosts
  hosts (3):
    192.168.8.27
    192.168.8.37
    192.168.8.17
[root@CentOS7 ~]# ansible '192.168.8.*' --list-hosts
  hosts (3):
    192.168.8.27
    192.168.8.17
    192.168.8.37
[root@CentOS7 ~]# ansible "websrvs:appsrvs" --list-hosts   #或
  hosts (3):
    192.168.8.17
    192.168.8.27
    192.168.8.37
[root@CentOS7 ~]# ansible "websrvs:&appsrvs" --list-hosts    #与
  hosts (1):
    192.168.8.27
[root@CentOS7 ~]# ansible "websrvs:!appsrvs" --list-hosts     #非
-bash: !appsrvs": event not found     #双引号报错,!识别成引用历史命令
[root@CentOS7 ~]# ansible 'websrvs:&appsrvs' --list-hosts    #用单引号
  hosts (1):
    192.168.8.27

ansible命令执行过程

  1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
  2. 加载自己对应的模块文件,如command
  3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  4. 给文件+x执行
  5. 执行并返回结果
  6. 删除临时py文件,退出

执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败

常用模块
command

在远程主机执行命令,默认模块
此命令不支持 $VARNAME < > | ; & 等,用shell模块实现,本环境已修改为shell

[root@CentOS7 ~]# ansible websrvs -m command -a 'ls /root'

[root@CentOS7 ~]# ansible websrvs -m command -a 'chdir=/root ls'
[root@CentOS7 ~]# ansible websrvs -m command -a 'creates=/etc/fstab ls /root'   #/fstab存在不运行
[root@CentOS7 ~]# ansible websrvs -m command -a 'creates=/etc/xx ls /root'    #/etc/xx不存在,就运行ls /root
[root@CentOS7 ~]# ansible websrvs -m command -a 'echo $HOSTNAME'      #返回结果错误,不支持$
[root@CentOS7 ~]# ansible websrvs -m command -a 'removes=/data/app ls /root'    #app存在就运行
shell

和command相似,用shell执行命令(本环境默认配置,可以不写m)

[root@CentOS7 ~]# ansible all -a "echo $HOSTNAME"
192.168.8.17 | CHANGED | rc=0 >>
CentOS7.localdomain
[root@CentOS7 ~]# ansible all -a "getenforce"
192.168.8.27 | CHANGED | rc=0 >>
Disabled

script

在远程主机上运行ansible服务器上的脚本

[root@CentOS7 ~]# ansible-doc -s script
[root@CentOS7 ~]# vim test.sh
echo "hello world"
[root@CentOS7 ~]# chmod +x test.sh 
[root@CentOS7 ~]# ansible all -m script -a "/root/test.sh"

copy

从主控端复制文件到远程主机

[root@CentOS7 ~]# ansible websrvs -m copy -a "src=/etc/fstab dest=/data"
[root@CentOS7 ~]# ansible websrvs -a 'ls /data'
[root@CentOS7 ~]# ansible websrvs -m copy -a "src=/etc/fstab dest=/data owner=wang mode=600 backup=yes"    #如目标存在,默认覆盖,此处指定先备份
[root@CentOS7 ~]# ansible websrvs -a "ls /data -l"
192.168.8.27 | CHANGED | rc=0 >>
total 4
-rw------- 1 wang root 595 Jul  4 19:53 fstab

fetch

从远程主机提取文件至主控端,copy相反,目前不支持目录

[root@CentOS7 ~]# ansible  all -m fetch -a "src=/etc/fstab dest=/data"
[root@CentOS7 ~]# tree /data/
/data/
├── 192.168.8.17
│   └── etc
│       └── fstab
├── 192.168.8.27
│   └── etc
│       └── fstab
└── 192.168.8.37
    └── etc
        └── fstab

file

设置文件属性

[root@CentOS7 ~]# ansible all -m file -a "path=/data/fstab owner=wang mode=700"   #修改用户和权限
[root@CentOS7 ~]# ansible all -m file -a "src=/data/fstab path=/data/fstab.link state=link"  #创建软连接
[root@CentOS7 ~]# ansible all -m file -a "src=/data/fstab path=/data/fstab.link state=hard"   #创建硬链接
[root@CentOS7 ~]# ansible all -m file -a "path=/data/fi.txt state=touch"    #创建空文件
[root@CentOS7 ~]# ansible all -m file -a "path=/data/dir state=directory"   #创建目录
[root@CentOS7 ~]# ansible all -m file -a "path=/data/fstab state=absent"    #删除文件

unarchive

解包解压缩,有两种用法
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes.
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

[root@CentOS7 ~]# tar zcvf sysconfig.tar.gz /etc/sysconfig/     #打包
[root@CentOS7 ~]# ansible all -m unarchive -a "src=/root/sysconfig.tar.gz dest=/data owner=wang mode=700"    #传到远程主机解压,修改权限
[root@CentOS7 ~]# ansible all -m file -a "path=/data/etc state=absent"     #删除目录etc

[root@CentOS7 ~]# ansible all -m copy -a "src=/root/sysconfig.tar.gz dest=/data"     #把压缩包考到远程主机
[root@CentOS7 ~]# ansible all -m copy -a "m unarchive -a "src=/data/sysconfig.tar.gz dest=/data owner=wang mode=700 copy=no"    #解压(远程主机已有文件)
[root@CentOS7 ~]# ansible all -a "ls /data -l"   #显示

archive

打包压缩

[root@CentOS7 ~]# ansible all -m archive -a 'path=/etc/sysconfig dest&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值