Ansible 之旅(五) 运行 Ad Hoc
通过 Ansible 执行 Ad Hoc
所谓的 Ad Hoc
简而言之就是 临时命令。
Ad Hoc
是一种快速执行单个 Ansible 任务的方法,它不需要为下次运行而保存起来,非常简单,只需运行一行命令,不需要写到 Ansible Playbook 当中。所以 Ad Hoc
更加注重解决一些简单或平时工作中临时遇到的任务,而 Ansible Playbook 更适合解决复杂的且需要固化下来的任务。
运行 Ad Hoc
使用 ansible
命令来运行 Ad Hoc
:
ansible host-pattern -m module [-a ‘moudule args’] [-i inventory]
参数 | 说明 |
---|---|
host-pattern | inventory 中存在的主机或主机组 |
-m | Ansible 模块名称 |
-a | Ansible 模块参数 |
Example:
$ ansible all -m ping
$ ansible all -m yum -a "name=httpd state=latest"
需要注意的是Ad hoc 一行命令只能使用一个模块。
运行 Ad hoc 使用模块执行任务
Ansible 在安装时提供了数百个模块,不同的模块适应不同的任务需求,可以做不同的事情。
运行 ansible-doc -l
可以列出系统中已安装的模块列表:
$ ansible-doc -l
a10_server Manage A10 Networks AX/SoftAX/Thu...
a10_server_axapi3 Manage A10 Networks AX/SoftAX/Thu...
a10_service_group Manage A10 Networks AX/SoftAX/Thu...
a10_virtual_server Manage A10 Networks AX/SoftAX/Thu...
accelerate Enable accelerated mode on remote...
ansible-doc
命令也可以用来查看模块的文档:
$ ansible-doc ping
模块文档也可以参考 Ansible 官网的在线文档:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
实用的模块
Ansible 的模块数以千计,以下是平时使用频率比较高的模块:
模块名称 | 模块用途 |
---|---|
copy | 拷贝本地文件到托管主机 |
get_url | 下载文件到托管主机 |
synchronize | 同步本地文件到托管主机,类似 rsync |
file | 创建文件或目录以及权限的设置 |
lineinfile | 编辑文件中行的内容,添加或正则替换 |
此外还有:
软件管理类: yum dnf apt pip gem
系统管理员工具类: service user group
command 模块
command
模块可以允许管理员在托管主机的命令行上执行任意的命令,使用 -a
选项来指定运行的命令,使用 -o
选项将输出显示一行。
command
模块可以让管理员在托管主机上快速的执行命令,但是它的实现方式不是使用 Shell
,所以它不能访问 Shell
的变量以及无法使用 Shell
的功能,如:管道重定向。如果需要使用 Shell
的变量和其功能,可以选择使用 shell
模块。
command
和 shell
模块都依赖托管主机上的 Python
环境,但是在网络设备中,如交换机和路由器可能无法满足,此时可以使用 raw
模块来执行命令,这个模块不依赖 Python
环境,非常适合网络设备。
Ad hoc 的连接属性
在前面提到了连接托管主机的前提是需要知道如何与托管主机进行通信,在执行 Ad hoc
时默认使用 Ansible 配置文件[1]中的值,但也可以在执行命令时通过选项进行定义:
Setting | Command-line Option |
---|---|
inventory | -i |
remote_user | -u |
become | -b |
become_method | --become-method |
become_user | --become-user |
become_ask_pass | --ask-become-pass or -K |
使用命令选项时优先级最高,所以会覆盖配置文件中的配置。
评论已关闭