在DEV/QA主机用不同sudo用户并行执行Ansible Playbook问题
解决Ansible Playbook并行执行不同环境主机的问题
咱们先揪出问题根源:你当前的Playbook里设置了serial: 1,这个参数会强制Ansible串行执行任务——一次只在一台主机上跑流程,自然只能拿到单台的执行结果。要实现两台主机并行执行,只需要调整这个配置,同时保留你已经设置好的主机专属sudo用户即可。
解决方案步骤
1. 移除或调整serial参数
serial: 1是串行执行的核心控制项,直接移除它,Ansible就会使用默认的并行策略(默认同时执行5台主机,完全覆盖你的两台主机需求)。如果想明确指定并行数量(比如后续主机扩容后),也可以把它改成serial: 2,强制同时执行两台。
2. 保留清单的主机变量配置
你已经在清单里给每台主机单独指定了ansible_become_user,这个配置完全没问题,Ansible在并行执行时会自动读取对应主机的变量,host1用dev_sudo_user、host2用qa_sudo_user,不会出现权限混淆的情况。
修改后的完整Playbook
--- - hosts: hostlist connection: ssh gather_facts: false remote_user: abcd # 移除serial:1,或者改为serial:2 become: true tasks: - name: run Script shell: python apps.py register: result - debug: var=result
验证并行执行
运行Playbook时,可以加上-v参数查看执行日志,你会看到两台主机的任务是同时启动、并行完成的,最终输出里会同时展示host1和host2的result变量内容。
如果后续需要更精细的并行控制(比如不同组用不同并行数),还可以把主机分成dev和qa两个组,分别定义组变量,再在Playbook里针对组设置不同的serial,不过当前场景下上面的修改已经足够解决问题啦。
内容的提问来源于stack exchange,提问作者Devi Naga
相关产品推荐
相关产品推荐

