Skip to content

feat: hide KVM tab on ISM systems. Use IDER tab instead#3418

Open
nmgaston wants to merge 9 commits into
mainfrom
manageKVMForISMSystems
Open

feat: hide KVM tab on ISM systems. Use IDER tab instead#3418
nmgaston wants to merge 9 commits into
mainfrom
manageKVMForISMSystems

Conversation

@nmgaston

@nmgaston nmgaston commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

This pull request introduces the new IDER (IDE Redirection) tab for ISM systems while hiding the unsupported KVM tab. The IDER tab allows users to still perform IDER operations that were included on the KVM tab, without trying to start an unsupported capability on ISM systems. The changes include UI updates, component additions, and logic to conditionally show IDER or KVM (Keyboard Video Mouse) based on the device type. Comprehensive tests have also been added to ensure correct behavior. The most important changes are summarized below.

PR Checklist

  • Unit Tests have been added for new changes
  • API tests have been updated if applicable
  • All commented code has been removed
  • If you've added a dependency, you've ensured license is compatible with Apache 2.0 and clearly outlined the added dependency.

What are you changing?

IDER Feature Implementation:

  • Added a new IderComponent (src/app/devices/ider/ider.component.*) with UI for uploading disk images and controlling IDER sessions.
  • Added DeviceEnableIderComponent dialog for confirming IDER enablement, with corresponding template, styles, and tests.

Device Detail View Logic and UI:

  • Updated DeviceDetailComponent to dynamically show either the KVM or IDER option based on the device's AMT SKU, hiding KVM for ISM systems and showing IDER instead. The categories list is now a computed property that filters options accordingly.
  • Integrated IDER into the device detail sidebar and main content area, and ensured the correct component is displayed based on route parameters and device capabilities.

Testing and Robustness:

  • Expanded and improved tests for DeviceDetailComponent to cover the conditional display of KVM/IDER, route param handling, and enterprise-only categories.

Dependency Injection and Error Handling:

  • Refactored DeviceDetailComponent to use injected services for translation, device info, and snack bar notifications, with error handling for AMT version retrieval.

@nmgaston
nmgaston force-pushed the manageKVMForISMSystems branch from 88ef1aa to fbf2663 Compare July 8, 2026 02:21
@nmgaston nmgaston changed the title feat: hike KVM tab on ISM systems. Use IDER tab instead for that fun… feat: hide KVM tab on ISM systems. Use IDER tab instead Jul 8, 2026
@nmgaston
nmgaston force-pushed the manageKVMForISMSystems branch from 6d955f2 to 5d3d9b5 Compare July 8, 2026 17:21
@nmgaston
nmgaston requested a review from Copilot July 8, 2026 17:28

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces an IDER tab in Device Detail and conditionally swaps KVM for IDER on ISM systems, along with the required i18n strings and unit tests.

Changes:

  • Add a new standalone IderComponent (template/styles/spec) that hosts the IDER UI toolkit component.
  • Update Device Detail navigation to show IDER (hide KVM) for ISM systems by detecting SKU from the AMT version response.
  • Add new i18n keys for the IDER category and IDER UI actions across supported locales.

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
src/assets/i18n/ar.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/de.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/en.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/es.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/fi.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/fr.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/he.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/it.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/ja.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/nl.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/ru.json Adds IDER category + IDER action labels (attach/stop).
src/assets/i18n/sv.json Adds IDER category + IDER action labels (attach/stop).
src/app/profiles/profiles.component.spec.ts Stabilizes tests by restoring environment.cloud via try/finally and recreating component per mode.
src/app/devices/ider/ider.component.ts New IDER tab implementation: token/consent/redirection flow + file selection + toolkit wiring.
src/app/devices/ider/ider.component.html New IDER UI: attach image + stop button + <amt-ider> host.
src/app/devices/ider/ider.component.scss New styles for the IDER toolbar/loading UI.
src/app/devices/ider/ider.component.spec.ts Unit tests for the new IDER component behavior.
src/app/devices/device-detail/device-detail.component.ts Adds ISM SKU detection and computed categories to swap KVM vs IDER.
src/app/devices/device-detail/device-detail.component.html Updates navigation to iterate computed categories() and renders the new ider case.
src/app/devices/device-detail/device-detail.component.spec.ts Adds tests for ISM vs non-ISM category filtering and route-driven currentView.

Comment thread src/app/devices/device-detail/device-detail.component.ts
Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/app/devices/ider/ider.component.ts Outdated
Comment thread src/app/devices/ider/ider.component.spec.ts Outdated
Comment thread src/app/devices/ider/ider.component.spec.ts Outdated
Comment thread src/app/devices/ider/ider.component.spec.ts Outdated
Comment thread src/app/devices/ider/ider.component.spec.ts Outdated
Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/app/devices/ider/ider.component.ts Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 21 out of 21 changed files in this pull request and generated 5 comments.

Comment thread src/app/devices/ider/ider.component.ts Outdated
Comment thread src/app/devices/ider/ider.component.ts Outdated
Comment thread src/app/devices/ider/ider.component.ts Outdated
Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/app/devices/ider/ider.component.ts

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 21 out of 21 changed files in this pull request and generated 3 comments.

Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/app/devices/device-detail/device-detail.component.ts Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 21 out of 21 changed files in this pull request and generated 8 comments.

Comment thread src/app/devices/device-detail/device-detail.component.ts Outdated
Comment thread src/app/devices/device-detail/device-detail.component.ts Outdated
Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/assets/i18n/nl.json
Comment thread src/assets/i18n/fr.json
Comment thread src/assets/i18n/es.json
Comment thread src/assets/i18n/de.json
Comment thread src/assets/i18n/ar.json

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 24 out of 25 changed files in this pull request and generated 6 comments.

Comment thread src/assets/i18n/fr.json
Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/assets/i18n/fr.json
Comment thread src/assets/i18n/nl.json
Comment thread src/assets/i18n/es.json
Comment thread src/assets/i18n/ar.json

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Comment thread src/app/devices/ider/ider.component.ts Outdated
Comment thread src/app/devices/ider/ider.component.ts Outdated
@nmgaston
nmgaston force-pushed the manageKVMForISMSystems branch from c110e13 to 785dcb9 Compare July 9, 2026 04:12
@nmgaston
nmgaston marked this pull request as ready for review July 9, 2026 18:27
@nmgaston nmgaston linked an issue Jul 9, 2026 that may be closed by this pull request
@madhavilosetty-intel

Copy link
Copy Markdown
Contributor

@nmgaston I tested these changes with MPS and I can see the IDER tab.

Since we do not support KVM, there is currently no way to check whether disks are attached or to track the progress/status from the UI.

I think this is important to explore before we push these changes to main.

@nmgaston

nmgaston commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

@nmgaston I tested these changes with MPS and I can see the IDER tab.

Since we do not support KVM, there is currently no way to check whether disks are attached or to track the progress/status from the UI.

I think this is important to explore before we push these changes to main.

@madhavilosetty-intel - You do see the IDER tab for an ISM system? I'm not following the rest. On an ISM system, you wouldn't have KVM, so this just allows the user to still use IDER but without clicking the KVM tab and having it try to connect to something that is not supported which is misleading when the user forgets or doesn't know that KVM is not supported on that type of system. The main objective was to remove the KVM tab to prevent that from happening, but it was requested to keep the IDER capability and move it to a new tab.

@nmgaston
nmgaston force-pushed the manageKVMForISMSystems branch from 16d5ce3 to 0f20d6c Compare July 13, 2026 22:31

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

src/app/devices/kvm/kvm.component.ts:388

  • onCancelIDER() clears the file input via document.getElementById('file'). This repo already contains multiple id="file" inputs (e.g. KVM, IDER, cert dialogs, domain PFX upload), so this call can target the wrong element if more than one is present in the DOM.

Prefer clearing via the template ref (#fileInput) you already have in the template (e.g. pass it into onCancelIDER(fileInput) or store it via @ViewChild) and avoid relying on a global id.

    // Clear the file input so the same file can be selected again
    const fileInput = document.getElementById('file') as HTMLInputElement
    if (fileInput) {
      fileInput.value = ''
    }

Comment thread src/app/devices/device-detail/device-detail.component.ts
Comment thread src/app/devices/ider/ider.component.ts
Add a reusable app-ider-status component that surfaces live IDE-R
connection state and data-transferred, driven by the amt-ider iderData
output. Lay the IDER tab out as two cards (info + status/attach), show a
note that KVM is unavailable on Intel Standard Manageability systems,
move the IDER tab next to SOL, and add the supporting i18n strings
across all locales.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 26 out of 27 changed files in this pull request and generated 1 comment.

Comment thread src/app/devices/device-detail/device-detail.component.ts
@madhavilosetty-intel

Copy link
Copy Markdown
Contributor

@nmgaston Please resolve the conflicts

@nmgaston

Copy link
Copy Markdown
Contributor Author

@nmgaston Please resolve the conflicts

merge conflicts resolved.

@nmgaston
nmgaston requested a review from sudhir-intc July 17, 2026 03:51
@sudhir-intc

sudhir-intc commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Tried out this PR with having both AMT and ISM devices and here's my observations

  1. As expected for ISM devices the KVM tab is not shown instead we can see IDER. For AMT devices the KVM tab is shown
  2. I tried with CCM Mode ( did a local activation using sudo rpc activate --local --ccm --password <Password>, there's a user experience issue as below
  • In the IDER screen when I choose "Attach Disk image" along with the File Explorer to choose the image, the user consent code gets hidden in the background.
  • For the user to provide the user consent code, the user needs to cancel the File Explorer app and then enter the user consent code.
  • After Entering the user consent code and now if I choose Attach Disk image, I see a message in the snackbar something like "IDER is not supported without user consent code". Will capture a video and share.
  1. One improvement that could be done if its simple to do as part of this PR, for ISM devices I see the following message still containing reference to KVM "Redirection is disabled. KVM, SOL, and IDER require redirection to be enabled", check if KVM could be removed here.
image

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 28 out of 29 changed files in this pull request and generated 3 comments.

Comment thread src/app/devices/ider/ider.component.ts Outdated
Comment thread src/app/devices/ider/ider.component.ts
Comment thread src/app/devices/device-detail/device-detail.component.ts

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 28 out of 29 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

src/app/devices/device-detail/device-detail.component.ts:196

  • ngOnInit() uses switchMap directly on activatedRoute.params, which will cancel an in-flight getAMTVersion() request when only the component route param changes (same device). If the user clicks between tabs quickly before the AMT version call completes, isISMSystem can remain reset to false, causing the KVM/IDER filtering and view-redirect logic to be wrong for that device.

Consider splitting this into two streams: (1) handle component param updates with tap (no HTTP), and (2) drive the AMT version fetch off params.id with map + distinctUntilChanged + switchMap so tab switches don’t cancel the capability fetch.

  ngOnInit(): void {
    this.activatedRoute.params
      .pipe(
        takeUntil(this.destroy$),
        switchMap((params) => {
          const deviceChanged = params.id !== this.deviceId
          this.deviceId = params.id
          this.currentView = params.component || 'general'

          if (!deviceChanged) {
            const isIsm = this.isISMSystem()
            if (isIsm && this.currentView === 'kvm') this.currentView = 'ider'
            if (!isIsm && this.currentView === 'ider') this.currentView = 'kvm'
            return of(null)
          }
          // Reset derived capability flags so they don't stay stale if the AMT version call fails.
          this.isISMSystem.set(false)
          this.isLoading.set(true)

Comment thread src/app/devices/ider-status/ider-status.component.html Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 32 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (1)

src/app/devices/device-detail/device-detail.component.ts:212

  • When getAMTVersion() fails (amtVersion == null), currentView can remain set to 'ider' from the route while categories() will hide the IDER entry (because isISMSystem is reset to false). This can leave the UI in an inconsistent state (sidebar missing the active view).
        next: (amtVersion) => {
          if (amtVersion == null) {
            this.isLoading.set(false)
            return
          }

Comment thread src/assets/i18n/en.json
Comment thread src/assets/i18n/en.json
Comment thread src/app/devices/ider/ider.component.spec.ts Outdated
Comment thread src/app/devices/ider-status/ider-status.component.html

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 32 changed files in this pull request and generated 1 comment.

Comment thread src/app/devices/ider/ider.component.ts

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 32 changed files in this pull request and generated 1 comment.

this.loadingStatus.set('ider.status.checkingConsent.value')
this.consentReady = false

return this.getAMTFeatures().pipe(
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

On ISM, KVM should not auto-connect

4 participants