Ansible使用错误的主机设置

时间:2017-09-11 17:10:18

标签: ansible

考虑以下主机文件:

[initial]
74.125.224.72 ansible_user=root

[default]
74.125.224.72 ansible_user=deploy ansible_port=2222

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

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

initial.yml 的内容(评论角色也没有区别):

---
- hosts: initial
  roles:
    - { role: common, tags: common }
    - { role: login, tags: login }

ansible.cfg的内容:

[defaults]
inventory = ./hosts.ini
roles_path = ./.tmp
retry_files_enabled = False

环境:

  • Ansible 2.3.1.0
  • Python 2.7.13
  • Ubuntu 17.04

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

编辑:我已经能够通过为 initial.yml 使用不同的 hosts 文件并使用{指定它来解决此问题{1}}。

2 个答案:

答案 0 :(得分:2)

似乎使用Ansible,在同一个文件中两次定义相同的主机会导致第二个定义覆盖第一个。来自Ansible docs

  

在任何部分中,重新定义var将覆盖先前的实例。如果多个组具有相同的变量,则加载的最后一个组获胜。如果你在play的vars:section中定义了两次变量,那么第二个就会获胜。

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

  

前面描述了默认配置hash_behavior=replace,切换到'merge'只是部分覆盖。

答案 1 :(得分:0)

请试试这个:

ansible-playbook initial.yml -i <your host file> -l initial 

此处-i表示您的广告资源文件,-l表示将剧本限制为群组。