Ansible:测试 SSH 登录是否可能没有 fatal error ?

标签 ansible

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

我想将设置和通用剧本结合起来,这样我们就不必再手动运行设置剧本了。我尝试创建一个任务来查看实例上存在哪个用户,从而通过尝试以 user1 身份通过 SSH 登录来使原始设置任务成为有条件的。问题是,如果我尝试对任一用户进行 SSH 登录,ansible 将退出并出现 fatal error ,因为它无法登录:新实例上的 user2 尚不存在,或者在安装 playbook 执行后 user1 已被禁用。

我相信通过 SSH 测试登录是从外部确定实例所处条件的唯一方法。是否有一种方法可以测试 SSH 登录而不会出现 fatal error ,然后根据结果有条件地执行任务?

最佳答案

一种方法是通过 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

关于Ansible:测试 SSH 登录是否可能没有 fatal error ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19642167/

相关文章:

用于解压的 ansible 本地文件路径

cron - 为什么我的 Ansible 的 cronjob 设置没有运行?

linux - 如何在ansible命令中提及通配符

ansible - 如何使用ansible通过远程服务器向另一台远程服务器运行命令

python - Ansible playbook 在所有 Ubuntu 服务器上均失败

ansible - 在 ansible 中创建动态角色

python - Roots > Trellis > Ansible 2.4 > 错误!意外异常,这可能是错误 : No module named six

Ansible - with_dict : dictionary - How to use variables defined in each dictionary which depends upon others

docker - 在 Ansible 中转义双花括号

python - 无法在ansible模块中导入MySQLdb