From 76f1e85bff7e6187f58e51c44307596038f72b71 Mon Sep 17 00:00:00 2001 From: yaacov Date: Wed, 10 Jun 2020 14:10:11 +0300 Subject: [PATCH] add guest agent info to vm resource summary --- .../src/components/vms/vm-resource.tsx | 28 +++++++- .../src/components/vms/vm-users.tsx | 32 +--------- .../src/hooks/use-guest-agent-info.ts | 64 +++++++++++++++++++ 3 files changed, 93 insertions(+), 31 deletions(-) create mode 100644 frontend/packages/kubevirt-plugin/src/hooks/use-guest-agent-info.ts diff --git a/frontend/packages/kubevirt-plugin/src/components/vms/vm-resource.tsx b/frontend/packages/kubevirt-plugin/src/components/vms/vm-resource.tsx index 5bb30f12a8e3..8db1f5654443 100644 --- a/frontend/packages/kubevirt-plugin/src/components/vms/vm-resource.tsx +++ b/frontend/packages/kubevirt-plugin/src/components/vms/vm-resource.tsx @@ -41,6 +41,7 @@ import { TOLERATIONS_MODAL_TITLE, AFFINITY_MODAL_TITLE, } from '../modals/scheduling-modals/shared/consts'; +import { useGuestAgentInfo } from '../../hooks/use-guest-agent-info'; import { VMStatusBundle } from '../../statuses/vm/types'; import './vm-resource.scss'; @@ -82,6 +83,8 @@ export const VMResourceSummary: React.FC = ({ const description = getDescription(vmiLike); const os = getOperatingSystemName(vmiLike) || getOperatingSystem(vmiLike); + const [guestAgentInfo] = useGuestAgentInfo({ vmi }); + return ( = ({ - - {os} + + {guestAgentInfo?.os?.prettyName || os} {isVM && ( @@ -121,6 +128,7 @@ export const VMDetailsList: React.FC = ({ canUpdateVM, kindObj, }) => { + const [guestAgentInfo] = useGuestAgentInfo({ vmi }); const [isBootOrderModalOpen, setBootOrderModalOpen] = React.useState(false); const isVM = kindObj === VirtualMachineModel; const vmiLike = isVM ? vm : vmi; @@ -199,6 +207,22 @@ export const VMDetailsList: React.FC = ({ {launcherPod && ipAddrs} + + {guestAgentInfo?.hostname} + + + + {guestAgentInfo?.timezone} + + - vmi && - isGuestAgentInstalled(vmi) && - `/${getVMISubresourcePath()}/${getVMIApiPath(vmi)}/guestosinfo`; const tableColumnClasses = [ classNames('col-lg-3', 'col-md-3', 'col-sm-4', 'col-sm-4'), @@ -75,15 +66,8 @@ const UsersTableRow = ({ obj: user, index, key, style }) => { ); }; -export const VMUsersList: React.FC = ({ - vmi, - vmStatusBundle, - delay = URL_POLL_DEFAULT_DELAY, -}) => { - const [response, error, loading] = useURLPoll( - guestAgentURL(vmi), - delay, - ); +export const VMUsersList: React.FC = ({ vmi, vmStatusBundle, delay }) => { + const [response, error, loading] = useGuestAgentInfo({ vmi, delay }); if (vmStatusBundle.status !== VMStatus.RUNNING) { return
{VIRTUAL_MACHINE_IS_NOT_RUNNING}
; @@ -119,16 +103,6 @@ export const VMUsersList: React.FC = ({ ); }; -type VirtualMachineInstanceGuestOSUser = { - userName: string; - domain?: string; - loginTime?: number; -}; - -type VirtualMachineInstanceGuestAgentInfo = { - userList?: VirtualMachineInstanceGuestOSUser[]; -}; - type VMUsersListProps = { vmi?: VMIKind; vmStatusBundle?: VMStatusBundle; diff --git a/frontend/packages/kubevirt-plugin/src/hooks/use-guest-agent-info.ts b/frontend/packages/kubevirt-plugin/src/hooks/use-guest-agent-info.ts new file mode 100644 index 000000000000..af4a25b4d629 --- /dev/null +++ b/frontend/packages/kubevirt-plugin/src/hooks/use-guest-agent-info.ts @@ -0,0 +1,64 @@ +import { VMIKind } from '../types'; +import { useURLPoll } from '@console/internal/components/utils/url-poll-hook'; +import { getVMIApiPath, getVMISubresourcePath } from '../selectors/vmi/selectors'; +import { isGuestAgentInstalled } from '../components/dashboards-page/vm-dashboard/vm-alerts'; + +const guestAgentURL = (vmi: VMIKind) => + vmi && + isGuestAgentInstalled(vmi) && + `/${getVMISubresourcePath()}/${getVMIApiPath(vmi)}/guestosinfo`; + +const useGuestAgentInfo = ({ vmi, delay }: GuestAgentInfoProps) => + useURLPoll(guestAgentURL(vmi), delay); + +type GuestAgentInfoProps = { + vmi: VMIKind; + delay?: number; +}; + +// https://kubevirt.io/api-reference/master/definitions.html#_v1_virtualmachineinstancefilesystem +type VirtualMachineInstanceFileSystem = { + diskName: string; + fileSystemType: string; + mountPoint: string; + totalBytes: number; + usedBytes: number; +}; + +// https://kubevirt.io/api-reference/master/definitions.html#_v1_virtualmachineinstancefilesysteminfo +type VirtualMachineInstanceFileSystemInfo = { + disks: VirtualMachineInstanceFileSystem[]; +}; + +// https://kubevirt.io/api-reference/master/definitions.html#_v1_virtualmachineinstanceguestagentinfo +type VirtualMachineInstanceGuestOSInfo = { + id?: string; + kernelRelease?: string; + kernelVersion?: string; + machine?: string; + name?: string; + prettyName?: string; + version?: string; + versionId?: string; +}; + +// https://kubevirt.io/api-reference/master/definitions.html#_v1_virtualmachineinstanceguestosuser +type VirtualMachineInstanceGuestOSUser = { + userName: string; + domain?: string; + loginTime?: number; +}; + +// https://kubevirt.io/api-reference/master/definitions.html#_v1_virtualmachineinstancefilesysteminfo +type VirtualMachineInstanceGuestAgentInfo = { + apiVersion?: string; + fsInfo?: VirtualMachineInstanceFileSystemInfo; + guestAgentVersion?: string; + hostname?: string; + kind?: string; + os?: VirtualMachineInstanceGuestOSInfo; + timezone?: string; + userList?: VirtualMachineInstanceGuestOSUser[]; +}; + +export { useGuestAgentInfo, GuestAgentInfoProps };