Ansible作为一款强大的自动化工具,其内置的众多模块无疑为我们的工作提供了极大的便利。其中copy模块、fetch模块和file模块是经常被使用到的几个模块,它们各有特点,能够在不同的场景中发挥巨大的作用。那么,如何高效学习和掌握这些模块呢?
Ansible 的 copy 模块是用于将本地文件或目录复制到远程主机上的模块。它是一个非常基础且常用的模块,在 Ansible playbook 中经常被使用。
src: 要复制的本地文件的路径(必需)。
dest: 远程主机上的目标路径(必需)。
owner: 设置目标文件或目录的所有者。
group: 设置目标文件或目录的组。
mode: 设置目标文件或目录的权限(例如,“0644”)。
backup: 在覆盖之前,是否备份远程主机上的目标文件。
force: 如果目标文件已经存在,是否覆盖它。
directory_mode: 如果 src 是一个目录,则设置该目录的权限。
content: 直接指定要写入目标文件的内容,而不是从文件中读取。
ansible -m copy -a 'dest=/tmp src=/root/test.sh' 192.168.8.6

dest 通常指的是目标路径
src 通常代表 "source"(源),指的是操作的起始点或原始数据的位置。
使用 copy 模块来将本地机器(Ansible 控制器)上的 /root/test.sh 文件复制到远程主机 192.168.8.6 的 /tmp 目录下

ansible -m copy -a 'dest=/tmp src=/root/test.sh backup=yes ' 192.168.8.6
这条 Ansible命令使用copy模块将本地机器(Ansible 控制器)上的/root/test.sh文件复制到远程主机192.168.8.6的 /tmp目录下,并且在复制之前,如果远程主机上的目标位置已经存在同名文件,它将会创建一个备份。


mkdir -p a/b/c/dansible -m copy -a 'dest=/tmp src=./a' 192.168.8.6
使用 Ansible 的 copy 模块来将当前目录下的 a 目录(及其所有子目录和文件)复制到远程主机 192.168.8.6 的 /tmp 目录下。


ansible -m copy -a 'dest=/tmp src=test.sh group=user1 owner=user1' 192.168.8.6这个 Ansible 命令尝试使用 copy模块将本地的 test.sh 文件复制到远程主机 192.168.8.6 的 /tmp 目录下,并尝试将文件的所有者设置为 user1,组设置为 user1


ansible -m copy -a 'dest=/tmp src=test.sh mode=777' 192.168.8.6这个 Ansible 命令使用 copy 模块将本地的 test.sh 文件复制到远程主机 192.168.8.6 的 /tmp 目录下,并设置远程主机上该文件的权限为 777。

fetch模块
Fetch模块是Ansible中的一个功能,它用于从远程主机上获取文件,并将其复制到本地主机上。与copy模块相反,fetch模块的作用是将远程机器上的文件拷贝到本地。
ansible -m fetch -a 'src=/tmp/test.sh dest=/ ' 192.168.8.6
使用 fetch 模块从远程主机(IP 地址为 192.168.8.6)上获取文件 /tmp/test.sh,并尝试将其保存到本地主机的根目录 / 下。


在 Ansible 中,file 模块用于管理文件或目录的属性,如设置权限、所有权、状态(存在或不存在)等。
常用选项:
absent:
如果文件或目录存在,则删除它。
directory:
确保目录存在。如果目录不存在,则创建它。如果已存在并且是一个文件,则会引发错误。
file:
确保文件存在。如果文件不存在,则创建它(实际上是通过 "touch" 命令实现的)。如果已存在并且是一个目录,则会引发错误。这个选项和 touch 相似,但不会更改文件的现有内容。
hard:
这通常不是 file 模块的标准选项。但在某些上下文或特定版本中,它可能与创建硬链接相关。但通常,file 模块不直接支持硬链接的创建。
link:
创建一个符号链接(也称为软链接)。注意,这不是一个标准的 state 选项,但可能是在特定 Ansible 插件或扩展中可用的。标准的 file 模块没有直接的 link state 选项来创建符号链接,但你可以使用 src 参数指定要链接到的源文件或目录。
touch:
类似于 file,但通常用于确保文件存在并更新其访问和修改时间戳(类似于 Unix/Linux 的 touch 命令)。如果文件不存在,则创建它。如果文件是一个目录,则会引发错误。
ansible -m file -a 'path=/tmp/tet.log state=touch ' 192.168.8.6Path:起点
该Ansible命令使用 file 模块在远程主机 192.168.8.6 上创建一个空文件,或者如果文件已经存在,则更新其访问和修改时间戳。



ansible -m file -a 'path=/tmp/tet.log state=absent ' 192.168.8.6
这个 Ansible 命令使用 file 模块来确保在远程主机 192.168.8.6 上的 /tmp/tet.log 文件不存在。



ansible -m file -a 'path=/tmp/tet.log state=directory ' 192.168.8.6使用 file 模块的 state=directory 参数来创建一个名为 /tmp/tet.log 的目录



ansible -m file -a 'path=/tmp/test state=directory ' 192.168.8.6在远程主机 192.168.8.6 上创建一个名为 /tmp/test 的目录


ansible -m file -a 'path=/tmp/test state=absent ' 192.168.8.6
使用 file 模块来确保在远程主机 192.168.8.6 上的 /tmp/test 目录不存在。


ansible -m file -a 'path=/tmp/hello.ln src=/root/hello.log state=link ' 192.168.8.6
使用 file 模块在远程主机 192.168.8.6 上创建一个符号链接(也称为软链接)。



ansible -m file -a 'path=/tmp/hello.hald src=/root/hello.log state=hard ' 192.168.8.6创建硬链接



ansible -m file -a 'path=/tmp/abc.log state=touch group=user1 owner=user1 mode=600' 192.168.8.6
这个 Ansible 命令使用 file 模块来确保在远程主机 192.168.8.6 上的 /tmp/abc.log 文件存在,并设置其所有权、组和权限。



ansible -m file -a 'path=/tmp/abc.log access_time=202404271212.30' 192.168.8.6
设置文件的访问时间

后续将会持续讲解ansible的模块敬请期待~
敬请关注博主,我们将持续为您带来云计算行业及更多前沿技术的最新信息,助您把握技术动态,领先一步!”
若您渴望深入了解云计算知识,或希望与云计算、运维、网络等领域的精英们共同交流学习,欢迎您私信博主,博主将为您提供宝贵的免费学习资料,并引荐您加入专业交流群。在这里,您可以与各路大咖切磋技艺,共享行业前沿资讯,一同成长进步。期待您的参与,让我们共同开启云计算领域的探索之旅!




原文作者:网络豆云计算学堂;如有侵权,请联系管理员删除。