如何在 Ansible playbook 中检测主机是否为 WSL?

问题描述 投票:0回答:2

在 Ansible 中,仅当主机是 WSL 主机时,我才需要运行一些角色。

如何检测?我正在寻找一种形式:

- name: "Run only in WSL"
  when: # what to put here?
  # task definition

when
部分要放什么?我正在寻找一种自动检测这一点的方法,而不是在清单中的主机上配置变量。

ansible windows-subsystem-for-linux wsl-2 ansible-facts
2个回答
0
投票

只需收集可靠的事实。来自最小的示例剧本

---
- 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"

-1
投票

命令

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 的结果。

© www.soinside.com 2019 - 2024. All rights reserved.