Skip to content

Commit 6eaa6ff

Browse files
authored
[Windows] Set nvme_vhba_device_ops_spec13 "Not Applicable" on ESXi 8.0.2 and later (#705)
Signed-off-by: dw035535 <[email protected]>
1 parent 7505e73 commit 6eaa6ff

6 files changed

+77
-3
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Copyright 2025 VMware, Inc.
2+
# SPDX-License-Identifier: BSD-2-Clause
3+
---
4+
# Get implemented NVMe spec version in Windows guest OS.
5+
# Return:
6+
# win_nvme_spec_version: the NVMe spec version got in guest OS.
7+
#
8+
- name: "Initialize the NVMe spec version in Windows guest OS"
9+
ansible.builtin.set_fact:
10+
win_nvme_spec_version: ''
11+
12+
- name: "Get NVMe spec version in Windows guest OS"
13+
include_tasks: win_execute_cmd.yml
14+
vars:
15+
win_powershell_cmd: >-
16+
(Get-Physicaldisk | where-object {$_.Friendlyname -like '*NVMe*'} |
17+
Get-StorageFirmwareInformation).FirmwareVersionInSlot
18+
19+
- name: "Set fact of NVMe spec version"
20+
ansible.builtin.set_fact:
21+
win_nvme_spec_version: "{{ win_powershell_cmd_output.stdout_lines[0] }}"
22+
when:
23+
- win_powershell_cmd_output.stdout_lines is defined
24+
- win_powershell_cmd_output.stdout_lines | length != 0
25+
26+
- name: "Print NVMe spec version in Windows guest OS"
27+
ansible.builtin.debug: var=win_nvme_spec_version

windows/vhba_hot_add_remove/check_disk_after_adding.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@
4141
the same as the expected value {{ ctrl_num_guest_before | int + 1 }}.
4242
when: on_new_controller
4343

44+
- name: "Get NVMe spec version in guest OS"
45+
include_tasks: ../utils/win_get_nvme_spec_version.yml
46+
when: test_disk_ctrl_type == "nvme"
47+
4448
- name: "Initialize new disk and create disk partition in guest OS"
4549
include_tasks: create_partition_raw_disk.yml
4650
vars:

windows/vhba_hot_add_remove/hot_extend_disk_test.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,6 @@
9191
that:
9292
- win_disk_volume_size_after | int == 2
9393
fail_msg: "Got disk volume '{{ drive_letter_new }}' size '{{ win_disk_volume_size_after }}' GB after extend, not 2GB."
94+
95+
- name: "Get NVMe spec version in guest OS"
96+
include_tasks: ../utils/win_get_nvme_spec_version.yml

windows/vhba_hot_add_remove/nvme_vhba_device_ops_spec13.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,16 @@
33
---
44
# Description:
55
# This test case is used for check hotadd, hot remove disk
6-
# on a new and existing NVMe controller with NVMe Spec 1.3 enabled.
6+
# on a new and existing NVMe controller with NVMe Spec 1.3 enabled
7+
# manually.
8+
# Notes:
9+
# Please refer to the release notes of ESXi 8.0.2:
10+
# https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/
11+
# release-notes/esxi-update-and-patch-release-notes/vsphere-esxi-802-release-notes.html
12+
# Default NVMe version 1.3 for Windows virtual machines:
13+
# Starting with vSphere 8.0 Update 2, the NVMe version is set to 1.3 by default for
14+
# Windows Server 2022 or Windows 11 and later VMs with hardware version 21 and later.
15+
# Set this test case result to "Not Applicable" in above situation.
716
#
817
- name: nvme_vhba_device_ops_spec13
918
hosts: localhost

windows/vhba_hot_add_remove/vhba_test.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,36 @@
66
# - lsilogic: no inbox driver in Windows guest OS now, so no testing.
77
# - buslogic: not supported in 64bit Windows guest OS, so no testing.
88
#
9+
- name: "Set fact of whether VM NVMe version 1.3 is enabled by default"
10+
when:
11+
- vm_hardware_version_num | int >= 21
12+
- test_disk_ctrl_type == 'nvme'
13+
- vm_nvme_spec13_enabled is undefined
14+
block:
15+
- name: "For Windows {{ guest_os_product_type }} with guest ID {{ vm_guest_id }}"
16+
ansible.builtin.set_fact:
17+
vm_nvme_spec13_enabled: "{{ vm_guest_id | regex_search('windows(\\d+)srvNext', '\\1') | first | int >= 2019 }}"
18+
when: vm_guest_id | regex_search('windows(\\d+)srvNext')
19+
20+
- name: "For Windows {{ guest_os_product_type }} with guest ID {{ vm_guest_id }}"
21+
ansible.builtin.set_fact:
22+
vm_nvme_spec13_enabled: "{{ vm_guest_id | regex_search('windows(\\d+)_', '\\1') | first | int >= 11 }}"
23+
when: vm_guest_id | regex_search('windows(\\d+)_')
24+
25+
- name: "Skip test case"
26+
include_tasks: ../../common/skip_test_case.yml
27+
vars:
28+
skip_msg: >-
29+
Skip testing on this guest OS '{{ guest_os_ansible_distribution }}' with VM hardware version
30+
'{{ vm_hardware_version_num }}', since NVMe version is 1.3 by default for Windows Server 2022,
31+
Windows 11 and later VMs with hardware version 21 on ESXi 8.0.2 and later.
32+
So skip this test case and only run test case 'nvme_vhba_device_ops' with default NVMe v1.3.
33+
skip_reason: "Not Applicable"
34+
when:
35+
- test_disk_ctrl_type == 'nvme'
36+
- test_purpose == "hot-add-spec13"
37+
- vm_nvme_spec13_enabled is defined and vm_nvme_spec13_enabled
38+
939
- name: "Get VM current disk controller info"
1040
include_tasks: get_vm_disk_ctrl_info.yml
1141

windows/vhba_hot_add_remove/vhba_test_prepare.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616
disk_controller_facts_data: "{{ disk_ctrls_before_hotadd }}"
1717
new_vhba_type: "{{ disk_controller }}"
1818

19-
- name: "Enable NVMe spec 1.3"
19+
- name: "Enable NVMe spec 1.3 for NVMe '{{ test_purpose }}' testing"
2020
include_tasks: enable_vm_nvme_spec13.yml
2121
when:
2222
- test_disk_ctrl_type == 'nvme'
23-
- test_purpose in ["hot-add-spec13", "hot-extend"]
23+
- test_purpose == "hot-add-spec13" or (test_purpose == "hot-extend" and
24+
(vm_nvme_spec13_enabled is undefined or not vm_nvme_spec13_enabled))

0 commit comments

Comments
 (0)