在 Ansible 中,仅当主机是 WSL 主机时,我才需要运行一些角色。
如何检测?我正在寻找一种形式:
- name: "Run only in WSL"
when: # what to put here?
# task definition
when
部分要放什么?我正在寻找一种自动检测这一点的方法,而不是在清单中的主机上配置变量。
只需收集可靠的事实。来自最小的示例剧本
---
- hosts: test
become: true
gather_facts: true
gather_subset:
- "!all"
- "min"
# - "hardware"
tasks:
- name: Show Facts
debug:
msg: "{{ ansible_facts }}"
输出结果已经包含了所请求的信息
os_family: RedHat
product_name: VMware7,1
system: Linux
system_vendor: VMware, Inc.
virtualization_role: guest
virtualization_type: VMware
或
os_family: RedHat
product_name: Virtual Machine
product_version: Hyper-V UEFI Release v1.0
system: Linux
system_vendor: Microsoft Corporation
或
os_family: RedHat
product_name: HVM domU
system: Linux
system_vendor: Xen
virtualization_role: guest
virtualization_type: xen
它还包含
ansible_facts.kernel
版本
3.10.0-1160.108.1.el7.x86_64
4.18.0-513.11.1.el8_9.x86_64
5.14.0-362.18.1.el9_3.x86_64
有了这些信息,基于
ansible_facts
的条件就变得微不足道了。就像在
when: ansible_facts['os_family'] == "Debian" and ansible_facts['system_vendor'] == "Microsoft Corporation"
命令
uname -a
报告如下内容:
Linux DESKTOP 5.15.133.1-microsoft-standard-WSL2 #1 SMP 10 月 5 日星期四 21:02:42 世界标准时间 2023 x86_64 x86_64 x86_64 GNU/Linux
可能适合您正在寻找的东西!这是针对 WSL 2 中安装的 Ubuntu 22.04 的。我不确定这如何与 Ansible 相适应,但可能有一种方法可以进行调用并过滤 WSL2 的结果。