Ansible:测试SSH登录是否可能没有FATAL错误?

问题描述 投票:7回答:2

我有一个设置手册,它采用新安装的Linux实例,以默认用户身份登录(我们将调用user1),创建另一个用户(我们将调用user2),然后禁用user1。因为user1只能在执行这组任务之前访问实例,所以任务都在一个特殊的playbook中,我们必须记住在新实例上运行。之后,所有常见任务都由user2运行,因为user1不再存在。

我想结合设置和普通的剧本,这样我们就不用再手动运行设置剧本了。我尝试创建一个任务,以查看实例上存在哪个用户,通过尝试通过SSH作为user1登录来使原始设置任务成为条件。问题是,如果我为任一用户尝试SSH登录,则ansible退出时会出现FATAL错误,因为它无法登录:user2在新实例上尚不存在,或者在执行安装程序手册后已禁用user1。

我相信通过SSH测试登录是确定实例所处的条件的唯一方法。有没有办法测试SSH登录而不会出现致命错误然后根据结果有条件地执行任务?

ansible
2个回答
9
投票

一种方法是通过local_action使用shell来向user1调用一个简单的ssh命令,看看它是否成功。这些方面的东西:

- name: Test for user1
  local_action: shell ssh user1@{{ inventory_hostname }} "echo success"
  register: user1_enabled

然后你可以在另一个任务中使用这样的东西来看它是否有效:

  when: user1_enabled.stdout.find("success") != -1

3
投票

使用Ansible> = 2.5,可以使用wait_for_connection_modulehttps://docs.ansible.com/ansible/2.5/modules/wait_for_connection_module.html)。

- name: Wait 600 seconds for target connection to become reachable/usable
  wait_for_connection:
© www.soinside.com 2019 - 2024. All rights reserved.