如何在单台服务器上针对多用户运行Ansible Playbook?
解决Ansible同一服务器多用户执行任务的问题
这个问题我之前也踩过坑!你原来的inventory写法里重复定义了server1四次,Ansible在解析inventory时,会自动合并同一主机的变量配置,后面的设置会直接覆盖前面的,所以最后只有user4的配置生效,前面三个用户的设置都被忽略了。
下面给你两种实用的解决办法,按需选择即可:
方法1:用主机别名映射同一服务器(推荐)
这种方法通过修改inventory,给每个用户创建独立的主机别名,所有别名都指向同一个server1,这样Ansible会把它们当作不同的主机条目处理,每个条目用对应的用户执行任务。
修改后的inventory内容如下:
[TEST] server1_user1 ansible_host=server1 ansible_user=user1 server1_user2 ansible_host=server1 ansible_user=user2 server1_user3 ansible_host=server1 ansible_user=user3 server1_user4 ansible_host=server1 ansible_user=user4
运行playbook时直接指定该inventory即可:
ansible-playbook -i your_inventory_file playbook.yml
这样playbook会针对TEST组里的四个别名主机(实际都是server1)分别执行一遍任务,每个任务对应不同的用户。
方法2:在Playbook中循环用户列表
如果不想修改inventory结构,可以在playbook里定义用户列表,通过循环让任务以每个用户身份执行。
假设你的原inventory保留基础的server1记录即可:
[TEST] server1
然后编写playbook,用loop遍历用户列表,每次执行任务时切换ansible_user:
- name: 以不同用户身份执行任务 hosts: server1 vars: target_users: - user1 - user2 - user3 - user4 tasks: - name: 示例任务(查看当前用户) command: whoami become: false vars: ansible_user: "{{ item }}" loop: "{{ target_users }}" register: whoami_result - name: 打印每个用户的执行结果 debug: msg: "用户 {{ item.item }} 执行结果: {{ item.stdout }}" loop: "{{ whoami_result.results }}"
运行这个playbook时,每个任务会循环四次,分别用四个用户身份执行。
内容的提问来源于stack exchange,提问作者Jitu
相关产品推荐
相关产品推荐

