ad-hoc(点对点)常用模块
1. 设置主机清单
定义hosts 有3类:
Ex 1:未分组的主机,在任何组头之前指定
Ex 2:有组的主机,一组属于"webservers"组的主机
Ex 3:和数据库有关的,"dbservers"组中的数据库服务器集合
在最底部写入远程主机的IP地址:
2. ping 模块,主机连通性测试
[root@ansibale~]#ansible all -m ping 尝试ping对方主机地址,由于是基于key验证,此时已经不需要输入密码。192.168.34.102 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}192.168.34.103 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}192.168.34.105 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}
3. Command 模块
介绍
命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行,(此时command模块是默认模块,可忽略-m选项)。
它不会通过shell进行处理,比如$HOME和操作如"小于"<",">",“|”, “;”,"&"’ 工作(需要使用(shell)模块实现这些功能)。
选项
chdir# 在执行命令之前,先切换到该目录creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断removes # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断executable # 切换shell来执行命令,需要使用命令的绝对路径(不常用,常用下面shell 模块)free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替(不常用,常用下面shell 模块)
实例
ansible webs-m command-a ‘chdir=/datals’
[root@ansibaledata]#ansible webs -m command -a "chdir=/data ls" 可以切换到data目录下执行ls命令192.168.34.103 | CHANGED | rc=0 >>f1192.168.34.102 | CHANGED | rc=0 >>f2lost+found
ansible webs -m command -a ‘creates=/data/f1 touch /data/f2’
[root@ansibaledata]#ansible webs -m command -a "creates=/data/f1 touch /data/f1" #在webs组主机里,如果两个主机data下都有f1,就不会在data下创建f1[WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use commandbecause file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' inansible.cfg to get rid of this message.192.168.34.102 | CHANGED | rc=0 >>192.168.34.103 | SUCCESS | rc=0 >>skipped, since /data/f1 exists[root@ansibaledata]#ansible webs -m command -a "chdir=/data ls" #IP102的主机data下没有f1,就会创建f1.192.168.34.102 | CHANGED | rc=0 >>f1f2lost+found192.168.34.103 | CHANGED | rc=0 >>f1
ansible webs -m command -a ‘removes=/data/f1 touch /data/f2’ data下有f1文件就会创建f2文件
[root@ansibaledata]#ansible webs -a "removes=/data/f1 touch /data/f2" #如果有f1文件就会进行创建f2[WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use commandbecause file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' inansible.cfg to get rid of this message.192.168.34.102 | CHANGED | rc=0 >>192.168.34.103 | CHANGED | rc=0 >>[root@ansibaledata]#ansible webs -a "chdir=/data/ ls" 查询之前有f1,此时已经查到创建f2的结果192.168.34.102 | CHANGED | rc=0 >>f1f2192.168.34.103 | CHANGED | rc=0 >>f1f2
4. shell 模块
shell模块在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道、echo等
在配置文件中将模块进行修改,就不需要输入-m shell选项,修改位置:
$ vim /etc/ansible/ansible.cfgmodule_name = shell
实例:
ansible webs -m shell -a ‘cat /etc/passwd |grep root’
[root@ansibaledata]#ansible webs -m shell -a "getent passwd | grep root"192.168.34.102 | CHANGED | rc=0 >>root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin192.168.34.103 | CHANGED | rc=0 >>root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin[root@ansibaledata]#ansible webs -a "getent passwd | grep root" 由于是默认的shell模块,不需要加-m shell192.168.34.102 | CHANGED | rc=0 >>root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin192.168.34.103 | CHANGED | rc=0 >>root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
5. script 模块
在指定节点运行服务端的脚本
示例,书写脚本:
[root@Ansible ~]#vim test.sh#/bin/bashtouch /data/test #创建/data/testdf -h >> /data/test #将df内容追加到/data/test文件中
测试效果
$ ansible webs -m script -a '/data/test.sh' # 在远程被控制的机器执行脚本$ ansible webs -m command -a "chdir=/data ls" # 查看文件生成$ ansible webs -m shell -a "cat /data/test # 查看文件内容正确
执行脚本:
[root@ansibaledata]#ansible webs -m script -a "/data/test.sh" 通过脚本创建文件及追加文件内容192.168.34.102 | CHANGED => {"changed": true,"rc": 0,"stderr": "Shared connection to 192.168.34.102 closed.\r\n","stderr_lines": ["Shared connection to 192.168.34.102 closed."],"stdout": "","stdout_lines": []}192.168.34.103 | CHANGED => {"changed": true,"rc": 0,"stderr": "Shared connection to 192.168.34.103 closed.\r\n","stderr_lines": ["Shared connection to 192.168.34.103 closed."],"stdout": "","stdout_lines": []}[root@ansibaledata]#ansible webs -m command -a "chdir=/data/ cat test" 查询test文件内容192.168.34.102 | CHANGED | rc=0 >>FilesystemSize Used Avail Use% Mounted on/dev/sda2 96G 913M 91G 1% /tmpfs 743M0 743M 0% /dev/shm/dev/sda1 976M 33M 892M 4% /boot/dev/sda3 48G 52M 46G 1% /data192.168.34.103 | CHANGED | rc=0 >>FilesystemSize Used Avail Use% Mounted on/dev/sda2 100G 1.2G 99G 2% /devtmpfs 791M0 791M 0% /devtmpfs 802M0 802M 0% /dev/shmtmpfs 802M 9.6M 792M 2% /runtmpfs 802M0 802M 0% /sys/fs/cgroup/dev/sda3 50G 33M 50G 1% /data/dev/sda11014M 127M 888M 13% /boottmpfs 161M0 161M 0% /run/user/0
6. copy模块
copy:复制文件到远程主机,可以改权限等
用法:
复制文件 -a "src= dest=" 给定内容生成文件 -a "content= dest="
相关选项如下:
src:源,被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。dest:目标,必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录backup:被管理的远程主机已经有文件了,在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|nocontent:用于替代“src”,可以直接设定指定文件的值directory_mode:递归设定目录的权限,默认为系统默认权限force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yesothers:所有的file模块里的选项都可以在这里使用
示例:
[root@ansibaledata]#ansible all -m copy -a "src=/etc/issue dest=/data/fstab owner=nobody mode=600 backup=yes" 将src(源)/etc/issue文件复制到dest(目标)的data目录下,起名叫fstab,所有者为nobody,权限为600,如果有此文件,进行备份。192.168.34.102 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"backup_file": "/data/fstab.23704.-11-04@15:19:19~","changed": true,"checksum": "5c76e3b565c91e21bee303f15c728c71e6b39540","dest": "/data/fstab","gid": 0,"group": "root","md5sum": "f078fe086dfc22f64b5dca2e1b95de2c","mode": "0600","owner": "nobody","size": 23,"src": "/root/.ansible/tmp/ansible-tmp-1572851957.62-86571596767189/source","state": "file","uid": 99}192.168.34.103 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"backup_file": "/data/fstab.21512.-11-04@23:19:19~","changed": true,"checksum": "5c76e3b565c91e21bee303f15c728c71e6b39540","dest": "/data/fstab","gid": 0,"group": "root","md5sum": "f078fe086dfc22f64b5dca2e1b95de2c","mode": "0600","owner": "nobody","size": 23,"src": "/root/.ansible/tmp/ansible-tmp-1572851957.67-211672525698804/source","state": "file","uid": 99}192.168.34.105 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"backup_file": "/data/fstab.5430.-11-04@15:19:17~","changed": true,"checksum": "5c76e3b565c91e21bee303f15c728c71e6b39540","dest": "/data/fstab","gid": 0,"group": "root","md5sum": "f078fe086dfc22f64b5dca2e1b95de2c","mode": "0600","owner": "nobody","size": 23,"src": "/root/.ansible/tmp/ansible-tmp-1572851957.69-65920362365645/source","state": "file","uid": 99}[root@ansibaledata]#ansible all -m shell -a "ls -l /data/" 查看复制后的结果。192.168.34.102 | CHANGED | rc=0 >>total 12-rw-r--r-- 1 root root 0 Nov 4 14:35 f1-rw-r--r-- 1 root root 0 Nov 4 14:35 f2-rw------- 1 nobody root 23 Nov 4 15:19 fstab-rw------- 1 nobody root 595 Nov 4 15:16 fstab.23704.-11-04@15:19:19~ 此文件为备份文件-rw-r--r-- 1 root root 224 Nov 4 14:58 test192.168.34.105 | CHANGED | rc=0 >>total 20-rw------- 1 nobody root 23 Nov 4 15:19 fstab-rw------- 1 nobody root 595 Nov 4 15:16 fstab.5430.-11-04@15:19:17~ 此文件为备份文件drwxr-xr-x 7 root root 4096 Oct 29 15:51 fullisodrwxr-xr-x 4 root root 4096 Oct 29 14:17 iso-rw-r--r-- 1 root root 1400 Oct 30 20:14 ks7_mini.cfg192.168.34.103 | CHANGED | rc=0 >>total 12-rw-r--r-- 1 root root 0 Nov 4 22:35 f1-rw-r--r-- 1 root root 0 Nov 4 22:35 f2-rw------- 1 nobody root 23 Nov 4 23:19 fstab-rw------- 1 nobody root 595 Nov 4 23:16 fstab.21512.-11-04@23:19:19~ 此文件为备份文件-rw-r--r-- 1 root root 413 Nov 4 22:58 test
copy复制目录:
[root@ansibaledata]#ansible webs -m copy -a "src=/data dest=/data/newdata" 复制/data/下的目录,并起名叫newdata192.168.34.102 | CHANGED => {"changed": true,"dest": "/data/newdata/","src": "/data"}192.168.34.103 | CHANGED => {"changed": true,"dest": "/data/newdata/","src": "/data"}[root@ansibaledata]#ansible webs -m shell -a "ls -l /data/"192.168.34.102 | CHANGED | rc=0 >>total 16drwxr-xr-x 3 root root 4096 Nov 4 15:27 newdata-rw-r--r-- 1 root root 224 Nov 4 14:58 test192.168.34.103 | CHANGED | rc=0 >>total 12drwxr-xr-x 3 root root 18 Nov 4 23:27 newdata-rw-r--r-- 1 root root 413 Nov 4 22:58 test
content用法:
[root@ansibaledata]#ansible all -m copy -a 'content="[test]\nbaseurl=file:///mnt\ngpgcheck=0" dest=/etc/yum.repos.d/test.repo' 对被控制端进行新建yum源,并起名叫test.repo[root@ansibaledata]#ansible all -m shell -a "ls /etc/yum.repos.d/" 查看新建的yum源文件192.168.34.103 | CHANGED | rc=0 >>test.repo192.168.34.102 | CHANGED | rc=0 >>test.repo192.168.34.105 | CHANGED | rc=0 >>base.repotest.repo[root@ansibaledata]#ansible all -m shell -a "cat /etc/yum.repos.d/test.repo" 查询新建的yum源文件内容192.168.34.102 | CHANGED | rc=0 >>[test]baseurl=file:///mntgpgcheck=0192.168.34.103 | CHANGED | rc=0 >>[test]baseurl=file:///mntgpgcheck=0192.168.34.105 | CHANGED | rc=0 >>[test]baseurl=file:///mntgpgcheck=0
7. fetch 模块
介绍
从远程某主机获取文件到本地
dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile
在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile
Src:在远程拉取的文件,并且必须是一个file,不能是目录
注意:从远程获取到本地的文件,会保存到以远程主机的IP 为名的目录中,且保存目录结构
示例:
[root@ansibaledata]#ansible webs -m fetch -a "src=/etc/hosts dest=/data" 将远处的/etc/hosts文件复制到本机的/data/目录下[root@ansibaledata]#ll 复制的文件目录以IP地址形式显示total 48-rw-r---w- 1 root root 90 Nov 3 22:05 1drwxr-xr-x 3 root root 17 Nov 4 15:43 192.168.34.102drwxr-xr-x 3 root root 17 Nov 4 15:43 192.168.34.103[root@ansibaledata]#tree 查看复制过来的文件.├── 1├── 192.168.34.102│ └── etc│ └── hosts├── 192.168.34.103│ └── etc│ └── hosts
[root@ansibaledata]#ansible webs -m shell -a "tar -cvf /root/data.tar /data" 可以将data目录下的文件打包到root下起名叫data.tar 打包之后就可以用fetch复制此打包文件。[WARNING]: Consider using the unarchive module rather than running 'tar'. If you need to use command becauseunarchive is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' inansible.cfg to get rid of this message.[root@ansibaledata]#ansible webs -m shell -a "ls -l /root/" 查看root下的打包文件192.168.34.102 | CHANGED | rc=0 >>total 68-rw-------. 1 root root 1125 Nov 2 23:04 anaconda-ks.cfg-rw-r--r-- 1 root root 30720 Nov 4 15:50 data.tar-rw-r--r--. 1 root root 16911 Nov 2 23:04 install.log-rw-r--r--. 1 root root 5820 Nov 2 23:03 install.log.syslog-rw-r--r-- 1 root root 420 Nov 4 14:56 test192.168.34.103 | CHANGED | rc=0 >>total 44-rw-------. 1 root root 1636 Nov 3 07:08 anaconda-ks.cfg-rw-r--r-- 1 root root 30720 Nov 4 23:50 data.tar-rw-------. 1 root root 1385 Nov 3 07:08 original-ks.cfg-rw-r--r-- 1 root root 740 Nov 4 22:56 test
8. file 模块
设置文件属性
创建目录:-a “path=state=directory”创建链接文件:-a “path= src=state=link”删除文件:-a “path=state=absent”
实例:
ansible webs -m file -a “path=/data/f4 state=directory” 在被控制端,创建f4 目录
force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|nogroup:定义文件/目录的属组 mode:定义文件/目录的权限owner:定义文件/目录的属主 path:必选项,定义文件/目录的路径recurse:递归设置文件的属性,只对目录有效 src:被链接的源文件路径,只应用于state=link的情况dest:被链接到的路径,只应用于state=link的情况state=:directory:如果目录不存在,就创建目录file:即使文件不存在,也不会被创建link:创建软链接hard:创建硬链接touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间absent:删除目录、文件或者取消链接文件
ansible webs -m command -a “chdir=/data ls” 查看/data 目录
[root@ansibaledata]#ansible webs -m file -a "path=/data/f4 state=directory" 在data目录下新建f4目录[root@ansibaledata]#ansible webs -m command -a "chdir=/data ls -l" 查询新建的结果192.168.34.102 | CHANGED | rc=0 >>total 20-rw-r--r-- 1 root root 0 Nov 4 14:35 f1-rw-r--r-- 1 root root 0 Nov 4 14:35 f2drwxr-xr-x 2 root root 4096 Nov 4 16:12 f4 新建的f4目录192.168.34.103 | CHANGED | rc=0 >>total 12-rw-r--r-- 1 root root 0 Nov 4 22:35 f1-rw-r--r-- 1 root root 0 Nov 4 22:35 f2drwxr-xr-x 2 root root 6 Nov 5 00:12 f4 新建的f4目录
示例:
删除目录下的文件
ansible webs -m file -a “path=/data/f4 state=absent” 删除data目录下的f4
ansible webs -m file -a “path=/data/ state=absent” 删除data目录下的文件
[root@ansibaledata]#ansible webs -m file -a "path=/data/f4 state=absent" 删除data目录下的f4[root@ansibaledata]#ansible webs -m command -a "chdir=/data ls -l" 查看此时data目录下已经没有f4目录192.168.34.102 | CHANGED | rc=0 >>total 16-rw-r--r-- 1 root root 0 Nov 4 14:35 f1-rw-r--r-- 1 root root 0 Nov 4 14:35 f2192.168.34.103 | CHANGED | rc=0 >>total 12-rw-r--r-- 1 root root 0 Nov 4 22:35 f1-rw-r--r-- 1 root root 0 Nov 4 22:35 f2
示例;
创建软链接和硬链接
ansible webs -m file -a “src=/data/fstab path=/data/fstab.link state=link” 将/data/fstab 创建软链接为/data/fstab.link
ansible webs -m file -a “src=/data/fstab path=/data/fstab1.link state=hard” 将/data/fstab创建硬链接为/data/fstab1.link
1、创建软链接:
[root@ansibaledata]#ansible webs -m file -a "src=/data/fstab path=/data/fstab.link state=link" 192.168.34.102 | CHANGED => {[root@ansibaledata]#ansible webs -m shell -a "ls -l /data/"192.168.34.102 | CHANGED | rc=0 >>total 16lrwxrwxrwx 1 root root 11 Nov 4 16:24 fstab.link -> /data/fstab 创建成功的软链接192.168.34.103 | CHANGED | rc=0 >>total 12lrwxrwxrwx 1 root root 11 Nov 5 00:24 fstab.link -> /data/fstab 创建成功的软链接
2、创建硬链接:
[root@ansibaledata]#ansible webs -m file -a "src=/data/fstab path=/data/fstab1.link state=hard"[root@ansibaledata]#ansible webs -m shell -a "ls -l /data/"192.168.34.102 | CHANGED | rc=0 >>total 20-rw------- 2 nobody root 23 Nov 4 15:19 fstab-rw------- 2 nobody root 23 Nov 4 15:19 fstab1.link192.168.34.103 | CHANGED | rc=0 >>total 16-rw------- 2 nobody root 23 Nov 4 23:19 fstab-rw------- 2 nobody root 23 Nov 4 23:19 fstab1.link
9. hostname:管理主机名
示例:
ansible 192.168.34.102 -m hostname -a “name=centos102” 修改为centos102
ansible 192.168.34.102 -a “hostname” 查看当前修改后的主机名
[root@ansibaledata]#ansible 192.168.34.102 -m hostname -a "name=centos102"192.168.34.102 | CHANGED => {"ansible_facts": {"ansible_domain": "","ansible_fqdn": "centos102","ansible_hostname": "centos102","ansible_nodename": "centos102","discovered_interpreter_python": "/usr/bin/python"},"changed": true,"name": "centos102"}[root@ansibaledata]#ansible 192.168.34.102 -a "hostname"192.168.34.102 | CHANGED | rc=0 >>centos102
10. cron 模块
管理cron计划任务;-a “”: 设置管理节点生成定时任务
选项:
① action:cron backup= #如果设置,创建一个crontab备份 【yes|no】cron_file= #如果指定, 使用这个文件cron.d,而不是单个用户② crontabday=#日应该运行的工作( 1-31, *, */2, )hour= # 小时 ( 0-23, *, */2, )minute= #分钟( 0-59, *, */2, )month=#月( 1-12, *, /2, )weekday # 周 ( 0-6 for Sunday-Saturday,, )job= #指明运行的命令是什么name= #定时任务描述reboot # 任务在重启时运行,不建议使用,建议使用special_timespecial_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务user #以哪个用户的身份执行
示例:
开启计划任务
[root@ansibaledata]#ansible webs -m cron -a "minute=*/5 weekday=0,6 job="/usr/sbin/update 192.168.34.101 &> /dev/null" name=synctime" 只在周六周日每五分钟将时间与192.168.34.101进行同步,起名叫synctime[root@ansibaledata]#ansible webs -a "crontab -l"查询当前执行的任务结果。
禁用计划任务:
[root@ansibaledata]#ansible webs -m cron -a "minute=*/5 weekday=0,6 job="/usr/sbin/update 192.168.34.101 &> /dev/null" name=synctime disabled=ture" 只在周六周日每五分钟将时间与192.168.34.101进行同步计划任务进行禁用[root@ansibaledata]#ansible webs -a "crontab -l"查询当前执行的任务结果。
示例:
在远程主机上,定义每5分钟,清空一次防火墙
$ ansible web -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F'"
ansible web -m shell -a “crontab -l” 查看
[root@ansibaledata]#ansible webs -m cron -a "name='Clean the iptable' minute=*/5 job='/sbin/iptables -F &> /dev/full'"192.168.34.102 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"envs": [],"jobs": ["Clean the iptable"]}192.168.34.103 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"envs": [],"jobs": ["Clean the iptable"]}[root@ansibaledata]#ansible webs -a "crontab -l"192.168.34.102 | CHANGED | rc=0 >>#Ansible: Clean the iptable*/5 * * * * /sbin/iptables -F192.168.34.103 | CHANGED | rc=0 >>#Ansible: Clean the iptable*/5 * * * * /sbin/iptables -F
启动当前的计划任务
[root@ansibaledata]#ansible webs -m cron -a "name='Clean the iptable' minute=*/5 job='/sbin/iptables -F disabled=false'" 开启当前的计划任务,起名叫Clean the iptable192.168.34.102 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"envs": [],"jobs": ["Clean the iptable"]}192.168.34.103 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"envs": [],"jobs": ["Clean the iptable"]}[root@ansibaledata]#ansible webs -a "crontab -l"192.168.34.102 | CHANGED | rc=0 >>#Ansible: Clean the iptable*/5 * * * * /sbin/iptables -F disabled=false 开启结果192.168.34.103 | CHANGED | rc=0 >>#Ansible: Clean the iptable*/5 * * * * /sbin/iptables -F disabled=false
删除计划任务:
[root@ansibaledata]#ansible webs -m cron -a "name='Clean the iptable' state=absent" 删除计划任务,只需要将对应的计划任务名称删掉即可。192.168.34.102 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"envs": [],"jobs": []}192.168.34.103 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"envs": [],"jobs": []}[root@ansibaledata]#ansible webs -a "crontab -l" 查询结果,此时已经没有计划任务192.168.34.102 | CHANGED | rc=0 >>192.168.34.103 | CHANGED | rc=0 >>
11. yum 模块
选项
conf_file #设定远程yum安装时所依赖的配置文件。如配置文件没有在默认的位置。disable_gpg_check #是否禁止GPG checking,只用于`present‘ or `latest’。disablerepo #临时禁止使用yum库。 只用于安装或更新时。enablerepo #临时使用的yum库。只用于安装或更新时。name= #所安装的包的名称state=#present安装, latest安装最新的, absent 卸载软件。update_cache #强制更新yum的缓存。
示例
安装dstat 包,忽略gpg_check
$ ansible webs -m yum -a "name=dstat "
卸载dstat 包
$ ansible webs -m yum -a "name=dstat state=absent"
安装多个包
$ ansible webs -m yum -a "name=httpd,vsftpd,memacahe"
卸载多个包;
$ ansible webs -m yum -a "name=httpd,vsftpd,memacahe,state=absent"
12. service 模块
服务程序管理
选项
arguments #命令行提供额外的参数enabled #设置开机启动。name=#服务名称runlevel #开机启动的级别,一般不用指定。sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。state#started启动服务, stopped停止服务, restarted重启服务, reloaded重载配置
实例
远程安装httpd服务
$ ansible all -m yum -a "name=httpd"
远程开启httpd服务:
[root@ansibaledata]#ansible all -m yum -a "name=httpd" 安装http服务[root@ansibaledata]#ansible all -m service -a "name=httpd state=started" 打开http服务端口[root@ansibaledata]#ansible all -a "ss -nlt" 查看当前的服务端口192.168.34.102 | CHANGED | rc=0 >>StateRecv-Q Send-Q Local Address:PortPeer Address:Port<strong>LISTEN0128 :::80 :::* </strong>LISTEN0128 :::22 :::* LISTEN0128 *:22 *:* LISTEN0100 ::1:25 :::* LISTEN0100127.0.0.1:25 *:* 192.168.34.103 | CHANGED | rc=0 >>StateRecv-Q Send-Q Local Address:PortPeer Address:Port LISTEN0128*:22 *:* LISTEN0100 127.0.0.1:25 *:* <strong>LISTEN0128 :::80 :::* </strong>LISTEN0128 :::22 :::* LISTEN0100 ::1:25 :::* 192.168.34.105 | CHANGED | rc=0 >>StateRecv-Q Send-Q Local Address:PortPeer Address:PortLISTEN0128127.0.0.1:6010 *:* LISTEN0128 ::1:6010:::* LISTEN0128 :::111 :::* LISTEN0128 *:111 *:* <strong>LISTEN0128 :::80 :::* </strong> LISTEN0128 *:44404*:* LISTEN0128 :::58453 :::* LISTEN0128 :::22 :::* LISTEN0128 *:22 *:* LISTEN064 :::23 :::* LISTEN0128127.0.0.1:631 *:* LISTEN0128 ::1:631 :::* LISTEN0100 ::1:25 :::* LISTEN0100127.0.0.1:25 *:*
远程关闭服务:
[root@ansibaledata]#ansible all -m service -a "name=httpd state=stopped" 关闭http服务[root@ansibaledata]#ansible all -a "ss -nlt" 查此时的80端口已经没有了192.168.34.102 | CHANGED | rc=0 >>StateRecv-Q Send-Q Local Address:PortPeer Address:PortLISTEN0128 :::22 :::* LISTEN0128 *:22 *:* LISTEN0100 ::1:25 :::* LISTEN0100127.0.0.1:25 *:* 192.168.34.103 | CHANGED | rc=0 >>StateRecv-Q Send-Q Local Address:PortPeer Address:Port LISTEN0128*:22 *:* LISTEN0100 127.0.0.1:25 *:* LISTEN0128 :::22 :::* LISTEN0100 ::1:25 :::* 192.168.34.105 | CHANGED | rc=0 >>StateRecv-Q Send-Q Local Address:PortPeer Address:PortLISTEN0128127.0.0.1:6010 *:* LISTEN0128 ::1:6010:::* LISTEN0128 :::111 :::* LISTEN0128 *:111 *:* LISTEN0128 *:44404*:* LISTEN0128 :::58453 :::* LISTEN0128 :::22 :::* LISTEN0128 *:22 *:* LISTEN064 :::23 :::* LISTEN0128127.0.0.1:631 *:* LISTEN0128 ::1:631 :::* LISTEN0100 ::1:25 :::* LISTEN0100127.0.0.1:25 *:*
13. user 模块
用户模块,管理用户帐号
选项
comment # 用户的描述信息createhome # 是否创建家目录force# 在使用state=absent是, 行为与userdel -force一致.group# 指定基本组groups # 指定附加组,如果指定为(groups=)表示删除所有组home# 指定用户家目录move_home # 如果设置为home=时, 试图将用户主目录移动到指定的目录name# 指定用户名non_unique# 该选项允许改变非唯一的用户ID值password # 指定用户密码,若指定的是明文密码,是不能用的,需用md5加密过后的密码remove # 在使用state=absent时, 行为是与userdel -remove一致shell# 指定默认shellstate# 设置帐号状态,不指定为创建,指定值为absent表示删除system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户uid# 指定用户的uidupdate_password # 更新用户密码
示例:
$ ansible all -m user -a 'name=test comment="test user" uid=200 home=/data/testhome group=root groups=bin,nobody shell=/sbin/nologin' 创建一个test用户的详细信息$ ansible all -m user -a "name=test state=absent" 删除用户信息,但是不会删除用户家目录的文件信息$ ansible all -a "getent passwd test" 查看当前创建的用户信息$ ansiable all -a "name=test state=absent remove=yes" 跟上后面的remove=yes就会删除家目录信息
测试效果
[root@ansibaledata]#ansible all -m user -a 'name=test comment="test user" uid=200 home=/data/testhome group=root groups=bin,nobody shell=/sbin/nologin' 创建一个test用户的详细信息[root@ansibaledata]#ansible all -a "getent passwd test"192.168.34.102 | CHANGED | rc=0 >>test:x:200:0:test user:/data/testhome:/sbin/nologin192.168.34.103 | CHANGED | rc=0 >>test:x:200:0:test user:/data/testhome:/sbin/nologin192.168.34.105 | CHANGED | rc=0 >>test:x:200:0:test user:/data/testhome:/sbin/nologin[root@ansibaledata]#ansible all -m user -a "name=test state=absent" 删除用户文件信息[root@ansibaledata]#ansible all -a "getent passwd test" 查看用户文件信息192.168.34.102 | FAILED | rc=2 >>non-zero return code192.168.34.103 | FAILED | rc=2 >>non-zero return code192.168.34.105 | FAILED | rc=2 >>non-zero return code
14. group模块
选项
gid # 设置组的GID号name= # 管理组的名称state# 指定组状态,默认为创建,设置值为absent为删除system # 设置值为yes,表示为创建系统组
示例:
$ ansible webs -m group -a "name=testgroup system=yes“ 创建系统组$ ansible webs -m group -a "name=testgroup state=absent" 删除组
15. setup 模块
查机器的所有facts信息
介绍
facts 组件是Ansible 用于采集被管机器设备信息的一个功能,我们可以使用setup 模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。acts就是变量,内建变量。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter 参数,查询的是全部信息,很多,filter 相当于匹配筛选。
示例:
查询当前机器的全部信息:
$ ansible 192.168.34.103 -m setup
查看当前主机的总内存大小:
$ ansible all -m setup -a "filter=ansible_memtotal_mb" 其中filter是过滤的含义
查看每个主机的centos版本号
$ ansible all -m setup -a "filter=ansible_distribution_major_version"
me=testgroup state=absent" 删除组
### 15. setup 模块- **查机器的所有facts信息**- 介绍- facts 组件是Ansible 用于采集**被管机器设备信息**的一个功能,我们可以使用**setup 模块查机器的所有facts信息**,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。- acts就是变量,**内建变量** 。**每个主机的各种信息,cpu颗数、内存大小等**。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。- setup模块,主要用于**获取主机信息**,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。- setup模块下经常使用的一个参数是**filter 参数**,查询的是全部信息,很多,filter 相当于匹配筛选。- 示例:- 查询当前机器的全部信息:```shell$ ansible 192.168.34.103 -m setup```[外链图片转存中...(img-P3uezMNo-1625467423229)]- 查看当前主机的总内存大小:```shell$ ansible all -m setup -a "filter=ansible_memtotal_mb" 其中filter是过滤的含义```[外链图片转存中...(img-KPpNgwzl-1625467423233)]- 查看每个主机的centos版本号```shell$ ansible all -m setup -a "filter=ansible_distribution_major_version"```[外链图片转存中...(img-wZMgY6zW-1625467423237)]