• Ansible模块的基本使用


    目录

    Ansible基本概念博文的基础上,我们已经知道,当我们使用ansible完成实际任务时,需要依靠ansible的各个模块,比如,我们想要去ping某主机,则需要使用ping模块,命令如下:

    $ ansible all -m ping
    

    除了ping模块,ansible还有很多模块可供我们使用,那么ansible都有哪些模块呢?我们可以使用如下命令,查看ansible都有哪些模块。

    $ ansible-doc -l
    

    执行上述命令后,可以看到ansible中各个模块的名称,以及模块的大概功能,当然,通过ansible-doc -l命令获取到的模块信息比较概括,并不是特别详细,如果想要获取到各个模块更加详细的用法,可以使用ansible-doc -s命令,比如,我们想要获取ping模块的详细使用方法,则可以使用如下命令查看:

    $ ansible-doc -s ping
    

    即使使用ansible-doc -s ping命令查看ping模块的信息,得到的信息也是比较少的,这是因为ping模块本来就比较简单,而且ping模块并没有太多参数可用,但是并非所有模块都像ping模块一样简单,有的模块在使用时必须使用参数,比如 fetch 模块,见名知义,fetch为拿来之意,当我们需要将受管主机中的文件拉取到ansible主机时,则可以使用此模块,首先,我们可以使用ansible-doc -s fetch命令,查看一下fetch模块的用法,如下图所示:

    image

    从帮助信息中可以看出,fetch模块的作用就是Fetches a file from remote nodes,即从受管主机中拉取文件之意,而且fetch模块提供了一些参数供我们使用,我们可用的参数有 destfail_on_missingflatsrcvalidate_checksum ,如上图所示,返回信息中注释了每个参数的作用。

    • src参数,src参数的作用就是指定从受管主机中拉取哪个文件;
    • dest参数,dest参数的作用就是指定拉取文件到本地以后文件存放的位置;

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

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

    $ cat /etc/ansible/hosts
    [testA]
    test181 ansible_host=192.168.99.181
    test182 ansible_host=192.168.99.182
    
    [testB]
    test183 ansible_host=192.168.99.183
    
    [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模块传入了两个参数,srcdest

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

    image

    从命令的执行结果可以看出,上述命令执行成功了,因为两个主机对应的返回信息都返回了CHANGED字样。

    你可能会有疑问,为什么命令执行成功了,返回的信息却是黄色的,在我们的印象中,执行成功,返回的信息不应该是绿色的吗?这是为什么呢?此处我们暂且不讨论这个话题,后面我们再行解释。

    从返回信息可以看出,执行上述ansible命令后,主机test181和主机test182中的文件已经拉取成功,test181fstab文件被拷贝到了本机的/testdir/ansible目录中,而且,ansible在/testdir/ansible目录中自动创建了目录结构 test181/etc/,由于我们是同时从多台受管主机中拉取相同名称的文件,所以ansible会自动为我们创建各个主机对应的目录,以区分存放不同主机中的同名文件,有没有觉得很方便,很人性化呢?

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

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

    那么我们就来实验一下,看看重复执行相同的ansible命令时,会得到什么效果,效果如下图所示:

    image

    从上图可以看出,返回信息仍然包含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操作时,会对对应文件进行哈希计算,算出文件哈希值,也就是说,如果我们改变了文件中的内容,哈希值也将随之发生改变,这个时候,即使对应目录中存在同名的文件,ansible也会判断出两个文件属于不同的文件,因为它们的哈希值并不相同,我们来实验一下,操作如下:

    image

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

    小结

    列出ansible所支持的模块:

    $ ansible-doc -l
    

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

    $ ansible-doc -s fetch
    

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

    $ ansible all -m ping
    

    调用模块的同时传入模块所需要的参数,以fetch模块为例:

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

    关于ansible模块的基本使用,我们暂时先介绍到这里,希望能够对你有所帮助!

  • 相关阅读:
    layui table表格 表头与内容列错位问题(只有纵向滚动条的情况)
    layui table+复杂表头+合并单元格
    echarts 柱状图
    1-jdk的安装与配置
    变量的解构赋值(对象)
    变量的解构赋值(数组)
    git常用命令
    markdown常用语法
    微信小程序全局/页面配置
    git使用简介(二)
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/16060980.html
Copyright © 2020-2023  润新知