Skip to content

Commit

Permalink
add guest agent info to vm resource summary
Browse files Browse the repository at this point in the history
  • Loading branch information
yaacov committed Jun 10, 2020
1 parent 2aae8b3 commit 76f1e85
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 31 deletions.
Expand Up @@ -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';
Expand Down Expand Up @@ -82,6 +83,8 @@ export const VMResourceSummary: React.FC<VMResourceSummaryProps> = ({
const description = getDescription(vmiLike);
const os = getOperatingSystemName(vmiLike) || getOperatingSystem(vmiLike);

const [guestAgentInfo] = useGuestAgentInfo({ vmi });

return (
<ResourceSummary resource={vmiLike}>
<VMDetailsItem
Expand All @@ -98,8 +101,12 @@ export const VMResourceSummary: React.FC<VMResourceSummaryProps> = ({
</EditButton>
</VMDetailsItem>

<VMDetailsItem title="Operating System" idValue={prefixedID(id, 'os')} isNotAvail={!os}>
{os}
<VMDetailsItem
title="Operating System"
idValue={prefixedID(id, 'os')}
isNotAvail={!(guestAgentInfo?.os?.prettyName || os)}
>
{guestAgentInfo?.os?.prettyName || os}
</VMDetailsItem>

{isVM && (
Expand All @@ -121,6 +128,7 @@ export const VMDetailsList: React.FC<VMResourceListProps> = ({
canUpdateVM,
kindObj,
}) => {
const [guestAgentInfo] = useGuestAgentInfo({ vmi });
const [isBootOrderModalOpen, setBootOrderModalOpen] = React.useState<boolean>(false);
const isVM = kindObj === VirtualMachineModel;
const vmiLike = isVM ? vm : vmi;
Expand Down Expand Up @@ -199,6 +207,22 @@ export const VMDetailsList: React.FC<VMResourceListProps> = ({
{launcherPod && ipAddrs}
</VMDetailsItem>

<VMDetailsItem
title="Hostname"
idValue={prefixedID(id, 'hostname')}
isNotAvail={!guestAgentInfo?.hostname}
>
{guestAgentInfo?.hostname}
</VMDetailsItem>

<VMDetailsItem
title="Time Zone"
idValue={prefixedID(id, 'timezone')}
isNotAvail={!guestAgentInfo?.timezone}
>
{guestAgentInfo?.timezone}
</VMDetailsItem>

<VMDetailsItem
title="Node"
idValue={prefixedID(id, 'node')}
Expand Down
32 changes: 3 additions & 29 deletions frontend/packages/kubevirt-plugin/src/components/vms/vm-users.tsx
Expand Up @@ -4,10 +4,6 @@ import { sortable } from '@patternfly/react-table';
import { fromNow } from '@console/internal/components/utils/datetime';
import { Table, TableRow, TableData } from '@console/internal/components/factory';
import { Timestamp } from '@console/internal/components/utils/timestamp';
import {
useURLPoll,
URL_POLL_DEFAULT_DELAY,
} from '@console/internal/components/utils/url-poll-hook';
import { StatusItem } from '@console/shared/src/components/dashboard/status-card/AlertItem';
import { BlueInfoCircleIcon } from '@console/shared/src/components/status';
import {
Expand All @@ -16,14 +12,9 @@ import {
} from '../../constants/vm/constants';
import { VMStatus } from '../../constants/vm/vm-status';
import { isGuestAgentInstalled } from '../dashboards-page/vm-dashboard/vm-alerts';
import { useGuestAgentInfo } from '../../hooks/use-guest-agent-info';
import { VMStatusBundle } from '../../statuses/vm/types';
import { VMIKind } from '../../types';
import { getVMIApiPath, getVMISubresourcePath } from '../../selectors/vmi/selectors';

const guestAgentURL = (vmi: VMIKind) =>
vmi &&
isGuestAgentInstalled(vmi) &&
`/${getVMISubresourcePath()}/${getVMIApiPath(vmi)}/guestosinfo`;

const tableColumnClasses = [
classNames('col-lg-3', 'col-md-3', 'col-sm-4', 'col-sm-4'),
Expand Down Expand Up @@ -75,15 +66,8 @@ const UsersTableRow = ({ obj: user, index, key, style }) => {
);
};

export const VMUsersList: React.FC<VMUsersListProps> = ({
vmi,
vmStatusBundle,
delay = URL_POLL_DEFAULT_DELAY,
}) => {
const [response, error, loading] = useURLPoll<VirtualMachineInstanceGuestAgentInfo>(
guestAgentURL(vmi),
delay,
);
export const VMUsersList: React.FC<VMUsersListProps> = ({ vmi, vmStatusBundle, delay }) => {
const [response, error, loading] = useGuestAgentInfo({ vmi, delay });

if (vmStatusBundle.status !== VMStatus.RUNNING) {
return <div className="text-center">{VIRTUAL_MACHINE_IS_NOT_RUNNING}</div>;
Expand Down Expand Up @@ -119,16 +103,6 @@ export const VMUsersList: React.FC<VMUsersListProps> = ({
);
};

type VirtualMachineInstanceGuestOSUser = {
userName: string;
domain?: string;
loginTime?: number;
};

type VirtualMachineInstanceGuestAgentInfo = {
userList?: VirtualMachineInstanceGuestOSUser[];
};

type VMUsersListProps = {
vmi?: VMIKind;
vmStatusBundle?: VMStatusBundle;
Expand Down
@@ -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<VirtualMachineInstanceGuestAgentInfo>(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 };

0 comments on commit 76f1e85

Please sign in to comment.