我使用非标准 ssh 端口设置了服务器。我想找到一种方法来构建一个强大的主剧本,但我UNREACHABLE
在收集事实时似乎遇到了错误。
我一直试图用这篇文章作为指南:https://dmsimard.com/2016/03/15/changing-the-ssh-port-with-ansible/
但是,如果我的端口配置不同,我甚至无法进入第一步。
我的主要剧本是这样的:
# master playbook
---
- name: Install all the packages for a server
hosts: test-collection-01
vars_files:
- vars/test_collection.yml
remote_user: foo_user
roles:
- debugger
然后,调试剧本包含了上述博客文章中的大部分内容。
---
- name: DEBUG FACTS
debug:
msg: 'ansible port: {{ ansible_port }}\,Configured Hostname: {{ inventory_hostname }}'
- name: Try initial ssh port
set_fact:
ansible_port: 22
...
但是,如果我的服务器已经将其ssh
端口更改为其他端口,则剧本甚至不会运行,并且会在“收集事实”步骤中失败。
TASK [Gathering Facts]
***
fatal: [198.199.x.x]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 198.199.x.x port 22: Connection refused\r\n", "unreachable": true}
有没有办法在“收集事实”期间或之前运行端口检查代码?
答案1
在执行任何任务之前,Ansible 默认会隐式运行一个setup
使用默认连接参数的任务(收集事实),这就是您的操作失败的地方。
添加gather_facts: false
到您的游戏中以避免这种情况:
---
- name: Install all the packages for a server
hosts: test-collection-01
gather_facts: false
vars_files:
- vars/test_collection.yml
remote_user: foo_user
roles:
- debugger
然后,如果您需要事实,请setup
在建立正确的端口后明确添加任务。