Ansible 常用模块总结(二)

235 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

在进行实验前,我已经把测试用的服务器放到了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"

再次执行的时候,跳过。 image

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'"

注意: 基于幂等性,重复执行不会创建多行内容

多次执行,依然只增加有最后一行。 image

  • lineinfile会替换一整行,replace可以替换关机词 比如,将/etc/issue文件全文所有的Kernel替换为Ocean
ansible test -m replace -a "path=/etc/issue.net regexp=Kernel replace=Ocean"