Ansible中become_method(或become_user)与ansible_become_method的区别是什么?
Ansible中become_method/become_user与ansible_become_method/ansible_become_user的区别
嘿,这个问题问得特别到位——很多刚上手Ansible的同学都会被这几组参数搞混,我给你拆解清楚:
1. 作用范围与定义位置的核心差异
Playbook中的become_method/become_user
这俩是Play或Task级别的参数,只对当前所在的Play或者单个Task生效。简单说就是你想让某一段任务用特定方式提权,就直接写在Play或者Task里。
举个实际例子:
- name: 全局用sudo提权到root的Play hosts: webservers become: yes become_method: sudo become_user: root tasks: - name: 安装nginx(继承Play的提权设置) apt: name: nginx state: present - name: 临时切换到apache用户执行命令 command: whoami become_method: su # 这里覆盖了Play的sudo设置 become_user: apache
这里第二个Task单独指定了提权方式,会优先生效。
Inventory中的ansible_become_method/ansible_become_user
这俩是主机/主机组级别的变量,定义在inventory文件、host_vars或者group_vars里,作用范围是对应的主机或组。适合给一批机器统一设置默认的提权规则。
比如inventory配置:
[dbservers] db01.example.com db02.example.com [dbservers:vars] ansible_become_method=su ansible_become_user=dbadmin
之后所有针对dbservers组的Play,如果没有单独指定become_method,都会默认用su切换到dbadmin用户。
2. 优先级顺序(划重点!)
当多个设置冲突时,优先级从高到低是:
- Task级别的
become_method/become_user - Play级别的
become_method/become_user - Inventory中的
ansible_become_method/ansible_become_user - ansible.cfg配置文件中的默认设置
说白了就是越靠近具体任务的设置,优先级越高,会覆盖更全局的配置。
3. 适用场景总结
- 如果你有一批机器需要统一的提权方式(比如某些机器禁用sudo只能用su),用
ansible_become_method/ansible_become_user在Inventory里配置最省心,不用每个Playbook重复写。 - 如果你只是某个Play或者某个特定Task需要特殊提权(比如临时切换到某个应用用户执行脚本),直接在Playbook里写
become_method/become_user更灵活。
内容的提问来源于stack exchange,提问作者Vignesh Muthu.S
相关产品推荐
相关产品推荐

