9.7. 自定义 Web 控制台


作为集群管理员,您可以通过集成动态插件来自定义 OpenShift Container Platform Web 控制台。然后,虚拟机(VM)所有者可以使用来自 Virtualization 页面中不同标签页提供的那些插件。

9.7.1. 为虚拟机启用批量操作

您可以通过创建一个在 web 控制台中启用批量操作的动态插件,使虚拟机(VM)所有者能够同时执行大规模管理任务,如备份和存储迁移。

此集成减少了多虚拟机环境的手动任务,并确保自定义操作作为原生的、可选择的批量操作在 Virtualization 页面中提供。

先决条件

  • 您已创建了动态插件。
  • 有集群管理员权限。
  • 您可以访问安装 OpenShift Virtualization 的 OpenShift Container Platform 集群。

流程

  1. 在插件的配置文件中,添加一个 console.action/provider 扩展。

    要启用批量操作,您必须使用以 VirtualMachine 资源数组为目标的 contextId 字段。

    console-extensions.json 文件示例:

    {
       type: 'console.action/provider',
       properties: {
         contextId: 'kubevirt.io~v1~VirtualMachine[]',
         provider: {
           $codeRef: 'useSimpleBulkActions',
         },
       },
     }
    • properties.contextId 指定 KubeVirt 插件声明支持的字符串。
    • properties.provider 指定 React hook,或在生成操作项目的源代码中指定 React hook。
  2. 在扩展引用的源文件中,实施可处理选定资源数组的 hook。

    插件示例:

    import {
      type ExtensionHook,
      AccessReviewResourceAttributes,
      Action,
    } from '@openshift-console/dynamic-plugin-sdk';
    import { V1VirtualMachine } from '@kubevirt-ui-ext/kubevirt-api/kubevirt';
    import { VirtualMachineModel } from '@kubevirt-ui-ext/kubevirt-api/console';
    import { useMemo } from 'react';
    
    const useSimpleBulkActions: ExtensionHook<Action[], (V1VirtualMachine & { cluster?: string })[]> = (
      vms,
    ) => {
      const areAllRunning = vms.every((vm) => vm.status?.printableStatus === 'Running');
      const isCrossCluster = new Set(vms.map((vm) => vm.cluster)).size > 1;
      const firstVm = vms[0];
    
      const accessReview: AccessReviewResourceAttributes = useMemo(
        () => ({
          cluster: firstVm?.cluster,
          group: VirtualMachineModel.apiGroup,
          name: firstVm?.metadata?.name,
          namespace: firstVm?.metadata?.namespace,
          resource: VirtualMachineModel.plural,
          verb: 'delete',
        }),
        [firstVm?.cluster, firstVm?.metadata?.name, firstVm?.metadata?.namespace],
      );
    
      const checkAllRunningAction: Action = useMemo(
        () => ({
          id: 'check-all-running',
          cta: () => console.log('All selected VMs are running?', areAllRunning),
          label: 'Check VMs are running',
          disabled: isCrossCluster,
          disabledTooltip: isCrossCluster ? 'VMs from different clusters detected' : '',
          accessReview,
        }),
        [areAllRunning, isCrossCluster, accessReview],
      );
    
      const actions = useMemo(() => [checkAllRunningAction], [checkAllRunningAction]);
      return [actions, true, null];
    };
    
    export default useSimpleBulkActions;

    上例中显示的插件会检查所有选择的虚拟机是否正在运行,并将日志消息打印到控制台。

  3. 将插件部署到集群中。

验证

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 验证您可以对虚拟机应用批量操作。

    1. 进入 Virtualization VirtualMachines
    2. 选中两个或多个现有虚拟机的复选框。
    3. Actions 下拉菜单。确认您可以运行您创建的自定义操作。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部