【问题标题】:Ansible delegate_to task trying to sshAnsible delegate_to 任务尝试 ssh
【发布时间】:2017-07-11 13:20:43
【问题描述】:

我有一个简单的 ansible 角色和这个角色中的几个基本任务。所有任务都定义为local_action(或delegate_to: localhost)。 playbook 中定义的主机也是localhost

现在当我运行这个剧本时,它首先会在执行角色/任务之前尝试测试 ssh 连接。这不是问题,但我发现在运行明确将localhost 作为主机的剧本之前,没有必要建立或测试 ssh 连接。以下是我的剧本 (playbook.yml) 的样子:

- hosts: db-servers
  roles:
  - role: test

角色定义(roles/test/tasks/main.yml)如下所示:

---
  - name: Resolve and copy test configuration
    template:
      src: "roles/test/templates/temp.conf"
      dest: "roles/test/files/temp-4.2.0/temp.conf"
    delegate_to: 127.0.0.1
    become: no

  - name: Run test job
    delegate_to: 127.0.0.1
    command: roles/test/files/test-4.2.0/test.sh
    become: no

以下是我的库存文件inv/test

[db-servers]
localhost

我正在使用这个命令来运行我的剧本:

ansible-playbook -i inv/test playbook.yml -vvv

无论如何我可以阻止这个 ssh 连接检查?

【问题讨论】:

  • 如果剧本指定hosts: 127.0.0.1,那么delegate_to: 127.0.0.1是不必要的。
  • 是的,但是即使任务是delegate_to: 127.0.0.1,ansible 仍然会在开始时尝试 ssh 到 127.0.0.1。我的目标是完全避免这种不必要的 ssh。
  • 是的——为此,@techraf 提出了正确的建议:connection: local

标签: ansible ansible-inventory


【解决方案1】:

connection: local 添加为任务属性。

- name: Run test job
  delegate_to: 127.0.0.1
  connection: local
  command: roles/test/files/test-4.2.0/test.sh
  become: no

或者在清单中定义主机并分配连接类型:

127.0.0.1 ansible_connection=local

【讨论】:

  • 我还没有尝试过第一种解决方案,但我认为 Ansible 在本地运行任务之前仍会尝试验证与目标主机的 ssh 连接(因为这发生在执行任务之前的启动时。或者我的想法错了吗?
  • 是的,我还没有尝试过您的第一个解决方案,但感觉它可能行不通。我会试一试,现在在这里发表评论!
  • 抱歉,StackOverflow 与您的感受无关。您实际上是在说:我懒得验证您的答案,所以我会打扰您确认一下。
  • 是的,所以您的第一个解决方案不起作用。如果我在清单中没有 ansible_connection=local 并且在任务上定义了 connection: local,Ansible 仍然会在本地执行任务之前尝试 ssh 到目标主机。您介意更新您的答案吗?
  • 然后在播放级别定义connection: local并删除所有delegate_to。您也根本不需要库存文件。但是问题变得非常基本......答案在 Ansible 入门指南的第一页。顺便说一句,您不能为“剧本”设置任何内容,因为剧本只是一个文件。它在 Ansible 中不作为任何实体存在。 Ansible 使用剧本、任务等,但剧本只是一个包含剧本的文件。
猜你喜欢
  • 1970-01-01
  • 2018-07-22
  • 2019-08-08
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 2017-02-27
相关资源
最近更新 更多