目录
0,Ansible 模块语法
1,Command 模块
2,Shell 模块
3,Scripts 模块
4,Copy 模块
5,File 模块
6,Yum 模块
7,Service 模块
8,Cron 模块
9,Group 模块
10,User 模块
11,Mount 模块
12,Unarchive 模块
13,Git 模块
14,Systemd 模块
0,Ansible 模块语法
在 ansible 中是指需要快速执行一条命令, 并且不需要保存的命令, 对于复杂的命令则为 playbook
查看模块帮助: ansible-doc -l
- // 统计模块数量
- $ ansible-doc -l |wc -l
- 3387 // ansible 有大量的模块
Ansible 模块语法:
ansible [管理主机信息或者主机组信息] -m [模块名称] -a [相关模块参数]
主机信息: 远程主机 IP 地址; 远程主机组名称; 远程所有主机 all
-m: 指定相应模块
-a: 利用模块中某些参数功能
-f : 定义每次输出内容的数量
Ansible 注意事项颜色信息:
绿色: 对远程节点不进行相应修改, 或者只是对远程节点信息进行查看
红色: 操作执行命令有异常
黄色: 对远程节点进行相应修改
深紫色: 表示对命令执行发出警告信息(可能存在的问题, 给你提示建议)
1,Command 模块
command 模块的作用: 默认模块, 在远程主机执行命令; 默认模块, 可忽略 - m 选项
- // chaidr 先切换到特定的目录, 然后在执行命令
- [root@m01 ~]# ansible 10.4.7.8 -m command -a "chdir=/tmp/ pwd"
- // creates 判断一个文件是否存在. 文件如果存在, 后面命令则不会执行; 如果不存在, 则执行
- [root@m01 /]# ansible 10.4.7.8 -m command -a "creates=/etc/rsyncd.conf hostname"
- // removes 判断一个文件是否存在. 文件如果存在, 后面命令执行; 如果不存在, 则不执行
- [root@m01 /]# ansible 10.4.7.8 -m command -a "removes=/etc/exports hostname"
- // fress_form 使用 command 模块批量获取执行 hostname 命令
- [root@m01 /]# ansible sa -m command -a "hostname"
该 command 模块无法和 shell 一样, 像 $HOME 变量, 和一些像 "<", ">", "|", ";" and "&" 这样的操作是没有办法执行 (如果要支持这些特殊符号就必须要使用 shell 模块) 错误的演示:
[root@m01 /]# ansible sa -m command -a "hostname;date"
2,Shell 模块
shell 模块作用: shell 模块是万能模块, 可以满足 command 模块所有功能, 并且可以支持识别特殊字符.
- // 在 10.4.7.8 的机器的当前目录下执行 ls 和 pwd 命令
- [root@m01 /]# ansible 10.4.7.8 -m shell -a "ls;pwd"
3,Scripts 模块
scripts 模块作用: 专门运行脚本模块, 在本地执行脚本, 脚本产生所有的动作都在远端主机上执行
- // 编写脚本, 里面添加 yum 安装 keepalived 命令, 将脚本执行命令放入到受控端执行
- [root@m01 ~]# cat /server/scripts/yum.sh
- #!/bin/bash
- yum install -y keepalived
- [root@m01 ~]# ansible 10.4.7.8 -m script -a "/server/scripts/yum.sh"
- [root@m01 ~]# ansible 10.4.7.8 -m shell -a "rpm -qa keepalived"
注意: 我们在管理机器上执行的脚本, 远端 (受控端) 是不需要存在该脚本
4,Copy 模块
copy 模块作用: 将文件从本地或远程机器复制到远程机器上的某个位置
- // 将本端的 / etc/hosts 文件推送到远端, 并且重命名为 test.txt
- [root@m01 ~]# ansible sa -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
- // 本端在 / tmp / 下创建文件 file01.txt, 推送到远端
- [root@m01 ~]# touch /tmp/file01.txt
- [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/"
- // 为本端的 / tmp/file01.txt 文件追加内容, 并推送到远端, 覆盖时备份原文件
- [root@m01 ~]# cat /tmp/file01.txt
- [root@m01 ~]# echo 123456>/tmp/file01.txt
- [root@m01 ~]# cat /tmp/file01.txt
- 123456
- [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes"
- // 在 / root / 下创建 test.txt 文件, 在复制的时候修改属主和属组为 root, 权限 644
- [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/root/test.txt dest=/test/oldboy/ owner=root group=root mode=644"
- // 为对端的 / tmp/test.txt 文件写入内容 "1"
- [root@m01 ~]# ansible 10.4.7.7 -m copy -a "content='1'dest=/tmp/test.txt"
参数
- - backup # 对推送传输过去的文件, 进行备份
- - src # 推送数据的源文件信息
- - dest # 推送数据的目标路径
- - content # 直接批量在被管理端文件中添加内容
- - owner # 将本地文件推送到远端, 指定文件属主权限
- - group # 将本地文件推送到远端, 指定文件属组权限
- - mode # 将本地文件推送到远端, 指定文件权限信息
5,File 模块
file 模块作用: 对受控端的文件属性修改 / 目录创建 / 文件创建
- // 为远端主机修改 / tmp/file01.txt 文件的属主和属组为 root, 权限为 600
- [root@m01 ~]# ansible 10.4.7.7 -m file -a "path=/tmp/file01.txt owner=root group=root mode=600"
- // 为远端主机创建文件和目录, 远程创建文件 / tmp/file01.txt
- [root@m01 ~]# ansible 10.4.7.7 -m file -a "path =/tmp/file01.txt state=touch"
- // 远程创建目录 / tmp/dir01
- [root@m01 ~]# ansible 10.4.7.7 -m file -a "path =/tmp/dir01 state=directory"
- // 递归修改远端主机的 / data 目录及目录下的所有文件的属主和属组都为 root
- [root@m01 /]# ansible 10.4.7.7 -m file -a "path=/data state=directory owner=root group=root recurse=yes"
模块参数
- - path # 指定远程主机目录或文件信息
- - recurse # 递归授权:
- yes # 递归修改权限
- no # 不递归修改权限(默认)
- - state # 指定需要执行的动作:
- directory # 在远端创建目录
- touch # 在远端创建文件
- hard # 硬链接
- link #软链接
6,Yum 模块
yum 模块作用: 可以对受控端执行 yum 安装, 卸载和查看软件包等
- // yum 安装 iftop 软件包
- [root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=installed"
- // 移除 iftop 软件
- [root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=absent"
- // 查看指定软件包名的列表
- [root@m01 ~]# ansible 10.4.7.7 -m yum -a "list=iftop"
模块参数
- - name # 执行要安装软件的名称, 以及软件的版本
- - state # 指定需要执行的动作:
- installed,present # 安装软件包
- latest # 安装最新软件包
- removed,absent # 移除软件包
- - list # 指定软件名称, 查看软件是否已经安装了
7,Service 模块
service 模块作用: 管理服务状态模块, 对受控端进行服务的管理
- // 将远端的 crond 服务关闭, 并且开机不启动
- [root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=stopped enabled=no"
- // 将远端的 crond 服务开启, 并且开机自启动
- [root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=started enabled=yes"
模块参数
- - name # 指定需要管理的服务名称(管理的服务一定在 chkconfig 中可以看到)
- - state # 指定需要执行的动作:
- started # 启动服务
- reloaded # 平滑重启
- restarted # 重启服务
- stopped # 停止服务
- running # 运行 (启动) 服务
- - enable # 设置服务是否开机自启动:
- yes # 服务开机自启动
- no # 服务开机不启动
8,Cron 模块
cron 模块作用: 为受控端添加定时任务
x x x x x /bin/sh /server/scripts/test.sh>/dev/null 2>&1
将系统命令行的定时任务变成 ansilbe 的语法
传统的写法
"minute=0 hour=0 daay=* month=* weekday=* job='/bin/sh /server/scripts/test.sh>/dev/null 2>&1'"
ansible 的写法(* 号是可以省略的)
ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh>/dev/null 2>&1'"
定时任务示例
- // 添加一条定时任务
- [root@m01 ~]# ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh>/dev/null 2>&1'"
- // 设置定时任务注释信息, 防止重复设置
- [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01'minute=0 hour=0 job='/bin/sh /server/scripts/test.sh>/dev/null 2>&1'"
- // 删除指定的 name
- [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01'minute=0 hour=0 job='/bin/sh /server/scripts/test.sh>/dev/null 2>&1'state=absent"
- // 也可以直接指定定时任务项的名称, 进行定时任务的删除
- [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron02'state=absent"
- // 使用 disabled 参数来注释定时任务
- [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01'minute=0 hour=0 job='/bin/sh /server/scripts/test.sh>/dev/null 2>&1'disabled=yes"
- // 取消注释
- [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01'minute=0 hour=0 job='/bin/sh /server/scripts/test.sh>/dev/null 2>&1'disabled=no"
模块参数
- - name # 为新的定时任务条目设置名称(防止定时任务项的重复)
- - state # 需要指定的动作:
- absent # 添加定时任务
- preset # 删除定时任务
- - disabled # 是否禁用定时任务(是否注释):
- yes # 禁用定时任务项(注释掉)
- no # 开启定时任务项(取消注释)
- # 该参数需要和 job 一起使用
- - minute # 分钟 0-59
- - hour # 小时 0-23
- - day # 天数 1-31
- - month # 月份 1-12
- - weekday # 周 0-6
9,Group 模块
group 模块作用: 可以为远端创建用户组
- // 创建组, 组名为 demo, 组 id 为 1012
- [root@m01 ~]# ansible 10.4.7.7 -m group -a "name=demo gid=1012"
模块参数
- - name # 必须参数, 指定创建的组名
- - gid # 指定用户的 gid
- - state
- absent # 移除远端主机的组
- present # 创建远端主机的组(默认)
10,User 模块
user 模块作用: 可以为远端进行创建用户, 修改用户, 删除用户等
- // 创建用户名 test,uid 为 999, 组为 test,shell 为 / sbin/nologin, 并且不创建家目录
- [root@m01 ~]# ansible 10.4.7.7 -m user -a "name=test uid=1010 shell=/sbin/nologin createhome=no"
- // 创建普通用户 alx, 并配置对应的用户密码(-1 使用 MD5 加密)
- [root@m01 /]# echo '123456' | openssl passwd -1 -stdin
- $1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/
- [root@m01 /]# ansible 10.4.7.7 -m user -a 'name=alx password="$1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/"'
模块参数
- - name # 必须参数, 指定用户名
- - group # 指定用户组名称
- - groups # 指定附加组名称, 多个组之间用逗号 "," 分隔
- - shell # 指定用户登录的 shell
- - uid # 指定用户的 uid
- - comment # 指定用户的注释信息
- - password # 给用户添加密码
- - state # 指定用户是否存在于受控主机中:
- preset # 创建用户(默认)
- absent # 删除用户
- - createhome # 是否创建家目录:
- yes # 创建家目录(默认)
- no # 不创建家目录
- - home # 指定家目录, 需要和 createhome 互相配合使用
密码设置: 必须要将预先设置的密码做 openssl 加密处理后输出的一串数值, 然后还数值就作为新创建用户的密码, 如果添加的是明文密码的话是无效的.
11,Mount 模块
mount 模块作用: 可以将挂载参数写入到 / etc/fastb 文件中
- // 仅将挂载的配置写入到 / etc/fastb, 并不会执行挂载
- [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=present"
- // 临时挂载设备, 并将挂载的配置写入到 / etc/fastb
- [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=mounted"
- // 临时卸载, 不会清理 / etc/fstab
- [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=unmounted"
- // 卸载, 不仅临时卸载, 同时会清理 / etc/fstab
- [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=absent"
模块参数
- - present # 开机挂载, 不会执行挂载指令, 仅将挂载的配置写入到 / etc/fastb
- - mounted # 挂载设备, 并将挂载的配置写入到 / etc/fastb
- - unmounted # 卸载设备, 不会清除 / etc/fastb 写入的配置
- - absent #卸载设备, 会清理 / etc/fastb 写入的配置
注意: path 所指定的挂载目录不需要手动创建, 当执行挂载命令的时候, 会自动的创建并挂载
12,Unarchive 模块
Unarchive 模块作用: 解压缩
该模块有两种用法:
将 ansible 主机上的压缩包在本地解压缩后传到远程主机上, 这种情况下, copy=yes. 本地解压缩, 解压缩位置不是默认的目录, 没找到或传完删了 后传到远程主机
将远程主机上的某个压缩包解压缩到指定路径下. 这种情况下, 需要设置 copy=no 远程主机上面的操作, 不涉及 ansible 服务端
- // 将本地的压缩文件解压后传到远程主机
- [root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=yes mode=0755"
- // 将远程主机的压缩文件解压
- [root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=no mode=0755"
模块参数
- - src # 源压缩包路径
- - dest # 压缩包解压后存放路径
- - copy # yes: 本地压缩, no: 远程压缩
- yes
- no
- - mode # 解压后的目录 / 文件权限
13,Git 模块
Git 模块作用: 管理 Git 仓库的 Git checkout 以部署文件或软件.
- // 拉取 Git 仓库 commit id 为 78d5d96 的代码到指定目录
- [root@m01 ~]# ansible 10.4.7.7 -m Git -a "repo=https://gitee.com/jasonminghao/dubbo-demo-service.git dest=/data/git_repo/dubbo-demo-service version=78d5d96 accept_hostkey=yes"
模块参数
- - repo # Git 仓库地址(https/SSH)
- - dest # 将代码克隆到指定路径
- - version # 克隆指定版本分支 / commit id
- - accept_hostkey # 类似于 - o StrictHostKeyChecking=no
- yes
- no
14,Systemd 模块
systemd 模块作用: 如果使用 systemctl 管理程序的话, 可以使用 systemd 模块, systemctl 可以控制程序, reload,start,status,restart 等
- // 拉取 Git 仓库 commit id 为 78d5d96 的代码到指定目录
- [root@m01 ~]# ansible 10.4.7.7 -m systemd -a "name=nfs state=started enabled=yes daemon_reload=true"
模块参数
- - name # 需要管理的服务名称
- - state # 执行动作
- reloaded # 平滑重启
- restarted # 重启
- started # 启动
- stopped # 停止
- - enabled # 是否开机启动
- - daemon_reload # 在执行任何其他操作之前运行 daemon-reload, 以确保 systemd 已经读取了任何更改.
- yes
- no
来源: https://www.cnblogs.com/jasonminghao/p/12635616.html