※ansible命令行方式语法※
ansible <host-pattern> [-m module_name] [-a args] ansible 主机清单 -m 模块名 -a 参数
选项:
- –version:显示版本
- -m module:指定模块,默认为command,可以省略不写
- -v:详细过程;-vv:更详细
- –list-hosts:显示主机列表
- -k:提示输入ssh连接密码,默认key验证
- -K:提示输入sudo时口令
- -C:检查语法,并不执行过程
- -T,–timeout=TIMEOUT:执行命令超时时间,默认10s
- -u,–user=REMOTE_USER:执行远程执行的用户
- -b:切换用户执行
※执行结果颜色表示※
- 绿色:执行成功且不做出任何改变
- 红色:执行失败
- 黄色:执行成功且对目标主机做出变更
- 蓝色:显示详细过程
- 粉色:警告、建议,可以用但不建议
※ansible显示模块帮助命令※
ansible-doc [options] [module]
选项:
- -a:显示所有模块文档
- -l;–list:列出可用模块
- -s;–snippet:显示指定模块的playbook片段
示例:
ansible-doc -l ansible-doc yum ansible-doc -s yum ansible-doc -l |wc -l 3387 # 目前ansible可用模块多达3387个
※常用模块介绍※
※模块:ping※
- 测试主机连通性,返回值为pong代表成功
- 示例:测试主机连通性
ansible all -m ping
※模块:command※
- 命令模块,ansible默认模块,建议处理简单命令
- 示例:查看被控主机磁盘利用率
ansible all -m command -a ’df -h‘
※模块:shell※
- 这是个万能模块
- 命令模块,与command类似,支持复杂命令特殊符号等
- 示例:
※模块:scripts※
- 脚本模块,在远程主机执行脚本
- 示例:在远程主机上执行脚本
[root@localhost data]# vim host.sh [root@localhost data]# cat host.sh #!/bin/bash hostname [root@localhost data]# chmod +x host.sh [root@localhost data]# ansible all -m script -a '/data/host.sh' 192.168.10.4 | CHANGED => { "changed": true, "rc": 0, "stderr": "Shared connection to 192.168.10.4 closed.\r\n", "stderr_lines": [ "Shared connection to 192.168.10.4 closed." ], "stdout": "localhost.localdomain\r\n", "stdout_lines": [ "localhost.localdomain" ] } 192.168.10.3 | CHANGED => { "changed": true, "rc": 0, "stderr": "Shared connection to 192.168.10.3 closed.\r\n", "stderr_lines": [ "Shared connection to 192.168.10.3 closed." ], "stdout": "localhost.localdomain\r\n", "stdout_lines": [ "localhost.localdomain" ] }
※模块:copy※
- 将本地文件复制到远程主机
- 常用选项:
src:源文件地址 dest:目标文件地址 owner:文件所有者 group:文件所属组 mode:文件权限 backup:如果目标主机已有此文件,是否对目标主机原文件进行备份 content:生成内容至目标文件
- 示例:将本地/etc/hosts文件复制到远程主机/date目录下
ansible all -m copy -a 'src=/etc/hosts dest=/date'
※模块:fetch※
- 将客户端文件复制到服务端(只能是文件,不能是目录)
- 常用选项
src:源文件地址(远程主机) dest:目标文件地址(本地),会生成一个源文件主机的目录
- 示例:将远程主机的messages日志复制到本地/data目录
ansible 192.168.10.3 -m fetch -a 'src=/var/log/messages dest=/data' tree /data/ /data/ ├── 192.168.10.3 │ └── var │ └── log │ └── messages └── host.sh 3 directories, 2 files
※模块:file※
- 设置文件属性,创建、删除文件或文件夹
- 常用选项:
name:将要创建文件的名称 state:决定创建的属性,touch、directory、hard、link、absent(递归删除) owner:属主 group:属组 mode:权限
- 示例:为文件做软链接
ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link'
※模块:hostname※
- 修改主机名(注意:需要配合变量,不然批量主机名都是一样的)
- 示例:修改单一节点主机名
ansible 192.168.10.3 -m hostname -a 'name=node01'
※模块:cron※
- 计划任务模块
- 常用选项
minute:分 hour:时 day:日 month:月 weekday:周 job:任务 name:任务名 disabled:禁用任用
- 示例:每五分钟同步一次时间
ansible all -m cron -a 'minute=5 "job=/usr/sbin/ntpdate ntp.aliyun.com" name=ntpdate'
※模块:yum※
- 包管理模块,可安装多个包,本地包
- 常用选项
name:包名 list:列出 state:状态;present、installed、latest;absent、removed
- 示例:安装httpd服务;多个包用“,”隔开
ansible all -m yum -a ‘name=httpd state=present’
※模块:yum_repository※
- 仓库管理模块,为远程主机设置yum源
- 常用选项
name:仓库名,仓库id;例:name=[centos] file:配置文件名,即*.repo;不设置默认以仓库id为名 enabled:是否使用源,默认yes;即:enabled=1 gpgcheck:是否开始rpm包验证,默认no;即:gpgcheck=0 state:值为absent时删除源 baseurl:设置仓库的baseurl
- 示例:设置阿里源为yum源
ansible all -m yum_repository -a 'name=aliyuan file=aliyuan baseurl=http://mirrors.aliyun.com/repo/Centos-7.repo'
※模块:service※
- 服务管理模块
- 常用选项
name:服务名 state:状态;started、stopped、restarted、reloaded enabled:是否开机启动;yes、no
- 示例:启动httpd服务,并设置开机启动
ansible all -m service -a ‘name=httpd state=started enabled=yes’
※模块:user※
- 用户管理模块
- 常用选项:
name:用户名 shell:shell类型 uid:用户uid gid:用户gid system:是否为系统用户;yes、no group:用户组 groups:附加组 home:家目录 state:状态;absent,删除用户 remove:是否删除家目录;yes、no
- 示例:创建一个系统用户nginx
ansible all -m user -a ‘name=nginx shell=/sbin/nologin system=yes’
※模块:selinux※
- selinux管理模块
- 常用选项
configfile:配置文件,默认为/etc/selinux/config state:状态;disabled、enforcing、permissive
- 示例:禁用selinux
ansible all -m selinux -a ‘configfile=/etc/selinux/config state=disabled’
※模块:mount※
- 挂载模块
- 常用选项
src:要挂载的“设备” path:挂载点的路径 state:状态;mounted:挂载,没有挂载点将创建;unmounted:卸载;absent:从fstab文件中删除;remounted:重新挂载 fstype:挂载类型;nfs
- 示例:将192.168.10.4:/data挂载到远程主机/data下
ansible 192.168.10.3 -m mount -a ‘src=192.168.10.4:/data path=/data fstype=nfs state=mounted’
※模块:unarchive星
- 解压缩
- 常用选项
src:tar包源路径,可以是ansible服务端,也可以时远程主机路径,远程主机copy=no copy:yes为在ansible服务端找包,no为在远程主机找 dest:解压绝对路径 mode:权限 owner:属主 group:属组
- 示例:解压本地11.tar.gz至远程主机/data目录下
ansible all -m unarchive -a ‘src=/data/11.tar.gz dest=/data copy=yes’