Ansible 使用非标准 ssh 端口设置独立剧本

Ansible 使用非标准 ssh 端口设置独立剧本

我使用非标准 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在建立正确的端口后明确添加任务。

相关内容