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

Dav*_*ern 8 ansible

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

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

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

Bru*_*e P 10

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

- name: Test for user1
  local_action: shell ssh user1@{{ inventory_hostname }} "echo success"
  register: user1_enabled
Run Code Online (Sandbox Code Playgroud)

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

  when: user1_enabled.stdout.find("success") != -1
Run Code Online (Sandbox Code Playgroud)


Chr*_*ndt 5

对于 Ansible >= 2.5,可以使用wait_for_connection_module( https://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:
Run Code Online (Sandbox Code Playgroud)