概述:

        博主不再对ansible的安装,部署,以及一些理论,基础知识做介绍,只针对于比较急切需要通过ansible去实现批量处理任务的伙伴,话不多说,直接上干货。

配置干货:

ansible添加组:

vi /etc/ansible/hosts

格式如下:

        组名:[test]

        ip或者hostname

        ip或者hostname

        ip或者hostname

示例:

ansible unarchive 解压到指定目录 ansible chmod_python

补充一种常见情况:

无权限问题:

ansible unarchive 解压到指定目录 ansible chmod_服务器_02

        (1)有时候远端机器禁止使用root远程登陆,但是需要ansible来实现切换用户文件分发。

        (2)无root用户操作权限的时候,如何使用普通用户来在远端服务器没有root权限的目录来执行一些例如mkdir,chmod等等的一些操作命令,并且不用反复输入密码。

        (3)普通用户想执行sudo权限。

最简单的解决方法:

(1)修改ansible.cfg文件

             将become前两行注释取消

vi /etc/ansible/ansible.cfg


[test-abc]
become=True
become_method=sudo
#become_user=root
#become_ask_pass=False

(2)修改ansible的hosts文件

vi /etc/ansible/hosts


# 组配置写成例如以下样子
[singapore-idc]
10.128.1.88  ansible_ssh_user=test ansible_ssh_pass='test123' ansible_become_pass='test123'

(3)服务器安装sshpass工具

# ubuntu
sudo apt-get install  sshpass

# centos
yum intall sshpass

(4)执行ansible命令

# 修改前
test@zzz:~$ ansible test -m shell -a "mkdir -p  /root/ansible/test"
200.151.223.1 | FAILED | rc=1 >>
mkdir: 无法创建'/root/ansible/test': 权限不够

# 未安装sshpass
test@zzz:~$ ansible test -m shell -a "mkdir -p  /root/ansible/test"
"200.151.223.1 | FAILED | rc=0 >>
ERROR! to use the 'ssh' connection type with passwords, you must install the sshpass program


# 安装并修改后
test@zzz:~$ ansible test -m shell -a "mkdir -p  /root/ansible/test"
200.151.223.1 | SUCCESS | rc=0 >>

示例:

ansible unarchive 解压到指定目录 ansible chmod_linux_03

操作干货:

(1)ansible批量分发文件到远端服务器--copy模块

参数:

        src:要拷贝的目录以及文件

        dest:远端服务器保存文件的目录

        owner:文件属主

        group:文件属组

        mode:文件权限

命令演示:

ansible -i /etc/ansible/hosts test -m copy -a "src=/tmp/zabbix_agent-5.0.17-linux-4.12-ppc64le-static.tar.gz dest=/home/adm_chaowu.zhang/ owner=root group=root mode=0777"

(2)ansible在远端服务器解压文件--unarchive模块

两种用法:

1、将ansible主机上的压缩包在本地解压缩后传到远端服务器上,这种情况下,copy=yes,本地解压缩,解压缩位置不是默认的目录

2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no ,远程主机上面的操作,不涉及ansible服务端

参数:

        copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件

        src:源路径,可以是ansible主机上的路径,也可以是远端服务器上的路径,如果是远端服务器上的路径,则需要设置copy=no

        dest:远程主机上的目标路径

        mode:设置解压缩后的文件权限

命令演示:

ansible -i test -m unarchive -a 'src=/etc/bin/zabbix_agent.tar.gz dest=/usr/local copy=no mode=0755'

或者不太理解或者不想用直接走shell命令的方式

命令演示:

ansible -i /etc/ansible/hosts test -m shell  "tar -zxvf /etc/bin/zabbix_agent.tar.gz  -C   /usr/local"

(3)ansible在远端服务器执行命令--shell模块(最常用)

命令演示:

ansible -i /etc/ansible/hosts check17662042 -m shell -a "chmod 755 /var/log/messages"

(4)ansible批量杀掉远端服务器应用进程--shell模块

命令演示:

ansible test -m shell -a "ps -ef | grep zabbix |grep -v grep |awk '{print \$2}' | xargs kill -9"

示例:

ansible unarchive 解压到指定目录 ansible chmod_解压缩_04