首页 > 解决方案 > Ansible 运行 Ad Hoc 命令的首选方式

问题描述

我对 Ansible 还是很陌生,刚出生一天,在尝试一些基本的临时命令时,我注意到为了在名为nodes的组上创建一个目录,以下两个命令都有效。

方法一

ansible nodes -a "mkdir /BYANSIBLE_2"

方法二

ansible nodes -m file -a "path=/BYANSIBLE_3 state=touch"

根据文档, -a 表示模块参数,那么为什么方法 1 有效?根据我的理解,仅提供模块的参数而不指定模块本身是行不通的(除非有一些隐含的默认值)。

在此处输入图像描述

另外,作为新手,我应该在使用临时命令时关注方法 1 还是方法 2?

标签: ansible

解决方案


如果命令行中没有提供模块,Ansible 默认使用模块 ansible.builtin.command。该模块仅在远程节点命令行上运行命令,这就是“mkdir 路径”起作用的原因。为你。这个模块的参数是一个命令。

在方法 2 中,您实际上是在调用一个特定的模块“文件”,该模块具有自己的所需参数定义。该模块的参数只是需要创建的路径。

您使用的方法取决于具体情况。如果您在远程节点上测试命令,我会选择方法 1,因为它比显式添加模块名称要快。方法2在意图更明确的意义上更好。

但更重要的是,我尝试为非常小的测试和任务保留临时命令。Ansible 是关于自动化和扩展的,所以我尽可能地尝试创建剧本。

您可以在以下链接中阅读更多内容:

https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html


推荐阅读