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
返回顶部