2013-10-28 38 views
4

我有一个安装剧本,需要一个新安装的Linux实例,以默认用户身份登录(我们将调用user1),创建另一个用户(我们将调用user2),然后禁用user1。因为user1只能在执行这组任务之前访问实例,所以这些任务是在一个特殊的剧本中,我们必须记住要在新实例上运行。之后,所有常见任务都由user2运行,因为user1不再存在。Ansible:测试SSH登录是否可能没有致命错误?

我想结合安装和常见的剧本,所以我们不必手动运行安装剧本。我尝试创建一个任务以查看实例上存在哪个用户,以尝试通过SSH以user1身份登录来完成原始设置任务。问题是,如果我为任一用户尝试SSH登录,由于无法登录,导致出现FATAL错误:user2在新实例中不存在,或者user1在安装剧本执行后被禁用。

我相信通过SSH测试登录是从外部确定实例所处的条件的唯一方法。有没有一种方法可以在不发生FATAL错误的情况下测试SSH登录,然后根据结果有条件地执行任务?

回答

7

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

- name: Test for user1 
    local_action: shell ssh [email protected]{{ inventory_hostname }} "echo success" 
    register: user1_enabled 

那么你可以使用这样的事情在另一个任务,看看它的工作:

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

这是一个很好的解决方案,但上述条件,我得到一个'错误同时评估条件'。我将其更改为'user1_enabled.stdout ==“成功”,并且工作完美。 – udondan