考虑以下主机文件:
[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
环境:
/etc/ansible/
或/etc/ssh/
下的文件尚未修改。
编辑:我已经能够通过为 initial.yml 使用不同的 hosts 文件并使用{指定它来解决此问题{1}}。
答案 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
表示将剧本限制为群组。