Ansible 哪一个更好?直接从控制机执行脚本还是复制并在本地执行?

Ansible 哪一个更好?直接从控制机执行脚本还是复制并在本地执行?,ansible,ansible-playbook,ansible-2.x,Ansible,Ansible Playbook,Ansible 2.x,在目标计算机上运行脚本有以下两种方法: 1. - name: run the script from the control machine directly. script: "{{path_to_scripts}}/script.sh" 2. - name: Copying the script from target machine. copy: src="{{path_to_scripts}}/script.sh" dest="{{path_to_scrip

在目标计算机上运行脚本有以下两种方法:

1.  - name: run the script from the control machine directly.
      script: "{{path_to_scripts}}/script.sh"

2.  - name: Copying the script from target machine.
      copy: src="{{path_to_scripts}}/script.sh" dest="{{path_to_scripts}}/script.sh" mode=0777

    - name: Execute script locally.
      command: /bin/sh {{path_to_scripts}}/script.sh
因为我正在对30多台目标机器运行剧本。我想知道哪一个会是更好的选择


另外,如果我更喜欢一个脚本而不是另一个脚本,那么性能损失是什么呢?

如果脚本必须在远程计算机上执行某些操作,那么最好是复制它并直接在远程计算机上执行。我认为在这两种情况下,您不会看到任何明显的性能下降


唯一的问题是在案例1中。您必须使用ssh连接到远程服务器并执行所需的命令,ansible已经为您完成了这项工作

如果您正在从ansible机器执行脚本,ansible服务器将把脚本复制到远程机器中的临时位置以执行

因此,更好的选择是“直接从控制机器运行脚本”,原因如下

  • 复制脚本不需要ssh到所有30台机器
  • 您可以使用一行代码来执行同样的操作,这需要2 步骤(复制并执行)
  • 没有性能差异,因为两种方法所做的是相同的 操作

  • 请注意,“性能如何”的问题最好通过运行代码来回答。我在本地运行该代码是为了在目标主机上验证某些内容。但它只是在本地进行验证,例如,如果我必须验证target hot中的目录是否为空,那么它只在本地进行验证。例如,-name:检查空目录脚本:/home/npwa ansible/utility/xyz/files/empty\u dir\u bash.sh”/some\u target\u dir\u location“