关注我的朋友可以发现在之前也总结过一些模块,本次也是之前的补充,总结归纳一下,防止遗忘。
在进行实验前,我已经把测试用的服务器放到了test组中。
1.command模块
- command模块的命令不支持启动shell,直接通过ssh执行命令
- command不支持bash的特性,如管道和重定向功能
- 所有需要调用shell的功能都无法使用
# 报错 ansible test -m command -a "ps|wc -l" ansible test -m command -a "ls &"
可以通过下图很好地判断出,command模块单次执行之后的效果。
2.shell模块
如果想要调用shell功能时,可以使用shell模块
ansible test -m shell -a "ps|wc -l" ansible test -m shell -a "ls &"
再次使用shell模块来执行命令时,就会正常了。值得注意的是,command和shell模块都只能去执行一些非交互式的命令,不能去执行一些交互式的命令,比如vim或top。
- 模块支持判断(creates),文件存在时,不执行shell命令 比如我们给服务器生成密钥时,如果已经生成则不再重新生成,不再执行命令。
ansible test -m shell -a "ssh-keygen -f ~/.ssh/id_rsa -N '' creates=~/.ssh/id_rsa"
3.script模块
- 允许本地写脚本,拷贝到被管理端并执行脚本
- 脚本不是shell脚本(如python、perl脚本等),可以没有x权限 我这里在本机写了一下安装http的脚本,存储为test.sh:
#!/bin/bash yum -y install httpd systemctl start httpd
使用ansible在远端服务器上执行。
ansible test -m script -a "./test.sh"
4.file模块
- file模块可以创建文件、目录、链接等;修改权限与属性等
- 幂等性:任意次执行所产生的影响均与一次执行的影响相同 模块常见应用:
# 创建文件 ansible test -m file -a "path=/tmp/file.txt state=touch" # 创建目录 ansible test -m file -a "path=/tmp/mydir state=directory" # 修改权限 ansible test -m file -a "path=/tmp/file.txt owner=sshd group=adm mode=0777"
到目标主机上查看执行结果。
- 删除文件、目录和创建链接文件 删除前面创建的文件和目录
# 删除目录 ansible test -m file -a "path=/tmp/mydir state=absent" # 删除文件 ansible test -m file -a "path=/tmp/file.txt state=absent" # 创建链接文件,给/etc/hosts文件创建一个链接文件/tmp/host.txt ansible test -m file -a "src=/etc/hosts path=/tmp/hosts state=link "
到服务器上查看,发现文件已经被删除,并且创建了一个链接文件。
5.lineinfile|replace模块
- 在修改单个文件的单行内容时可以使用lineinfile模块 比如,在/etc/issue文件中添加一行内容hello world,默认添加到最后
ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
注意: 基于幂等性,重复执行不会创建多行内容