如果该控制服务器没有运行 SSH 守护程序,我如何在 Ansible 控制服务器上运行本地命令?
如果我运行以下剧本:
- name: Test commands
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Test local action
local_action: command echo "hello world"
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host localhost port 22: Connection refused", "unreachable": true}
似乎local_action与 相同delegate_to: 127.0.0.1,因此 Ansible 尝试通过 ssh 连接到本地主机。但是,本地控制器主机上没有运行 SSH 守护程序(仅在远程机器上)。
所以我的直接问题是如何从 Ansible 运行特定命令,而无需 Ansible 首先尝试通过 SSH 连接到 localhost。
关键的补充,不在原来的问题中:
我的 host_vars 包含以下行:
ansible_connection: ssh
Run Code Online (Sandbox Code Playgroud)
如何从 Ansible 运行特定命令,而无需 Ansible 首先尝试通过 SSH 连接到 localhost。
connection: local 足以使任务在不使用 SSH 的情况下在控制器中运行。
尝试,
- name: Test commands
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Test local action
command: echo "hello world"
Run Code Online (Sandbox Code Playgroud)
我自己回答细节,也许对某人有用:
就我而言:
ansible_connection被设置为ssh在host_vars.ansible_host被设置localhost为local_action.这结合起来让我们ssh失败localhost了。
进一步考虑:
delegate_to、local_actionsetansible_host和ansible_connection,但 host_vars、剧本或任务中的任何设置都会覆盖它。connection: local仅设置ansible_connection(ansible_host未修改),但ansible_connectionhost_vars、剧本或任务中的任何设置都会覆盖它。所以我的解决方案是删除host_vars 中的 ,或者在任务中ansible_connection设置 var 。ansible_connection
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |