Ansible之Ad-Hoc
Posted 运维实谈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible之Ad-Hoc相关的知识,希望对你有一定的参考价值。
Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务。
Ad-Hoc是ansible最常用的命令集,所谓Ad-Hoc,简而言之就是“临时命令”,更为直白的说就是,如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令。
简单说一下Ad-Hoc的应用场景:
情景1:
比如最近nginx的CVE-2018-16843和CVE-2018-16844漏洞,我们需要及时更新到安全版本,这种临时的任务,我们就可以用Ad-Hoc命令完成。
情景2:
临时调整nginx或apache或php配置,需要同事分发配置到所有web服务器。
所以Ad-Hoc更注重解决一些简单的或者临时的任务,而Ansible-playbook更适合于解决复杂的,固定化的任务。
Ad-Hoc命令集由/usr/bin/ansible实现,首先看一下命令用法说明:
ansible <host-pattern> [option]
host-pattern是指目标主机,可以是一个主机,可以是多个主机用逗号分隔,可以是Inventory中定义的组或别名。
option是可选项,常用的可选项包括以下:
-v,--verbose:输出更详细的执行过程信 息,vvv 可得到执行过程所有信息
-i PATH,--inventory=PATH:指定 inventory 信息,默认/etc/ansible/hosts
-f NUM,一forks=NUM:并发线程数 ,默认 5 个线程
--private-key=PRIVATE_KEY_FILE:指定密钥文件
-m NAME,--module-name=NAME:指定执行使用的模块
-M DIRECTORY,--module-path= DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE LIBRARY设定默认路径
-a 'MODULE_ARGS', --args=MODULE_ARGS:模块参数
-k,--ask-pass:认证密码
-K,--ask-become-pass:用户的密码(sudo 时使用)
-o,--one-line :标准输出至一行
-s,--sudo:相当于 Linux 系统下的 sudo 命令
-t TREE,--tree=TREE:输出信息至 DIRECTORY目录下,结果文件以远程主机名命名
-T TIMEOUT,--timeout=TIMEOUT:指定连接远程主机的最大超时,单位是秒
-B SECONDS, --background=SECONDS:后台执行命令,超SECONDS秒后中止正在执行的任务
-P POLL_INTERVAL,--poll=POLL_INTERVAL:定期返回后台任务进度
-u REMOTE_USER,--user=REMOTE_USER:指定远程主机以-REMOTE_USER运行命令
-U SUDO_USER,--sudo-user=SUDO_USER:使用sudo,相当于Linux下的 sudo 命令
-c CONNECTION,--connection=CONNECTION:指定连接方式 ,默认为smart
-1 SUBSET,--limit=SUBSET:指定运行主机
--list-hosts:列出符合条件的主机列表,不执行任何命令
-C,--check:不对目标主机做任何修改,只测试并返回结果
注意,在新版本中sudo该为become,所以在用新版本的时候要留意。方便理解,下面用几个例子来看一下以上命令的效果。
示例1:ping检测
该示例直接指定目标主机IP,指定ping模块运行。执行结果中SUCCESS表示执行成功,后面是返回的详细结果,"changed":"false"这里表示没有对主机做变更,"ping":"pong"表示执行了ping命令返回的pong结果。
示例2:返回目标主机的内核版本信息
使用-vvv参数可以清楚的了解Ansilbe的命令执行过程,包括模块的调用,临时文件的创建等。
Ansible命令执行流程图
示例3:列出某组所有影响的目标主机
在对目标组执行命令前,为了确保目标主机正确,可以通过该参数查看会影响到的目标主机列表。
示例4:利用file模块在远端服务器上创建个指定权限的文件夹
删除文件夹
修改文件权限
修改所属用户用户组
注意,当目标主机存在selinux的时候,需要安装libselinux-python模块,否则无法使用Ansible中copy/file/template相关模块,如下:
示例5:利用shell模块给目标主机安装libselinux-python
安装完成后再尝试copy模块传输文件
上面安装软件包是通过shell的饭时调用yum命令去安装的,Ansible也支持yum和apt模块
示例6:利用yum模块安装软件
示例7:利用git模块直接部署webapp
举了这么多例子,那么怎么知道ansible支持哪些模块呢,这些模块怎么用呢?
Ansible也提供类似于linux下man功能的说明工具ansible-doc,首先看一下用法:
目前我使用的最新版本2.7的支持的模块数量
查看yum模块的用法:
是不是很详细!!!
通过上面的几个例子,我们可以看待,其实Ansible的返回结果非常友好,特别是从颜色上,一般通过3种颜色来表示执行结果:红色、绿色、橘黄色。其中红色表示执行过程种有异常,一般会终止执行;绿色和橘黄色表示执行过程没有异常,所有任务正常执行,区别在于橘黄色表示执行命令结束后目标主机有状态变化,而绿色表示执行命令结束后目标状态没有变化。
想继续了解Ansible-playbook,请持续关注。
以上是关于Ansible之Ad-Hoc的主要内容,如果未能解决你的问题,请参考以下文章