"command" 或 Ansible 中特定模块执行之间的区别
Difference between "command" or specific module execution in Ansible
我从 Ansible 开始,我发现有一个名为 command
的模块可以让我在远程节点中执行任何命令。
我看到了几个示例,其中初始设置是通过使用 command
而不是特定模块来解决的。例如,据我所知,这两个都执行相同的任务:
- name: Install git using apt module
apt:
name: git
state: present
- name: Install git using command
command: apt-get install git
所以,我的问题是:使用模块而不是命令有什么不同或有什么理由吗?
可能有很多原因,但这里有几个:
- 内在幂等性(不会每次都执行task不费力)
- 出色的可读性(更清楚你想要做什么)
- 更简洁的任务(描述任务的单词更少)
- 与平台无关的执行(适用于所有 OS 而不是只需要一个而无需额外努力)
简而言之,不同之处在于使用特定的模块将为您提供 playbook 的幂等性,并提供更好的可移植性和可读性。
幂等性是什么意思?当你 运行:
- name: Install git using apt module
apt:
name: git
state: present
仅当目标系统上尚未安装 git 包时才会安装它,并且在 playbook 运行 之后,此任务将以绿色 (OK
) 报告,如果 git 已经安装。
command
模块的第二种方法:
- name: Install git using command
command: apt-get install git
以上命令总是将状态报告为 changed
(黄色),而实际上什么都没有改变(假设已经安装了 git 包)。也有一些方法可以使使用 command
模块的任务成为幂等的,但它会花费您更多的工作。
最佳做法是始终在剧本 command
之前使用特定模块。
Ansible 就是关于描述和管理系统状态的。当您在某个目标系统上 运行 剧本时,如果看到任务报告 changed
状态而实际上什么都没有改变,这可能会产生误导。
以声明方式考虑描述所需状态,而不是让系统达到此状态所需的低级命令。
下面的文章还将提供一些关于使用 command
与特定模块的区别和后果的解释:
我从 Ansible 开始,我发现有一个名为 command
的模块可以让我在远程节点中执行任何命令。
我看到了几个示例,其中初始设置是通过使用 command
而不是特定模块来解决的。例如,据我所知,这两个都执行相同的任务:
- name: Install git using apt module
apt:
name: git
state: present
- name: Install git using command
command: apt-get install git
所以,我的问题是:使用模块而不是命令有什么不同或有什么理由吗?
可能有很多原因,但这里有几个:
- 内在幂等性(不会每次都执行task不费力)
- 出色的可读性(更清楚你想要做什么)
- 更简洁的任务(描述任务的单词更少)
- 与平台无关的执行(适用于所有 OS 而不是只需要一个而无需额外努力)
简而言之,不同之处在于使用特定的模块将为您提供 playbook 的幂等性,并提供更好的可移植性和可读性。
幂等性是什么意思?当你 运行:
- name: Install git using apt module
apt:
name: git
state: present
仅当目标系统上尚未安装 git 包时才会安装它,并且在 playbook 运行 之后,此任务将以绿色 (OK
) 报告,如果 git 已经安装。
command
模块的第二种方法:
- name: Install git using command
command: apt-get install git
以上命令总是将状态报告为 changed
(黄色),而实际上什么都没有改变(假设已经安装了 git 包)。也有一些方法可以使使用 command
模块的任务成为幂等的,但它会花费您更多的工作。
最佳做法是始终在剧本 command
之前使用特定模块。
Ansible 就是关于描述和管理系统状态的。当您在某个目标系统上 运行 剧本时,如果看到任务报告 changed
状态而实际上什么都没有改变,这可能会产生误导。
以声明方式考虑描述所需状态,而不是让系统达到此状态所需的低级命令。
下面的文章还将提供一些关于使用 command
与特定模块的区别和后果的解释: