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]
server5ansible_hosts=172.25.63.5
server6ansible_hosts=172.25.63.6
[testB]
server3ansible_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中的⽂件已经拉取成功,两个主机中的f
stab⽂件被拷贝到了本机
的/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
fetch最佳用法[root@server4 etc]#echo"hello world">>fstab
如上图所⽰,我们在/testdir/ansible/server5/etc/fstab⽂件的尾部加⼊⼀些字符,以改变⽂件内容,然后⼜执⾏了fetch命令:
我们发现,server5主机的返回信息为黄⾊,test60主机的返回信息为绿⾊,证明ansible已经做出了正确的判断,将修改过的⽂件替换了,替换为重新拉取的⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。