Ansible delegate_to 任务尝试 ssh

Oba*_*oof 4 ansible ansible-inventory

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

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

- hosts: db-servers
  roles:
  - role: test
Run Code Online (Sandbox Code Playgroud)

角色定义 ( 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
Run Code Online (Sandbox Code Playgroud)

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

[db-servers]
localhost
Run Code Online (Sandbox Code Playgroud)

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

ansible-playbook -i inv/test playbook.yml -vvv
Run Code Online (Sandbox Code Playgroud)

无论如何,我是否可以阻止此 ssh 连接检查?

tec*_*raf 6

添加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
Run Code Online (Sandbox Code Playgroud)

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

127.0.0.1 ansible_connection=local
Run Code Online (Sandbox Code Playgroud)

  • 然后在播放级别定义 `connection: local` 并删除所有 `delegate_to`。您也根本不需要库存文件。但问题变得非常基本......答案在 Ansible 入门指南的第一页上。顺便说一句,您不能为“剧本”设置任何内容,因为剧本只是一个文件。它不作为 Ansible 中的任何实体存在。Ansible 使用剧本、任务等,但剧本只是一个包含剧本的文件。 (2认同)