首页 文章

Ansible使用错误的主机设置

提问于
浏览
2

考虑以下主机文件:

[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

Environment:

  • Ansible 2.3.1.0

  • Python 2.7.13

  • Ubuntu 17.04

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

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

2 回答

  • 2

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

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

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

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

  • 0

    请试试这个:

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

    这里 -i 表示您的库存文件, -l 表示将剧本限制为一个组 .

相关问题