如果该控制服务器没有运行SSH守护程序,该如何在Ansible控制服务器上运行本地命令?
如果我运行以下剧本:
- name: Test commands
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Test local action
local_action: command echo "hello world"
我收到以下错误:
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到本地主机。
关键性加法,而不是原始问题:
我的host_vars包含以下行:
ansible_connection: ssh
答案 0 :(得分:3)
如何从Ansible运行特定命令,而无需Ansible首先尝试通过SSH到本地主机。
connection: local
足以使任务在控制器中运行而无需使用SSH。
尝试
- name: Test commands
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Test local action
command: echo "hello world"
答案 1 :(得分:1)
我自己回答细节,也许对某人有用:
就我而言:
ansible_connection
在ssh
中设置为host_vars
。ansible_host
由localhost
设置为local_action
。此操作使失败的ssh
至localhost
组合起来。
更多注意事项:
delegate_to
,local_action
设置了ansible_host
和ansible_connection
,但是host_vars,剧本或任务中的任何设置都会覆盖它们。connection: local
仅设置ansible_connection
(ansible_host
未修改),但是host_vars,剧本或任务中的ansible_connection
设置均会覆盖它。所以我的解决方案是在host_vars中删除ansible_connection
,或者在任务中设置var ansible_connection
。
答案 2 :(得分:0)
这对我来说看起来不对。
- name: import profiles of VMs
connection: local
hosts: localhost
gather_facts: false
tasks:
- name: list files
find:
paths: .
recurse: no
delegate_to: localhost
他还在问我 ssh 密码:
❯ ansible-playbook playbooks/import_vm_profiles.yml -i localhost, -k [WARNING]: Unable to parse the plugin filter file /Users/fredericclement/devops/ansible_refactored/etc/Plugin_filters.yml as module_blacklist is not a list. Skipping.
SSH password: