如何在Ansible动态库存中配置多远程用户执行Playbook?
解决动态库存下多远程用户的问题
1. 确认动态库存的自动分组
你的动态库存配置中,通过key: tags.Ansible已经自动生成了分组:
- 所有
Ansible标签为ubuntu的实例会被归入tag_Ansible_ubuntu组 - 所有
Ansible标签为redhat的实例会被归入tag_Ansible_redhat组
执行以下命令验证分组是否正确:
ansible-inventory -i 你的动态库存文件名.yml --list
2. 配置组变量
在Playbook所在目录下创建group_vars目录,分别为两个组添加远程用户配置:
配置Ubuntu实例的远程用户
创建group_vars/tag_Ansible_ubuntu/main.yml,内容如下:
ansible_user: ubuntu
配置RedHat实例的远程用户
创建group_vars/tag_Ansible_redhat/main.yml,内容如下:
ansible_user: ec2-user
注:RedHat系实例(如Amazon Linux)默认远程用户通常是
ec2-user,CentOS可能为centos,请根据实际情况调整。
3. 验证Playbook配置
你的现有Playbook无需修改,确保没有硬编码remote_user字段,让组变量自动生效:
--- # docker.yml - name: 使用Galaxy角色安装Docker hosts: "all" become: true roles: - role: "geerlingguy.docker" tags: ["docker"]
4. 测试连接
执行以下命令,验证不同实例是否使用对应远程用户成功连接:
ansible all -i 你的动态库存文件名.yml -m ping
备选方案:按实例操作系统属性分组
如果实例未通过Ansible标签区分系统,可修改动态库存的keyed_groups,直接基于AWS EC2实例的操作系统属性分组:
plugin: aws_ec2 regions: - "us-east-1" keyed_groups: - key: tags.Ansible - key: tags.Name - key: platform # 利用EC2实例的platform属性自动分组,如"ubuntu"、"redhat" prefix: os filters: tag:Ansible: - ubuntu - redhat compose: ansible_host: public_ip_address
此时会生成os_ubuntu、os_redhat组,对应修改group_vars下的目录名称即可。
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

