[root@nb01 ~]# ansible-doc -l | wc -l
1378 ###模块数高大1378个
[root@nb01 ~]# ansible-doc -help ###ansible-doc 的帮助命令
[root@nb01 ~]# ansible-doc ping ##查看ping模块的详细帮助相当于shell的man帮助
[root@nb01 ~]# ansible web -m command -a 'uptime' ##查看公司web集群的负载
[root@nb01 ~]# ansible all -m command -a 'date+%F_%T' ##查看所有主机的日期和时间
command模块局限性:
执行不了由shell解析的命令;不能解析系统变量;执行命令中有< 、>、|、&等符号都执行不了;
[root@nb02 ~]# ansible all -m command -a 'echo ${HOSTNAME}' ##解析不了
原因是:该模块不启动shell;直接在ssh进程中执行命令;
[root@nb02 ~]# ansible cache -m command -a 'ps-ef | grep sshd' ##因为管道符 解析不了
[root@nb02 ~]# ansible cache -m shell -a 'ps-ef | grep sshd' ##换成shell模块可以解析
[root@nb02 ~]# ansible all -m shell -a 'echo ${HOSTNAME}' ##可以解析输出所有主机名
**所以我们一般工作中shell的使用率高**
ansible cache -m shell -a ‘cd /tmp’
ansible cache -m shell -a ‘touch testfile’**** ##文件在根下创建的原因是cd在在远程连接是失效
**ansible web -m shell -a “echo ${HOSTNAME}”
ansible web -m shell -a ‘echo ${HOSTNAME}’
###相当于ssh web1 ‘echo ${HOSTNAME}’ 和 ssh web1 “echo ${HOSTNAME}” 的执行
所以在
[root@nb02 ~]# id nb ##查看系统没有nb用户
id: nb: no such user
[root@nb02 ~]# ansible web1,cache -m command -a ‘useradd nb’ ##给web1、cache主机创建nb用户并设置密码123
[root@nb02 ~]# ansible web1,cache -m shell -a ‘echo 123 | passwd --stdin nb’
[root@nb02 ~]# cd /usr/
[root@nb02 usr]# cd ansible
[root@nb02 ansible]# vim uu.sh ##本地创建脚本然后远程执行脚本;给web集群所有主机添加用户;有nb没wk;wk密码是456
#!/bin/bash
id nb
if [ $? != 0 ];then
useradd wk
echo 456 | passwd --stdin wk
fi
[root@nb02 ansible]# ansible web -m script -a ‘./uu.sh’ ##远程执行脚本;
**使用yum包管理器管理软件包
name要管理的软件包名称
state动作(installd#安装 removed#卸载)**
[root@nb02 ~]# ansible db -m yum -a 'name="mariadb-server" state=installed'
[root@nb02 ~]# ansible cache -m yum -a ‘name=lrzaz state=removed’
sleep :执行restartd;会在stop和start之间睡眠几秒
##给cache缓存服务器上的ssh服务设置启动和开机自启
[root@nb02 ~]# ansible cache -m service -a ‘name=“sshd” enabled=“yes” state=“started”’
幂等性
复制文件到远程主机:
##dest (代表远程主机):远程主机的绝对路径。如果源文件是个目录则该路径必须是个目录
#backup:覆盖前先备份原文件、备份文件包含时间信息等;有两个选项yes|no
#force :若目标主机包含该文件,但内容不同,如果设置为yes则强制覆盖;为no时,则只有当目标主机的目标位置不存在时该文件才会复制。默认为yes;
[root@nb02 ~]# ansible all -m copy -a ‘src=/etc/resolv.conf dest=/etc/resolv.conf’ ##复制文件
[root@nb02 ~]# ansibe all -m copy -a ‘src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/’ ##复制目录
****类似sed的一种行编辑替换模块
path目标文件文件
regexp 正则表达式 要修改的行
line 最终修改的结果****
##修改bin-log日志
[root@nb01 ~]# ansible db -m lineinfile -a 'path="/etc/my.cnf" rregexp="^binlog-format" line="binlog-format = row" '
类似sed的一种行编辑替换模块
path 目的文件
regexp正则表达式 要修改大位置
replace 替换后的结果
实例:替换指定字符;row -->mixed
[root@nb01 ~]# ansible db -m replace -a 'path="/etc/my.cnf" regexp="row" replace="mixed"'
主要用于获取主机信息;playbooks里边经常会用到的另一个参数gather_facts与该模块相关;setup模块经常使用的是filer参数
#####实例: filer过滤所需信息
[root@nb01 ~]# ansible cache -m setup -a ‘filter=ansible_distrlbution’