1.命令和脚本模块小结
- command 模块用于执行简易的命令,不包含特殊符号,管道,重定向,通配符
- 举例
#默认模块,可不添加,不支持特殊符号,管道,重定向,通配符
[root@m01 ~]# ansible data -m command -a 'hostname'
[root@m01 ~]# ansible data -a 'hostname'
- shell 与command 类似, 支持含特殊符号,管道,重定向,通配符
- 举例
[root@m01 ~]# ansible data -m shell -a "ifconfig|grep eth0"
- script 分发脚本并执行脚本
- 举例
ansible nfs -m script -a '/server/scripts/yum.sh'
2.软件管理模块
- yumname 软件名字,软件名+版本state
present installed 安装absent removed 删除latest 更新
- 举例
ansible backup -m yum -a 'name=nginx state=present'
- yum_repositoryfile=xxxx /etc/yum.repos.d/xxxx.reponamedescriptionbaseurl #yum源下载地址 state=present或absent enabled=yesgpgcheck=yes gpgkey
- 举例
ansible backup -m yum_repository -a 'file=nginx name=nginx-stable description="nginx yum repo" baseurl="http://nginx.org/packages/centos/$releasever/$basearch/" enabled=yes gpgcheck=no '
ansible backup -m yum -a 'name=nginx state=present'
3.文件相关模块
3.1file
- file 创建、删除 文件/目录/软链接path= 指定文件、目录 (类似于dest)state= directory 目录link 软链接owner group moderecurse 递归
#例
#创建文件
ansible all -m file -a "path=/tmp/oldboy.txt state=touch"
ansible all -a 'ls -l /tmp/oldboy.txt'
#创建目录
ansible all -m file -a "path=/tmp/oldboy/a/b/c/ state=directory"
ansible all -a 'tree /tmp/oldboy'
ansible all -m file -a "path=/tmp/oldboy/lidao/a/b/d/d/oldboy.txt state=directory" #创建目录
ansible all -a 'tree /tmp/oldboy'
ansible all -a 'tree -F /tmp/oldboy'
ansible all -m file -a "path=/tmp/old/dao/a/b/d/d/oldboy.txt state=touch" #创建文件
#创建链接文件(软链接)
ansible all -m file -a "src=/etc/hosts path=/tmp/hosts.soft state=link"
ansible all -a 'll /tmp/hosts.soft' #错误
ansible all -a 'ls -l /tmp/hosts.soft'
#把 web服务器 wordpress 代码修改为www.www
# recurse 递归修改属主属组
[root@m01 scripts]# ansible web -m file -a 'path=/data/blog/ owner=www group=www recurse=yes state=directory '
172.16.1.7 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 1111,
"group": "www",
"mode": "0755",
"owner": "www",
"path": "/data/blog/",
"size": 4096,
"state": "directory",
"uid": 1111
}
3.2copy
- copy 远程拷贝(分发文件、目录)src 源dest 目标backup 如果目标存在则备份(文件大则不要备份)
owner group mode 权限
content 写入内容 与dest一起使用
#批量分发 hosts文件
cp /etc/hosts /server/
ansible all -m copy -a 'src=/server/hosts dest=/etc/hosts backup=yes'
ansible all -a 'tail -2 /etc/hosts'
ansible all -a 'head -20 /etc/hosts*'
ansible all -m shell -a 'head -20 /etc/hosts*'
ansible all -m shell -a 'head -20 /etc/hosts*~'
ansible all -m shell -a 'cat /etc/hosts*~'
#批量分发 目录
ansible all -m copy -a 'src=/etc/yum.repos.d dest=/tmp/ '
ansible all -a 'ls -l /tmp/'
ansible all -m shell -a 'ls -l /tmp/yum.repos.d/'
#复制代码的时候 修改代码的所有者 www www
ansible all -m copy -a 'src=/data/blog/ dest=/tmp/ owner=www group=www '
3.3 get_url
- get_url url dest
url_get
ansible all -m url_get -a 'url=https://mirrors.tuna.tsinghua.edu.cn/gnu/gawk/gawk-5.1.0.tar.gz dest=/tmp/'
4 .服务模块
4.1 systemctl
###systemd (c7,c8)
开启或关闭 服务
ansible all -m systemd -a 'name=crond state=stopped'
ansible all -m systemd -a 'name=crond state=started'
ansible all -m systemd -a 'name=crond state=reloaded或restarted'
###开机自启动
ansible all -m systemd -a 'name=crond enabled=yes '
###开机自启动并启动服务
ansible all -m systemd -a 'name=crond enabled=yes state=started'
daemon_reload 未来我们修改了 systemctl对应的配置的时候 需要执行
4.2 service
#C5.C6
5. 模块:用户相关模块
- group
- user
#01 添加用户rsync,指定他的uid和gid 999 虚拟用户
##1)添加用户组 rsync gid 999
groupadd -g 999 rsync
##2)添加用户 rsync uid 999 组是rsync -s /sbin/nologin -M
useradd -u 999 -g rsync -s /sbin/nologin -M rsync
[root@m01 ~]# ansible db -m group -a 'name=rsync2 gid=10086 state=present'
172.16.1.51 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 10086,
"name": "rsync2",
"state": "present",
"system": false
}
[root@m01 ~]# ansible db -m user -a 'name=rsync2 uid=10086 group=rsync2 shell=/sbin/nologin create_home=no state=present'
172.16.1.51 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": false,
"group": 10086,
"home": "/home/rsync2",
"name": "rsync2",
"shell": "/sbin/nologin",
"state": "present",
"stderr": "正在创建信箱文件: 文件已存在\n",
"stderr_lines": [
"正在创建信箱文件: 文件已存在"
],
"system": false,
"uid": 10086
}
[root@m01 ~]#
[root@m01 ~]# ansible db -a 'id rsync2'
172.16.1.51 | CHANGED | rc=0 >>
uid=10086(rsync2) gid=10086(rsync2) 组=10086(rsync2)
[root@m01 ~]# ansible db -a 'grep rsync2 /etc/passwd'
172.16.1.51 | CHANGED | rc=0 >>
rsync2:x:10086:10086::/home/rsync2:/sbin/nologin
6. 模块:定时任务相关模块
cron模块 | Linux定时任务内容 | cron模块格式 |
注释说明 | #this is backup scripts by lidao996 at 20211111 | name="his is backup..." |
分 | 00 | minute=00 |
时 | 00 | hour=00 |
日 | * | day=* (如果是*号可以不写) |
月 | * | month=* |
周 | * | weekday=* |
指令、脚本 | sh / &>/dev/null | job="sh / &>/dev/null" |
状态 | | state=present(默认)|absent |
ansible all -a 'crontab -l'
ansible all -m cron -a 'name="print name to file" minute="*/3" job="echo oldboy &>>/tmp/oldboy.txt" state=present '
ansible all -a 'crontab -l'
ansible all -m cron -a 'name="print name to file" state=absent '
ansible all -a 'crontab -l'
#注意事项:
##01 一定要指定name
##02 不使用的定时任务,可以disabled注释掉。
#垃圾箱
alias rm='mv -t /tmp/ $*'
cron模块格式 |
name="his is backup..." |
minute=00 |
hour=00 |
day=* (如果是*号可以不写) |
month=* |
weekday=* |
job="sh / &>/dev/null" |
state=present(默认)|absent |
disabled是否注释只有 state=present才会注释 |
7. 模块:磁盘挂载相关模块
#01 把nfs上面的共享挂载到 /mnt目录下面
##01)安装nfs
ansible all -m yum -a 'name=nfs-utils state=present'
##02)挂载nfs
ansible all -m mount -a 'fstype=nfs src=172.16.1.31:/data/zh path=/mnt/lidao-new-nfs-mount--help/a/b/c/d/f/ state=mounted'
#02 注意事项:
## mount 模块中 state 是present 是只修改/etc/fstab
## mount 模块中 state 是mounted 是挂载并修改/etc/fstab
mount模块 | mount命令 | mount模块 |
指定文件系统类型 | -t nfs | fstype=nfs |
源 | 172.16.1.31:/data/zh | src=172.16.1.31:/data/zh |
目标 | /mnt | path=/mnt/new-lidao-mount |
状态 | | state=present|mounted absent|unmountedremounted |
present # 仅修改配置 开机挂载,仅将挂载配置写入/etc/fstab
mounted # 挂载+修改配置 挂载设备,并将配置写入/etc/fstab
unmounted # 卸载设备,不会清除/etc/fstab写入的配置
absent # 卸载设备,会清理/etc/fstab写入的配置
remounted #重新挂载
8. 模块:防火墙模块
iptables模块 | iptable命令 | iptables模块 |
指定表 | -t filter | table=filter |
| | action=append(默认)或insert |
指定链 | -I INPUT | chain=INPUT |
源ip | -s 10.0.0.0/24 | source=10.0.0.0/24 |
目标ip | -d | destination |
协议 | -p tcp | protocol=tcp |
源端口 | | |
目标端口 | --dport 3306 | destination_port=3306 |
策略 | -j DROP | jump=DROP |
状态 | | state=absent, present(默认) |
#安装iptables
ansible web -m yum -a 'name=iptables-services '
#启动iptables
ansible web -m systemd -a 'name=iptables state=started enabled=no'
#配置使用
#iptables -t filter -I INPUT -s 10.0.0.0/24 -p tcp --dport 3306 -j DROP
ansible web -m iptables -a 'table=filter action=insert chain=INPUT source=10.0.0.0/24 protocol=tcp destination_port=80 jump=DROP state=present'
ansible web -m iptables -a 'table=filter action=insert chain=INPUT source=10.0.0.0/24 protocol=tcp destination_port=80 jump=DROP state=absent'
9 模块小结
分类 | 模块名字 |
命令: | commnad , shell , script |
文件: | file,copy,get_url |
软件包: | yum,yum_repository |
服务: | systemd,service |
用户 | user,group |
磁盘 | mount |
定时任务 | cron |
防火墙 | iptables |