如何在Ansible Playbook中自动检测主机是否为WSL?
Ansible自动检测WSL主机的when条件
要自动检测主机是否为WSL环境并仅在该环境下运行任务,无需配置清单变量,可采用以下几种可靠方法:
方法一:检查WSL特征文件
WSL系统默认存在/proc/sys/fs/binfmt_misc/WSLInterop文件,直接通过Ansible已收集的facts判断该文件是否存在即可:
- name: "Run only in WSL" when: ansible_facts.files['/proc/sys/fs/binfmt_misc/WSLInterop'] is defined and ansible_facts.files['/proc/sys/fs/binfmt_misc/WSLInterop'].exists # task definition
注意:需确保Ansible已开启主机facts收集(默认自动开启,若未开启可在playbook中添加gather_facts: true)
方法二:用stat模块主动检查
如果不想依赖自动收集的facts,可先通过stat模块主动检查特征文件,再基于结果判断:
- name: Check if running in WSL stat: path: /proc/sys/fs/binfmt_misc/WSLInterop register: wsl_check - name: "Run only in WSL" when: wsl_check.stat.exists # task definition
方法三:通过内核版本判断(备选)
WSL的内核版本通常包含microsoft或WSL关键字,可作为备选判断条件:
- name: "Run only in WSL" when: "'microsoft' in ansible_kernel or 'WSL' in ansible_kernel" # task definition
注:这种方法可靠性略低,部分自定义内核可能包含类似关键字
内容的提问来源于stack exchange,提问作者jehon
相关产品推荐
相关产品推荐

