仅在Ansible中定义时才使用variables

我的同事和我使用Ansible来pipe理一组服务器。

我们在我们的本地主目录中使用.ansible.cfg文件来设置我们的本地环境,并将我们的剧本保存在一个git仓库中。

当对服务器进行身份validation时,我使用user1,并使用user2。 我们的服务器中有95%有这些帐户,但从历史上看,有几台服务器只有一个“用户”帐户。

我们使用host_vars为less数服务器设置remote_uservariables。

然而,在我们的剧本中,我们通常用“全部”来规定我们想要命中的服务器,并且在命令行中使用–limit参数来指定哪个服务器应该更新。 我们的服务器群是遗留下来的糟糕的devise糟糕的服务器,必须保持在线,直到他们在几年内退休,我们发现这种方法最适合我们的需求。

我们的问题是我们的remote_user参数是在我们的.ansible.cfg文件中设置的,它是以环境variables而不是脚本variables的forms公开的。

这意味着如果我们的任务包含:

remote_user: "{{ remote_user }}" 

它只适用于定义了该variables的主机

对于我们没有定义这个variables的95%的主机,任务失败。

有没有办法只使用variables,如果它被定义?

例如

如果定义了remote_user,则使用它,如果不是,则使用.ansible.cfg中设置的环境variables

注意:我知道我可以使用:

 - name: Do something remote_user: "{{ remote_user }}" when: remote_user is defined 

在一个任务定义中,但这只适用于该任务,我不想更新所有任务

当我真正需要的是在主机定义中可用时,即:

 --- - hosts: all remote_user: "{{ remote_user }}" when: remote_user is defined 

但在Ansible中这是非法的

像往常一样,花了两个小时推迟问这里的问题后,我find答案5分钟后,我发布的问题!

它非常简单。 要为单个系统设置不同的remote_user,而不必将大量的黑客应用到现有的剧本,只需将var添加到清单中的主机:

 [web_servers] server1 ansible_ssh_user=user server2 

在这种情况下,任何时候播放包含服务器1,“用户”将被用作ssh用户。 对于server2,将使用来自ansible.cfg文件的remote_user的值(例如,取决于本地环境的user1,user2等)。