Ansible(三)-- ansible中模块命令以及 fetch 模块的用法

一、ansible中关于模块的命令

列出ansible所支持的模块:

ansible-doc -l

查看模块的详细帮助信息,比如fetch:

ansible-doc -s fetch

调用模块,比如调用ping模块:

ansible all -m ping

调用模块的同时传入相关参数,以fetch为例:

ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible"

二、fetch模块

首先,我们可以使用“ansible-doc -s fetch”命令,查看一下fetch模块的用法,如下图所示:
在这里插入图片描述从帮助信息中可以看出,fetch模块的作用就是"Fetches a file from remote nodes",即"从受管主机中拉取文件"之意,而且fetch模块提供了一些参数供我们使用,我们可用的参数有 dest、fail_on_missing、flat、src、validate_checksum ,如上图所示,返回信息中注释了每个参数的作用。

比如src参数,src参数的作用就是指定从受管主机中拉取哪个文件。

比如dest参数,dest参数的作用就是指定拉取文件到本地以后文件存放的位置。

在上图中,dest参数和src参数的注释中都包含"(required)"字样,这表示,在使用fetch模块时,dest参数与src参数是必须提供的,如果在使用fetch模块时,没有提供这两个参数,将会报错,想想也对,如果我们想要从远程主机中拉取文件,那么我们必须告诉ansible,从哪里拉取文件,拉取后将文件存放到哪里吧,所以,在学习怎样使用一个模块时,要注意这些必选参数,那么,我们就从fetch模块入手,看看怎样使用带有参数的模块吧~

fetch模块的使用

在开始之前,先来看一下我们的主机清单配置,配置如下:

[root@server4 etc]# vim /etc/ansible/hosts 

[testA]
server5 ansible_hosts=172.25.63.5
server6 ansible_hosts=172.25.63.6
[testB]
server3 ansible_hosts=172.25.63.3
[test:children]
testA
testB

假如我们想要将testA组中所有主机的/etc/fstab文件拉取到本地,则可以使用如下命令

ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"

如上述命令所示,-m选项用于调用指定的模块,"-m fetch"表示调用fetch模块,

-a选项用于传递模块所需要使用的参数, -a "src=/etc/fstab dest=/testdir/ansible/"表示我们在使用fetch模块时,为fetch模块传入了两个参数,src与dest。

那么,我们一起来看一下上述命令的执行效果,如下:

在这里插入图片描述从命令的执行结果可以看出,上述命令执行成功了,因为两个主机对应的返回信息都返回了"SUCCESS"字样。

从返回信息可以看出,执行上述ansible命令后,主机5和主机6中的文件已经拉取成功,两个主机中的fstab文件被拷贝到了本机的/testdir/ansible目录中,而且,ansible在/testdir/ansible目录中自动创建了目录结构 server5/etc/,由于我们是同时从多台受管主机中拉取相同名称的文件,所以ansible会自动为我们创建各个主机对应的目录,以区分存放不同主机中的同名文件。

之前说过,ansible具有幂等性,幂等性能够保证我们重复的执行一项操作时,得到的结果是相同的,我们再来回顾一下幂等性的概念。

“幂等性"是什么意思呢?举个例子,你想把一个文件拷贝到目标主机的某个目录上,但是你不确定此目录中是否已经存在此文件,当你使用ansible完成这项任务时,就非常简单了,因为如果目标主机的对应目录中已经存在此文件,那么ansible则不会进行任何操作,如果目标主机的对应目录中并不存在此文件,ansible就会将文件拷贝到对应目录中,说白了,ansible是"以结果为导向的”,我们指定了一个"目标状态",ansible会自动判断,“当前状态"是否与"目标状态"一致,如果一致,则不进行任何操作,如果不一致,那么就将"当前状态"变成"目标状态”,这就是"幂等性","幂等性"可以保证我们重复的执行同一项操作时,得到的结果是一样的。

那么我们就来实验一下,看看重复执行相同的ansible命令时,会得到什么效果,效果如下图所示:
在这里插入图片描述从上图可以看出,返回信息仍然包含"SUCCESS"字样,证明ansible命令执行成功,不过很明显,这次的返回信息为"绿色",而且细心如你一定发现了,这次绿色的返回信息中,"changed"字段的值为false,而之前黄色的返回信息中,"changed"字段的值为true。

当返回信息为绿色时,“changed"为false,表示ansible没有进行任何操作,没有"改变什么”。

当返回信息为黄色时,"changed"为true,表示ansible执行了操作,“当前状态"已经被ansible改变成了"目标状态”。

没错,这就是幂等性的体现,当第一次执行上述命令时,ansible发现当前主机中并没有我们需要的fstab文件,ansible就会按照我们指定的操作,拉取fstab文件,也就是说,ansible"改变"了"当前状态",将当前"没有fstab文件的状态"变为了"有fstab文件的状态",当我们再次执行同样的命令时,ansible发现对应文件已经存在与对应目录中,于是ansible并没有做出任何操作,也没有进行任何改变,因为"当前状态"与我们预期的"目标状态"一致,没有必要再做出重复的无用功。

看到这里,你应该已经明白,为什么执行ansible命令时,会返回黄色的成功信息或者绿色的成功信息了吧?我们可以通过返回信息的颜色,更加精准的判断执行命令之前的状态是否与我们预期的一致。

从返回信息中可以看到,当ansible进行fetch操作时,会对对应文件进行哈希计算,算出文件哈希值(md5_sum),也就是说,如果我们改变了文件中的内容,哈希值也将随之发生改变,这个时候,即使对应目录中存在同名的文件,ansible也会判断出两个文件属于不同的文件,因为它们的哈希值并不相同,我们来实验一下,操作如下:

[root@server4 etc]# pwd
/testdir/ansible/server5/etc
[root@server4 etc]# echo "hello world" >> fstab 

如上图所示,我们在/testdir/ansible/server5/etc/fstab文件的尾部加入一些字符,以改变文件内容,然后又执行了fetch命令:
在这里插入图片描述
我们发现,server5主机的返回信息为黄色,test60主机的返回信息为绿色,证明ansible已经做出了正确的判断,将修改过的文件替换了,替换为重新拉取的文件。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用的信息,运行命令`ansible --version`可以查看Ansible的版本信息。在引用提供的示例输出,可见Ansible的版本为[core 2.12.4],配置文件路径为`/private/etc/ansible/ansible.cfg`,配置的模块搜索路径为`['/Users/tangliqi/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']`,Ansible的Python模块位置为`/Users/tangliqi/opt/anaconda3/lib/python3.8/site-packages/ansible`,Ansible的集合位置为`/Users/tangliqi/.ansible/collections:/usr/share/ansible/collections`,可执行文件位置为`/Users/tangliqi/opt/anaconda3/bin/ansible`,Python版本为3.8.8,Jinja版本为2.11.3,并且已安装libyaml库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [认识Ansible](https://blog.csdn.net/tlqwanttolearnit/article/details/123980225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Ansible的安装部署](https://blog.csdn.net/oyan110/article/details/122276302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值