)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c196edf512603c3e127e774edb484ca73381c5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5793058b_6b436b8c","updated":"2026-08-06 09:04:24.000000000","message":"Note ready for review till all the CI passes.","commit_id":"eec55c99af60d8dfca54aa63354b0fa8a144035c"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"5c62bf35fe645f7e0d60c545a0d25791a48ff236","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"728f1049_5f67a86a","updated":"2026-08-09 04:29:19.000000000","message":"check experimetnal","commit_id":"4ff6dcc2792847b875d0c5ea31e67a800e7e0cc5"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"ce72551f7e06f49318bab3255240c8dcfc792fe2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"2309e612_b3f4818e","updated":"2026-08-13 06:31:43.000000000","message":"recheck","commit_id":"70c6af093deadc645c99125c56df783611f531e8"}],"devstack/lib/cyborg":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"eba0ac5f2ec01c3e55d769bce0d272744ea2d60b","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    stop_process cyborg-agent"},{"line_number":287,"context_line":"}"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"function create_nvme_device_profile {"},{"line_number":290,"context_line":"    if [[ \"$CYBORG_ENABLED_DRIVERS\" !\u003d *\"nvme_driver\"* ]]; then"},{"line_number":291,"context_line":"        return"},{"line_number":292,"context_line":"    fi"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"71040175_f8c2abba","line":289,"updated":"2026-08-06 17:50:14.000000000","message":"The new function create_nvme_device_profile is added to devstack/lib/cyborg but is never invoked from plugin.sh or any other code path. The actual NVMe device profile creation is handled by create_pci_sim_cyborg_nvme_device_profile in lib/pci_sim, which IS called via create_pci_sim_test_resources...\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Future maintainers may assume this function is called and modify it expecting behavioral changes, or be confused about the authoritative NVMe device-profile creation path. The function also contains a latent bug: it does not guard against empty CYBORG_NVME_PRODUCT_ID, which would produce a malfor...\n\n**Suggestion**:\nEither wire create_nvme_device_profile into plugin.sh at an appropriate phase (e.g., \u0027extra\u0027 after start_cyborg), or remove it if create_pci_sim_cyborg_nvme_device_profile in lib/pci_sim already covers all needed scenarios. If kept, also add a guard for empty product_id.","commit_id":"82c0903f3af2f7acfb4d04cb36ba94d87345060b"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"2567e8e9f0df64b37ce5956a1bd90030eb53311c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        iniset $TEMPEST_CONFIG cyborg_pci vendor_id 10a9"},{"line_number":305,"context_line":"        iniset $TEMPEST_CONFIG cyborg_pci product_id 0003"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        if [[ \"${PCI_SIM_DEVICES:-}\" \u003d\u003d *nvme* ]]; then"},{"line_number":308,"context_line":"            iniset $TEMPEST_CONFIG cyborg_nvme device_profile_name \"$CYBORG_NVME_DEVICE_PROFILE_NAME\""},{"line_number":309,"context_line":"            iniset $TEMPEST_CONFIG cyborg_nvme vendor_id \"${CYBORG_NVME_VENDOR_ID:-1d55}\""},{"line_number":310,"context_line":"            iniset $TEMPEST_CONFIG cyborg_nvme product_id \"${CYBORG_NVME_PRODUCT_ID:-1002}\""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"f8de7b2e_a31c8c4c","line":307,"updated":"2026-08-12 17:28:32.000000000","message":"cyborg_configure_tempest checks [[ \"${PCI_SIM_DEVICES:-}\" \u003d\u003d *nvme* ]] to decide whether to configure the cyborg_nvme Tempest section. This matches both \u0027cyborg:nvme\u0027 and \u0027nova:nvme\u0027. If PCI_SIM_DEVICES contains \u0027nova:nvme\u0027 without \u0027cyborg:nvme\u0027, Tempest is configured to reference a Cyborg NVMe d...\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: A topology like PCI_SIM_DEVICES\u003d\u0027nova:uart,nova:nvme\u0027 would configure Tempest cyborg_nvme settings pointing to a non-existent device profile, causing test failures. The NVMe driver and device profile are only wired up for cyborg:nvme.\n\n**Suggestion**:\nChange the pattern from *nvme* to *cyborg:nvme* to match the settings auto-wiring logic, ensuring Tempest NVMe config is only set when Cyborg-managed NVMe devices exist.","commit_id":"cac5170086b6ecf06de27e70e2cc5a30c73bb05b"}],"devstack/lib/pci_sim":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"bcf2e10092f93fd3a18203729820d0183e9f90bd","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    [[ \"$PCI_SIM_CONFIGURE_CYBORG_PCI\" \u003d\u003d True ]] || return 0"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    mapfile -t cyborg_vfs \u003c \u003c(pci_sim_collect_target_vfs cyborg)"},{"line_number":490,"context_line":"    if (( ${#cyborg_vfs[@]} \u003d\u003d 0 )); then"},{"line_number":491,"context_line":"        return 0"},{"line_number":492,"context_line":"    fi"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"d85966df_0732e0ec","line":489,"updated":"2026-08-07 09:01:08.000000000","message":"The modified create_pci_sim_cyborg_device_profile collects all cyborg VFs (including NVMe VFs) and uses the first VF\u0027s product_id for the PCI device profile. When the only cyborg VFs are NVMe VFs (as in CI config PCI_SIM_DEVICES\u003d\"nova:uart,cyborg:nvme\"), the PCI device profile is created with the...\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: The PCI device profile pci-sim-cyborg-dp gets trait CUSTOM_PCI_PRODUCT_ID_1002 when it should reference 1001 (or not be created at all when no non-NVMe cyborg VFs exist). The pci-sim-cyborg flavor references this profile, so scheduling requests would carry the wrong trait. In the current CI confi...\n\n**Suggestion**:\nFilter NVMe VFs out of the product_id lookup in create_pci_sim_cyborg_device_profile, mirroring the pattern already used in configure_pci_sim_cyborg_service_config. Skip creating the PCI profile entirely when no non-NVMe cyborg VFs exist.","commit_id":"32ae22c70e8062289a5957aa007bd4580f6dca44"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c733ff2fbcaffc8cb9ac17f92e3109bf5277e99a","unresolved":false,"context_lines":[{"line_number":295,"context_line":"function pci_sim_pf_target {"},{"line_number":296,"context_line":"    local index\u003d$1"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    if [[ ${#_PCI_SIM_SERVICES[@]} -gt 0 ]]; then"},{"line_number":299,"context_line":"        echo \"${_PCI_SIM_SERVICES[$index]}\""},{"line_number":300,"context_line":"        return"},{"line_number":301,"context_line":"    fi"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"aa44e0c8_604b0bdc","line":298,"updated":"2026-08-07 18:27:41.000000000","message":"The _PCI_SIM_SERVICES/_PCI_SIM_PERSONALITIES arrays are populated only by pci_sim_parse_devices, called via pci_sim_validate_config from load_pci_sim and configure_pci_sim_vfs in the post-config phase. DevStack runs plugin.sh as a separate bash process per phase, re-sourcing lib/pci_sim and reset...\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: With PCI_SIM_DEVICES\u003d\u0027cyborg:nvme,nova:uart\u0027, during extra phase pci_sim_collect_target_vfs cyborg returns PF1 VFs (uart) instead of PF0 VFs (nvme). NVMe VFs are never found, so no NVMe device profile is created. The default CI config \u0027nova:uart,cyborg:nvme\u0027 works by coincidence because it matche...\n\n**Priority**: Before merge\n**Why This Matters**: With PCI_SIM_DEVICES\u003d\u0027cyborg:nvme,nova:uart\u0027, during extra phase pci_sim_collect_target_vfs cyborg returns PF1 VFs (uart) instead of PF0 VFs (nvme). NVMe VFs are never found, so no NVMe device profile is created. The default CI config \u0027nova:uart,cyborg:nvme\u0027 works by coincidence because it matche...\n\n**Recommendation**:\nCall pci_sim_parse_devices at the start of pci_sim_collect_target_vfs, or make pci_sim_pf_target/pci_sim_pf_personality self-initializing by calling pci_sim_parse_devices when arrays are empty. Alternatively add pci_sim_parse_devices calls at the top of configure_pci_sim_cyborg_service_config and create_pci_sim_test_resources.","commit_id":"168490e1eb143156044c20382ef9cf779aba0b7b"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"a616e0c3faa84f30642b542373e28ce06edc00f3","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    [[ \"$PCI_SIM_CONFIGURE_CYBORG_PCI\" \u003d\u003d True ]] || return 0"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    mapfile -t cyborg_vfs \u003c \u003c(pci_sim_collect_target_vfs cyborg)"},{"line_number":490,"context_line":"    if (( ${#cyborg_vfs[@]} \u003d\u003d 0 )); then"},{"line_number":491,"context_line":"        return 0"},{"line_number":492,"context_line":"    fi"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"650e6161_7afa0547","line":489,"updated":"2026-08-09 07:08:23.000000000","message":"create_pci_sim_cyborg_device_profile reads the first cyborg VF\u0027s product_id from sysfs without filtering out NVMe VFs. With the CI default PCI_SIM_DEVICES\u003d\"nova:uart,cyborg:nvme\", all cyborg VFs are NVMe VFs (device ID 0x1002). The function creates a PCI device profile with trait CUSTOM_PCI_PRODU...\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: The PCI device profile \u0027pci-sim-cyborg-dp\u0027 is created with trait CUSTOM_PCI_PRODUCT_ID_1002 but no PCI inventory exists for that product_id (only NVMe inventory exists under CUSTOM_NVME_* resource classes). Any tempest test referencing the cyborg_pci device profile will fail to schedule because P...\n\n**Priority**: Before merge\n**Why This Matters**: The PCI device profile \u0027pci-sim-cyborg-dp\u0027 is created with trait CUSTOM_PCI_PRODUCT_ID_1002 but no PCI inventory exists for that product_id (only NVMe inventory exists under CUSTOM_NVME_* resource classes). Any tempest test referencing the cyborg_pci device profile will fail to schedule because P...\n\n**Recommendation**:\nFilter cyborg VFs in create_pci_sim_cyborg_device_profile to exclude NVMe VFs before reading the product_id, mirroring the split logic in configure_pci_sim_cyborg_service_config. For example: iterate cyborg_vfs, skip those whose device ID matches PCI_SIM_NVME_VF_DEVICE_ID, and return early if no non-NVMe VFs remain.","commit_id":"4ff6dcc2792847b875d0c5ea31e67a800e7e0cc5"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"eb0556c328d1bfd058cf66c61ca78ecede913aae","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        return"},{"line_number":25,"context_line":"    fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    IFS\u003d\u0027,\u0027 read -ra entries \u003c\u003c\u003c \"$PCI_SIM_DEVICES\""},{"line_number":28,"context_line":"    for entry in \"${entries[@]}\"; do"},{"line_number":29,"context_line":"        entry\u003d$(echo \"$entry\" | xargs)"},{"line_number":30,"context_line":"        svc\u003d\"${entry%%:*}\""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"1aa2fa13_8b0591e2","line":27,"updated":"2026-08-11 11:22:57.000000000","message":"The pci_sim_parse_devices function uses `IFS\u003d\u0027,\u0027 read -ra entries` without declaring `entries` as local. In bash, undeclared variables in functions leak to the global scope, which can cause subtle bugs if another function later uses the same variable name.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Low practical impact since no other function in the file currently uses the name \u0027entries\u0027. However, it is a real scope leak in newly added code that could cause subtle issues if future functions reuse the variable name.\n\n**Recommendation**:\nChange `local entry svc pers` on line 18 to `local entry svc pers` and add `local -a entries` to declare the array as local. Alternatively, combine into one declaration: `local entry svc pers` followed by `local -a entries`.","commit_id":"8a9fc5fc3cf162ef87b6df82118f024580ebcdde"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"eb0556c328d1bfd058cf66c61ca78ecede913aae","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    for vf in \"$@\"; do"},{"line_number":326,"context_line":"        pid\u003d$(cat \"/sys/bus/pci/devices/$vf/device\" | sed \u0027s/^0x//\u0027)"},{"line_number":327,"context_line":"        specs+\u003d(\"{\\\"address\\\":\\\"$vf\\\",\\\"vendor_id\\\":\\\"1d55\\\",\\\"product_id\\\":\\\"$pid\\\",\\\"device_type\\\":\\\"type-VF\\\",\\\"managed\\\":\\\"no\\\"}\")"},{"line_number":328,"context_line":"        if ! printf \u0027%s\\n\u0027 \"${seen_pids[@]}\" 2\u003e/dev/null | grep -qx \"$pid\"; then"},{"line_number":329,"context_line":"            seen_pids+\u003d(\"$pid\")"},{"line_number":330,"context_line":"            aliases+\u003d(\"{\\\"vendor_id\\\":\\\"1d55\\\",\\\"product_id\\\":\\\"$pid\\\",\\\"device_type\\\":\\\"type-VF\\\",\\\"name\\\":\\\"$PCI_SIM_NOVA_ALIAS_NAME\\\"}\")"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"7bd99120_b9117d4d","line":327,"updated":"2026-08-11 11:22:57.000000000","message":"The configure_pci_sim_nova_conf_file function was modified in this patch to read product_id dynamically from sysfs (`cat /sys/bus/pci/devices/$vf/device`), but vendor_id remains hardcoded as the string literal \"1d55\". If PCI_SIM_VENDOR_ID is customized (it is a configurable variable defaulting to...\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: If an operator changes PCI_SIM_VENDOR_ID from its default, Nova PCI passthrough specs and aliases will have mismatched vendor_id, causing VM scheduling failures. In practice this is low risk since PCI_SIM_VENDOR_ID is rarely changed from its default 0x1d55 in pci-sim test environments.\n\n**Recommendation**:\nRead vendor_id from sysfs alongside product_id: `vid\u003d$(cat \"/sys/bus/pci/devices/$vf/vendor\" | sed \u0027s/^0x//\u0027)` and use $vid in the spec and alias JSON instead of the hardcoded \"1d55\".","commit_id":"8a9fc5fc3cf162ef87b6df82118f024580ebcdde"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"aaca60490ead5349605bc904e6f4d81c49762490","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        return"},{"line_number":25,"context_line":"    fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    IFS\u003d\u0027,\u0027 read -ra entries \u003c\u003c\u003c \"$PCI_SIM_DEVICES\""},{"line_number":28,"context_line":"    for entry in \"${entries[@]}\"; do"},{"line_number":29,"context_line":"        entry\u003d$(echo \"$entry\" | xargs)"},{"line_number":30,"context_line":"        svc\u003d\"${entry%%:*}\""}],"source_content_type":"application/octet-stream","patch_set":13,"id":"abd38192_b99e85fe","line":27,"updated":"2026-08-11 18:45:59.000000000","message":"The entries array used in IFS\u003d\u0027,\u0027 read -ra entries is not declared local, causing it to leak into the global shell namespace in the sourced devstack environment.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: A global \u0027entries\u0027 array could interfere with other devstack functions or plugins that use the same variable name, causing subtle and hard-to-debug issues during stack.sh execution.\n\n**Recommendation**:\nAdd \u0027entries\u0027 to the local declaration on line 18: \u0027local entry svc pers entries\u0027 or add a separate \u0027local -a entries\u0027 declaration before the read command on line 27.","commit_id":"9a9c111249957e43e3ca6c232b97994f22c70fb2"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cbb9336db01179ddef4ffc4f31bdbfa0662760e4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        return"},{"line_number":29,"context_line":"    fi"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    IFS\u003d\u0027,\u0027 read -ra entries \u003c\u003c\u003c \"$PCI_SIM_DEVICES\""},{"line_number":32,"context_line":"    for entry in \"${entries[@]}\"; do"},{"line_number":33,"context_line":"        entry\u003d$(echo \"$entry\" | xargs)"},{"line_number":34,"context_line":"        svc\u003d\"${entry%%:*}\""}],"source_content_type":"application/octet-stream","patch_set":16,"id":"4461e0ac_7b311156","line":31,"updated":"2026-08-13 08:31:23.000000000","message":"In pci_sim_parse_devices, the \u0027entries\u0027 variable used with \u0027IFS\u003d\",\" read -ra entries\u0027 is not declared local. The function declares \u0027local entry svc pers\u0027 but omits \u0027entries\u0027, so it persists as a global shell variable after the function returns.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: The leaked \u0027entries\u0027 global is unlikely to cause a functional bug in current DevStack flows, but it could conflict with another variable named \u0027entries\u0027 in a caller\u0027s scope or in future code, leading to subtle and hard-to-debug issues.\n\n**Recommendation**:\nAdd \u0027entries\u0027 to the local declaration on line 22: \u0027local entry svc pers entries\u0027 or add a separate \u0027local -a entries\u0027 declaration before the read.","commit_id":"70c6af093deadc645c99125c56df783611f531e8"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cbb9336db01179ddef4ffc4f31bdbfa0662760e4","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    for vf in \"$@\"; do"},{"line_number":336,"context_line":"        pid\u003d$(cat \"/sys/bus/pci/devices/$vf/device\" | sed \u0027s/^0x//\u0027)"},{"line_number":337,"context_line":"        specs+\u003d(\"{\\\"address\\\":\\\"$vf\\\",\\\"vendor_id\\\":\\\"1d55\\\",\\\"product_id\\\":\\\"$pid\\\",\\\"device_type\\\":\\\"type-VF\\\",\\\"managed\\\":\\\"no\\\"}\")"},{"line_number":338,"context_line":"        if ! printf \u0027%s\\n\u0027 \"${seen_pids[@]}\" 2\u003e/dev/null | grep -qx \"$pid\"; then"},{"line_number":339,"context_line":"            seen_pids+\u003d(\"$pid\")"},{"line_number":340,"context_line":"            aliases+\u003d(\"{\\\"vendor_id\\\":\\\"1d55\\\",\\\"product_id\\\":\\\"$pid\\\",\\\"device_type\\\":\\\"type-VF\\\",\\\"name\\\":\\\"$PCI_SIM_NOVA_ALIAS_NAME\\\"}\")"},{"line_number":341,"context_line":"        fi"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"8a0923d4_156ff44d","line":338,"updated":"2026-08-13 08:31:23.000000000","message":"configure_pci_sim_nova_conf_file creates one alias per unique VF product ID but assigns the same alias name ($PCI_SIM_NOVA_ALIAS_NAME) to all of them. When Nova receives VFs with different device IDs (e.g., uart VFs at 0x1001 and nvme VFs at 0x1002), this produces multiple [pci] alias entries wit...\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: If a topology like PCI_SIM_DEVICES\u003d\"nova:uart,nova:nvme\" is used, Nova receives VFs with device IDs 0x1001 and 0x1002. The code generates two alias entries both named \u0027pci_sim_vf\u0027 with different product_ids. Nova may fail to start, use the wrong alias, or silently ignore one device type, causing...\n\n**Suggestion**:\nAppend the product ID to the alias name when there are multiple unique product IDs, e.g.: name\u003d\"$PCI_SIM_NOVA_ALIAS_NAME\" for the first, then name\u003d\"${PCI_SIM_NOVA_ALIAS_NAME}_${pid}\" for subsequent ones. Alternatively, use a single alias per name and document that Nova topologies should use a single VF personality.","commit_id":"70c6af093deadc645c99125c56df783611f531e8"}],"devstack/plugin.sh":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"2c9a7e9fa617c700b3cb8566c5f8f9fee5aa1429","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                echo_summary \"Installing Cyborg\""},{"line_number":19,"context_line":"                install_cyborg"},{"line_number":20,"context_line":"                install_cyborg_client"},{"line_number":21,"context_line":"                install_package pciutils nvme-cli"},{"line_number":22,"context_line":"                if [[ \"$ENABLE_PCI_SIM\" \u003d\u003d True ]]; then"},{"line_number":23,"context_line":"                    if [[ \"$PCI_SIM_BUILD\" \u003d\u003d True ]]; then"},{"line_number":24,"context_line":"                        async_runfunc build_pci_sim"}],"source_content_type":"text/x-sh","patch_set":17,"id":"3f719260_cb431005","line":21,"updated":"2026-08-13 17:01:41.000000000","message":"The install_package call was moved outside the ENABLE_PCI_SIM guard so nvme-cli is now installed on every Cyborg devstack deployment regardless of whether pci-sim is enabled.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Every Cyborg devstack deployment now installs nvme-cli even when pci-sim is not used. For CI this adds unnecessary package installation time and a new package dependency. For production-like devstack installs this adds a package that is only relevant to the simulated NVMe test infrastructure.\n\n**Recommendation**:\nEither move install_package back inside the ENABLE_PCI_SIM guard, or keep pciutils outside (since it may be needed for Cyborg in general) but place nvme-cli inside the pci-sim block since it is only used by the simulated NVMe personality.","commit_id":"2847a373c94bb5a4cde4bb8df64d20b7af3a293a"}],"playbooks/pre-run-nvme-memmap.yaml":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"eba0ac5f2ec01c3e55d769bce0d272744ea2d60b","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    - name: Update grub.cfg"},{"line_number":52,"context_line":"      become: true"},{"line_number":53,"context_line":"      ansible.builtin.command: update-grub"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    - name: Reboot"},{"line_number":56,"context_line":"      become: true"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"37e4c951_74e68f4d","line":53,"updated":"2026-08-06 17:50:14.000000000","message":"The pre-run playbook playbooks/pre-run-nvme-memmap.yaml uses \u0027update-grub\u0027 which is a Debian/Ubuntu-specific command. The playbook is attached to the abstract cyborg-tempest-base job, which is inherited by cyborg-tempest-centos-10-stream. On CentOS Stream 10, update-grub does not exist; grub2-mkc...\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: The cyborg-tempest-centos-10-stream job (listed under experimental and periodic-weekly in .zuul.yaml) will fail when the playbook reaches the update-grub task. While this does not block merge (the job is not in check/gate), it introduces a regression for the periodic CI pipeline.\n\n**Suggestion**:\nUse Ansible\u0027s ansible_os_family fact to conditionally run update-grub on Debian/Ubuntu and grub2-mkconfig -o on RHEL/CentOS. Alternatively, use ansible.builtin.package facts to select the correct bootloader update command.","commit_id":"82c0903f3af2f7acfb4d04cb36ba94d87345060b"}]}
