Ansible中“命令”或特定模块执行之间的区别

Fra*_*ona 5 command module 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
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:使用模块而不是命令有任何区别或任何原因吗?

Mic*_*sek 6

简而言之,不同之处在于使用特定模块将使您具有剧本的幂等性,并提供更好的可移植性和可读性。

幂等是什么意思?运行时:

- name: Install git using apt module
  apt:
    name: git
    state: present
Run Code Online (Sandbox Code Playgroud)

仅当尚未在目标系统上安装git软件包时,它才会安装git软件包,并且在playbook运行后,此任务将以绿色报告(OK)。

command模块的第二种方法:

- name: Install git using command
  command: apt-get install git
Run Code Online (Sandbox Code Playgroud)

changed当实际上没有任何更改时(假设已经安装了git软件包),上述命令将始终将状态报告为(黄色)。也有一些方法可以使任务使用command模块幂等,但是这会花费更多的工作。

最佳做法是始终command在剧本之前使用特定的模块。

Ansible就是关于描述和管理系统状态的全部。当您在某个目标系统上运行剧本时,看到一项任务报告changed状态可能很容易产生误导,而实际上没有任何更改。声明式地考虑描述所需的状态,而不是使系统达到此状态所需的低级命令。

下面的文章还将提供有关使用commandvs特定模块的差异和后果的一些解释:

Ansible最佳做法:要点