目录
一:ansible核心模块
1、主机连通性测试
我们使用ansible xxx -m ping
命令来进行主机连通性测试(xxx是主机的组名),效果如下:
[root@kafka-1 ansible]# vim /etc/ansible/hosts
# Ex 2: A collection of hosts belonging to the 'webservers' group
[webservers] #webservers为xxx
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
192.168.149.152
192.168.149.153
[root@kafka-1 ansible]# ansible webservers -m ping
192.168.149.152 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.149.153 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
2、command模块
command模块可以直接在远程主机上执行命令,并将结果返回主机。如下:
[root@kafka-1 ansible]# ansible webservers -m command -a "ip a"
192.168.149.152 | CHANGED | rc=0 >>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:75:96:ae brd ff:ff:ff:ff:ff:ff
inet 192.168.149.152/24 brd 192.168.149.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::7f6a:2f24:7ab1:fd87/64 scope link noprefixroute
valid_lft forever preferred_lft forever
192.168.149.153 | CHANGED | rc=0 >>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:bf:e4:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.149.153/24 brd 192.168.149.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::a92b:91d7:cb23:cb92/64 scope link noprefixroute
valid_lft forever preferred_lft forever
在远程主机上执行命令,属于裸执行,非键值对显示;不进行shell解析、 不会解析它的管道符号 会认为ifconfig|grep 是一个命令。该模块还有如下几个命令:
chdir # 在执行命令之前,先切换到该目录
executable # 切换shell来执行命令,需要使用命令的绝对路径
free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。
creates # 一个文件名,当这个文件存在,则该命令不执行,可以
用来做判断
removes # 一个文件名,这个文件不存在,则该命令不执行
[root@kafka-1 ansible]# ansible webservers -m command -a "chdir=/opt/ ls"
192.168.149.153 | CHANGED | rc=0 >>
apache-zookeeper-3.6.3-bin
apache-zookeeper-3.6.3-bin.tar.gz
dist
dist1
kafka_2.12-2.8.1
kafka_2.12-2.8.1.tgz
192.168.149.152 | CHANGED | rc=0 >>
apache-zookeeper-3.6.3-bin
apache-zookeeper-3.6.3-bin.tar.gz
celery_task
dist
dist1
kafka_2.12-2.8.1
kafka_2.12-2.8.1.tgz
3、shell模块
shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。
[root@kafka-1 ansible]# ansible webservers -m shell -a "cat /etc/passwd|grep bash"
192.168.149.152 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
192.168.149.153 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
只要是我们的shell命令,都可以通过这个模块在远程主机上运行。
4、copy模块
这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限。其相关选项如下:
src #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync"
content #用于替换"src",可以直接指定文件的值
dest #必选项,将源文件复制到的远程主机的绝对路径
backup #当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
directory_mode #递归设定目录的权限,默认为系统默认权限
force #当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
others #所有的 file 模块中的选项可以在这里使用
注意:#####src目录后面带/和不带/的区别
#带/ 表示拷贝目录下的子文件或者子文件夹
#不带/ 表示拷贝整个目录
带/---同时如果目的主机没有文件夹,会被新建
[root@kafka-1 lianxi]# ansible webservers -m copy -a "src=/lianxi/ dest=/lianxi1"
192.168.149.152 | CHANGED => {
"changed": true,
"dest": "/lianxi1/",
"sr