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命令执行过程
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
- 给文件+x执行
- 执行并返回结果
- 删除临时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&#