Ansible 使用错误的主机设置

Ter*_*ior 4 ansible

考虑以下主机文件:

[initial]
74.125.224.72 ansible_user=root

[default]
74.125.224.72 ansible_user=deploy ansible_port=2222
Run Code Online (Sandbox Code Playgroud)

我有一本名为initial.yml with的剧本hosts: initial,另一本名为site.yml with的剧本hosts: default

问题是,如果我运行ansible-playbook initial.yml,它会在尝试以用户部署身份在端口 2222 上登录时失败。难道不应该只以用户 root 身份在端口 22 上登录吗?

initial.yml的内容(注释掉角色也没有什么区别):

---
- hosts: initial
  roles:
    - { role: common, tags: common }
    - { role: login, tags: login }
Run Code Online (Sandbox Code Playgroud)

内容ansible.cfg

[defaults]
inventory = ./hosts.ini
roles_path = ./.tmp
retry_files_enabled = False
Run Code Online (Sandbox Code Playgroud)

环境:

  • 安塞布尔2.3.1.0
  • Python 2.7.13
  • 乌班图17.04

下的文件/etc/ansible//etc/ssh/尚未被修改。

编辑:我已经能够通过为initial.yml使用不同的主机文件并使用.yml指定它来解决此问题。ansible-playbook --inventory-file=initial.ini

fre*_*old 5

看起来,使用 Ansible,在同一个文件中定义同一主机两次会导致第二个定义覆盖第一个定义。来自Ansible 文档

\n\n
\n

在任何部分中,重新定义 var 都会覆盖先前的实例。如果多个组具有相同的变量,则最后加载的一组获胜。如果您在 play\xe2\x80\x99s vars: 部分中定义一个变量两次,则第二个获胜。

\n
\n\n

您必须以某种方式解决这个问题,通过使用多个主机文件、从命令行指定主机或使用您提到的解决方法。另一个可能有效的选择是更改hash_behavior

\n\n
\n

前面描述了默认配置hash_behavior=replace,切换到 \xe2\x80\x98merge\xe2\x80\x99 仅部分覆盖。

\n
\n