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模块的用法,如下所示

[root@node1 ~]# ansible-doc -s fetch
- name: Fetches a file from remote nodes
fetch:
dest: # (required) A directory to save the file into. For example, if the `dest' directory is `/backup' a `src' file named `/etc/profile' on host
`host.example.com', would be saved into `/backup/host.example.com/etc/profile'
fail_on_missing: # When set to 'yes', the task will fail if the remote file cannot be read for any reason. Prior to Ansible-2.5, setting this would only fail if
the source file was missing. The default was changed to "yes" in Ansible-2.5.
flat: # Allows you to override the default behavior of appending hostname/path/to/file to the destination. If dest ends with '/', it will use the
basename of the source file, similar to the copy module. Obviously this is only handy if the filenames are unique.
src: # (required) The file on the remote system to fetch. This `must' be a file, not a directory. Recursive fetching may be supported in a later
release.
validate_checksum: # Verify that the source and destination checksums match after the files are fetched. 从帮助信息中可以看出,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模块入手,看看怎样使用带有参数的模块吧~ 在开始之前,先来看一下我们的主机清单配置,配置如下 [testA]
test211 ansible_host=10.11.0.211
test212 ansible_host=10.11.0.212 [testB]
test215 ansible_host=10.11.0.215 [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。 那么,我们一起来看一下上述命令的执行效果吧,如下: [root@node1 ~]# ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"
test211 | SUCCESS => {
"changed": true,
"checksum": "a16ede4fdd8bee1d3d7dd17ba215c2c7b02f73c2",
"dest": "/testdir/ansible/test211/etc/fstab",
"md5sum": "986ef4903bc024ce02128a26bb215754",
"remote_checksum": "a16ede4fdd8bee1d3d7dd17ba215c2c7b02f73c2",
"remote_md5sum": null
}
test212 | SUCCESS => {
"changed": true,
"checksum": "0d74405ea72d877d5bece3d8ff53bf22d5c7fd21",
"dest": "/testdir/ansible/test212/etc/fstab",
"md5sum": "a16411efa0a2e753f3e0e8124530d1ea",
"remote_checksum": "0d74405ea72d877d5bece3d8ff53bf22d5c7fd21",
"remote_md5sum": null
}
从命令的执行结果可以看出,上述命令执行成功了,因为两个主机对应的返回信息都返回了"SUCCESS"字样。 你可能会有疑问,为什么命令执行成功了,返回的信息却是"黄色"的,在我们的印象中,执行成功,返回的信息不应该是"绿色"的吗?这是为什么呢?此处我们暂且不讨论这个话题,后面我们再行解释。 从返回信息可以看出,执行上述ansible命令后,主机test211和主机test212中的文件已经拉取成功,test212的fstab文件被拷贝到了本机的/testdir/ansible目录中,而且,ansible在/testdir/ansible目录中自动创建了目录结构 test212/etc/,由于我们是同时从多台受管主机中拉取相同名称的文件,所以ansible会自动为我们创建各个主机对应的目录,以区分存放不同主机中的同名文件,有没有觉得很方便,很人性化呢~? 之前说过,ansible具有幂等性,幂等性能够保证我们重复的执行一项操作时,得到的结果是相同的,我们再来回顾一下幂等性的概念。 "幂等性"是什么意思呢?举个例子,你想把一个文件拷贝到目标主机的某个目录上,但是你不确定此目录中是否已经存在此文件,当你使用ansible完成这项任务时,就非常简单了,因为如果目标主机的对应目录中已经存在此文件,那么ansible则不会进行任何操作,如果目标主机的对应目录中并不存在此文件,ansible就会将文件拷贝到对应目录中,说白了,ansible是"以结果为导向的",我们指定了一个"目标状态",ansible会自动判断,"当前状态"是否与"目标状态"一致,如果一致,则不进行任何操作,如果不一致,那么就将"当前状态"变成"目标状态",这就是"幂等性","幂等性"可以保证我们重复的执行同一项操作时,得到的结果是一样的。 那么我们就来实验一下,看看重复执行相同的ansible命令时,会得到什么效果,效果如下所示 [root@node1 ansible]# ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"
test211 | SUCCESS => {
"changed": false,
"checksum": "a16ede4fdd8bee1d3d7dd17ba215c2c7b02f73c2",
"dest": "/testdir/ansible/test211/etc/fstab",
"file": "/etc/fstab",
"md5sum": "986ef4903bc024ce02128a26bb215754"
}
test212 | SUCCESS => {
"changed": false,
"checksum": "0d74405ea72d877d5bece3d8ff53bf22d5c7fd21",
"dest": "/testdir/ansible/test212/etc/fstab",
"file": "/etc/fstab",
"md5sum": "a16411efa0a2e753f3e0e8124530d1ea"
} 从上图可以看出,返回信息仍然包含"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也会判断出两个文件属于不同的文件,因为它们的哈希值并不相同,我们来实验一下,操作如下 [root@node1 ansible]# echo ' ' >> /testdir/ansible/test212/etc/fstab
[root@node1 ansible]# ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"
test211 | SUCCESS => {
"changed": false,
"checksum": "a16ede4fdd8bee1d3d7dd17ba215c2c7b02f73c2",
"dest": "/testdir/ansible/test211/etc/fstab",
"file": "/etc/fstab",
"md5sum": "986ef4903bc024ce02128a26bb215754"
}
test212 | SUCCESS => {
"changed": true,
"checksum": "0d74405ea72d877d5bece3d8ff53bf22d5c7fd21",
"dest": "/testdir/ansible/test212/etc/fstab",
"md5sum": "a16411efa0a2e753f3e0e8124530d1ea",
"remote_checksum": "0d74405ea72d877d5bece3d8ff53bf22d5c7fd21",
"remote_md5sum": null
} 如上所示,我们在/testdir/ansible/test212/etc/fstab文件的尾部加入一个"空格",以改变文件内容,然后又执行了fetch命令,我们发现,test212的返回信息为黄色,test211主机的返回信息为绿色,证明ansible已经做出了正确的判断,将修改过的文件替换了,替换为重新拉取的文件。 小结
我们对上文的一些命令进行总结,方便以后回顾 列出ansible所支持的模块 ansible-doc -l 查看模块的详细帮助信息,比如查看fetch模块的帮助 ansible-doc -s fetch 调用模块,比如调用ping模块 ansible all -m ping 调用模块的同时传入模块所需要的参数,以fetch模块为例 ansible 10.11.0.211 -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"

ansible笔记(3):ansible模块的基本使用的更多相关文章

  1. ansible笔记(7):常用模块之系统类模块

    ansible笔记():常用模块之系统类模块 cron模块 cron模块可以帮助我们管理远程主机中的计划任务,功能相当于crontab命令. 在了解cron模块的参数之前,先写出一些计划任务的示例,示 ...

  2. ansible笔记(8):常用模块之系统类模块(二)

    ansible笔记():常用模块之系统类模块(二) user模块 user模块可以帮助我们管理远程主机上的用户,比如创建用户.修改用户.删除用户.为用户创建密钥对等操作. 此处我们介绍一些user模块 ...

  3. ansible笔记(9):常用模块之包管理模块

    ansible笔记():常用模块之包管理模块 yum_repository模块 yum_repository模块可以帮助我们管理远程主机上的yum仓库. 此处我们介绍一些yum_repository模 ...

  4. ansible笔记(6):常用模块之命令类模块

    ansible笔记():常用模块之命令类模块 command模块 command模块可以帮助我们在远程主机上执行命令 注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处 ...

  5. ansible笔记(5):常用模块之文件操作(二)

    ansible笔记():常用模块之文件操作(二) 文件操作类模块 find模块 find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样. 此处我们介绍一些find模块的常用参数, ...

  6. ansible笔记(12):handlers的用法

    ansible笔记():handlers的用法 这篇文章会介绍playbook中handlers的用法. 在开始介绍之前,我们先来描述一个工作场景: 当我们修改了某些程序的配置文件以后,有可能需要重启 ...

  7. ansible笔记(11):初识ansible playbook(二)

    ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...

  8. ansible笔记(10):初识ansible playbook

    ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...

  9. ansible笔记(1)在centos中安装ansible

    ansible笔记():ansible的基本概念 一些基础概念 ansible是什么? 它是一个"配置管理工具",它是一个"自动化运维工具",如果你没有使用过任 ...

随机推荐

  1. Openresty 学习笔记(四)lualocks包管理器安装使用

    Luarocks是一个Lua包管理器,基于Lua语言开发,提供一个命令行的方式来管理Lua包依赖.安装第三方Lua包等,社区比较流行的包管理器之一,另还有一个LuaDist,Luarocks的包数量比 ...

  2. 657. Robot Return to Origin

    Description There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequenc ...

  3. JS中var、let、const区别? 用3句话概括

    使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象: 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升: 使用const声明的是常量,在后面出现的代码中不能再修 ...

  4. C# Math.Round实现中国式四舍五入

    decimal sum = 11111.334; sum = , MidpointRounding.AwayFromZero);  sum:11111.33decimal sum = 11111.34 ...

  5. C++ vector和list的主要用法区别

    vector可以直接通过下标访问,list不可以 1.vector ; i < userTypes.size(); i++) { str = userTypes[i].typeName; } 2 ...

  6. Nginx - 配置 SSL证书

    nginx 配置 ssl 证书: 在nginx配置目录创建 cert目录 放置 SSL 的证书秘钥: 也可以使用配置绝对路径 /file/cert/cert.pem server { listen s ...

  7. 第21月第6天 zhihu如何用3个月零基础入门机器学习

    1. 我们应该记住,既成的事实一定有它的道理,如果我们不能理解它,恐怕得从自身找原因.如果你交易股票,请记住,如果预测和市场不一致,错的是预测,而不是市场 https://www.cnblogs.co ...

  8. 第19月第20天 UITableView:改变 TableHeaderView 的高度 获取目录大小

    1.UITableView:改变 TableHeaderView 的高度 CGRect newFrame = headerView.frame; newFrame.size.height = newF ...

  9. eslint 关于CRLF或者LF报错

    在拉取项目代码时,如果有eslint代码校验,但是本地打开会有于CRLF或者LF报错报错,那么怎么处理呢? git有个自动转换换行符功能,在文件commit时会自动转换换行符格式: 不想使用,也可以通 ...

  10. scss转css的过程中 转化问题

    如果  在转化过程中语法没有问题的话    测试一下是否是文件的bom头的问题