Ad-hoc 命令是什么呢? 这其实是⼀个概念性的名字,是相对于写Ansible playbook 来说的.类似于在命令⾏敲⼊shell命令和 写shell scripts两者之间的关系。可以⽤于执⾏⼀些临时命令。
如果我们敲⼊⼀些命令去⽐较快的完成⼀些事情,⽽不需要将这些执⾏的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令。
Ansible提供两种⽅式去完成任务,⼀是 ad-hoc 命令,⼀是写Ansible playbook。
前者可以解决⼀些简单的任务, 后者解决较复杂的任务,⽐如做配置管理或部署。
1.命令格式
简介:
在快速⼊⻔中执⾏的 Ansible 命令,类似于批量执⾏命令。在Ansible 中统称为Ansible Ad-Hoc。
命令格式如下:
ansible pattern [-i inventory] -m module -a argument
pattern 资产选择器:
- -i 指定资产清单⽂件的位置
- -m 指定本次Ansible ad-hoc 要执⾏的模块。可以类别成SHELL 中的命令。
- -a 模块的参数. 可以类⽐成SHELL 中的命令参数
实例:
ansible all -i 192.168.244.188,192.168.244.198 -m copy -a "src=/tmp/a.conf dest=/tmp/a.conf"
意思是将192.168.244.188服务器主机中的/tmp/a.conf复制到192.168.244.198中,并且路径也是/tmp。
2.模块类型
Ansible 模块分三种类型: 核⼼模块(core module)、附加模块(extra module)及⽤户⾃定义模块(consume module)。
核⼼模块是由Ansible 的官⽅团队提供的。
附加模块是由各个社区提供的。例如: OPENSTACK 社区、DOCKER 社区等等。
当核⼼模块和附加模块都⽆法满⾜你的需求时,⽤户可以⾃定义模块。
默认情况下,在安装Ansible 的时候, 核⼼模块和附加模块都已经安装⽽⽆需⽤户⼲预。
3.联机帮助
Ansible 的核⼼模块和附加模块,数量有3000+ 。这样庞⼤的模块数量,对于任何⼀个接触Ansible 的⼈都不可能将其完全记住、掌握使⽤。 因此能够顺利使⽤Ansible 的帮助⽂档,对我们来说是很有必要的。Ansible 的帮助⽂档,由它本身提供的命令 ansible-doc 实现。
常用帮助参数:
a.列举出所有核心模块和附加模块
ansible-doc -l
b.查询某个模块的使用方法
ansible-doc <modulename>
c.查询某个模块的使用方法,比较简洁的信息
ansible-doc -s <modulename>
4.常用模块
为了便于演示和操作,现在把之前的测试主机 IP 192.168.244.188和192.168.244.198保存到 当前⽬录下的 hosts ⽂件中。
a.command&shell模块
两个模块都是在远程服务器上去执⾏命令。
但command模块是ad-hoc的默认模块,在执⾏ad-hoc时,若不指定模块的名字则默认使⽤此模块。
ansible all -i hosts -a "echo 'hello'"
ansible all -i hosts -m shell -a "echo 'hello'"
两个模块的差异:
- shell 模块可以执⾏SHELL 的内置命令和 特性(⽐如管道符)
- command 模块⽆法执⾏SHELL 的内置命令和特性
例子:
ansible all -i hosts -m shell -a "echo 'hello'|grep -o 'e'"