New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Show VMI details #3949
Show VMI details #3949
Conversation
09d0362
to
b521dba
Compare
/test analyze |
b521dba
to
99a0bb4
Compare
/test analyze |
99a0bb4
to
2332126
Compare
2194862
to
205472c
Compare
@@ -44,3 +50,27 @@ export const findConversionPod = (vm: VMKind, pods: PodKind[]) => { | |||
); | |||
}); | |||
}; | |||
|
|||
export const findLauncherPod = (vm: VMKind | VMIKind, pods: PodKind[]) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we already have this function: Please see findVMPod
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
merged findVMPod
and findLauncherPod
import { selectVM } from '../vm-template/selectors'; | ||
|
||
export const isVM = (vmLikeEntity: VMLikeEntityKind | VMIKind): vmLikeEntity is VMKind => | ||
vmLikeEntity && vmLikeEntity.kind === VirtualMachineModel.kind; | ||
|
||
export const isVMI = (vmLikeEntity: VMLikeEntityKind | VMIKind): vmLikeEntity is VMIKind => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe it would make sense to enhance the VMLikeEntityKind with VMIKind. WDYT?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
vmi is now a vmilike kind 👍
return ( | ||
<span className={classes}> | ||
<ResourceIcon | ||
kind={isVM(obj) ? VirtualMachineModel.kind : VirtualMachineInstanceModel.kind} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you could use getVMLikeModel
here if we enhance VMLikeEntityKind
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
breadcrumbsFor={breadcrumbsForVMPage(props.match)} | ||
/> | ||
) : ( | ||
vmiLoaded && ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should take into account that the data should not be editable in the VMI like boot order/nics etc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 disabled edit kebabs on nics and discs
export const VMLikeDetailsPage: React.FC<VirtualMachinesDetailsPageProps> = (props) => { | ||
const { name, ns: namespace } = props.match.params; | ||
const resources = [ | ||
getResource(VirtualMachineModel, { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we rather move this to VirtualMachinesDetailsPage and listen there on what is missing?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
const name = getName(obj); | ||
const namespace = getNamespace(obj); | ||
|
||
const VMpath = resourcePath(VirtualMachineModel.kind, name, namespace); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
shouldn't this kind be conditional as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The idea of this component is to always point to the .../virtualmachines/...
path.
so if someone press the VMI link we want them to always end up in the .../virtualmachines/...
page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looked at the docs, no need to share paths, yeee :-) , removed the code that share vm and vmi paths 👍
@@ -249,6 +256,29 @@ export const getVMStatus = ({ | |||
); | |||
}; | |||
|
|||
export const getVMIStatus = ({ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO we should refactor VM statuses. Nevertheless could we separate VMI status and do it in a followup?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 for refactoring, leaving as is for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
merged the vm and vmi get status methods
205472c
to
f38743f
Compare
f38743f
to
952547b
Compare
63ede6f
to
5d8d8d2
Compare
isBeingMigrated(obj, migrations) || // -||- | ||
(vm && isBeingImported(vm, pods)) || // -||- | ||
(vm && isBeingStopped(vm, launcherPod)) || | ||
(vm && isRunning(vm)) || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we rename this to isOff
? - it is really confusing this way
vmi?: VMIKind; | ||
pods?: PodKind[]; | ||
migrations?: K8sResourceKind[]; | ||
}): VMStatus => { | ||
const launcherPod = findVMPod(vm, pods); | ||
const obj = vm || vmi; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we name it vmLike?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
vmiLike
isWaitingForVMI(vm) || { status: VM_STATUS_UNKNOWN } | ||
isVMError(obj) || | ||
isCreated(obj, launcherPod) || | ||
(vm && isWaitingForVMI(vm)) || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(vm && isWaitingForVMI(vm)) || | |
(!vmi && vm && isWaitingForVMI(vm)) || |
isV2VConversion(obj, pods) || // these statuses must precede isRunning() because they do not rely on ready vms | ||
isBeingMigrated(obj, migrations) || // -||- | ||
(vm && isBeingImported(vm, pods)) || // -||- | ||
(vm && isBeingStopped(vm, launcherPod)) || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO isBeingStopped and isCreated (wrong usage now) can be used with just a presence of VMI.
We just need to substitute isVMCreated(vm) with just a presence of VMI and we can check the underlying pods in both these methods
@@ -177,7 +183,7 @@ const isBeingImported = (vm: VMKind, pods?: PodKind[]): VMStatus => { | |||
return NOT_HANDLED; | |||
}; | |||
|
|||
const isV2VConversion = (vm: VMKind, pods?: PodKind[]): VMStatus => { | |||
const isV2VConversion = (vm: VMLikeEntityKind, pods?: PodKind[]): VMStatus => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO we should not overuse this type. We should use it in places which can trully handle all 3 types, which is not this case. Can you please make another type for vm and vmi or change it back to VMKind | VMIKind
@@ -9,6 +9,9 @@ export const getVMIDisks = (vmi: VMIKind): VMIKind['spec']['domain']['devices'][ | |||
export const getVMINetworks = (vmi: VMIKind): VMIKind['spec']['networks'] => | |||
vmi && vmi.spec && vmi.spec.networks ? vmi.spec.networks : []; | |||
|
|||
export const getVMIVolumes = (vmi: VMIKind): VMIKind['spec']['volumes'] => | |||
vmi && vmi.spec && vmi.spec.voluems ? vmi.spec.volumes : []; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
voluems
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
although in the future these selectors could handle VMLikeEntityKind and add spec.template
when needed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
these selectors would need a second thought - lets not get into this right now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
still wrong
import { getMigrationVMIName, isMigrating } from './selectors'; | ||
|
||
export const findVMIMigration = (vmi: VMIKind | VMKind, migrations?: K8sResourceKind[]) => { | ||
export const findVMIMigration = (vmi: VMLikeEntityKind, migrations?: K8sResourceKind[]) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we keep the old ?
@@ -92,7 +92,7 @@ export const getFlavorDescription = (vm: VMKind) => { | |||
return resourceStr || undefined; | |||
}; | |||
|
|||
export const getVMStatusConditions = (vm: VMKind) => | |||
export const getVMStatusConditions = (vm: VMLikeEntityKind) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we refine the types here and in other places?
@@ -46,40 +39,6 @@ export const isPodSchedulable = (pod: PodKind) => { | |||
); | |||
}; | |||
|
|||
export const findVMPod = ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is wrong with this function? Why can't we keep it ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
switched back :-)
kind === VirtualMachineModel.kind && name === getName(vm) && namespace === getNamespace(vm); | ||
|
||
const vmiEventFilter = (vm: VMKind | VMIKind): EventFilterFunction => ({ kind, namespace, name }) => | ||
const vmiEventFilter = (vm: VMLikeEntityKind): EventFilterFunction => ({ kind, namespace, name }) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lets make another type for VMKind | VMIKind
and use these where needed
you can even do
export type VMILikeEntityKind = VMKind | VMIKind;
export type VMLikeEntityKind = VMILikeEntityKind | TemplateKind;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there are places where we dont expect VMI. What about?
export type VMILikeEntityKind = VMKind | VMIKind;
export type VMLikeEntityKind = VMKind | TemplateKind;
export type VMGenericLikeEntityKind = VMLikeEntityKind | VMILikeEntityKind
still not sure about the naming
thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
edited
@@ -1,17 +1,24 @@ | |||
import { K8sKind } from '@console/internal/module/k8s'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we can keep these functions
resources={resources} | ||
breadcrumbsFor={breadcrumbsForVMPage(props.match)} | ||
> | ||
<HintBlock |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
let's please check the ownerReferences first before we show that
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changes the text to make sense also when this VMI is owned :-)
p.s.
for this PR users should not end up in a VMI details if it's owned because we removed the easy links to it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know if this is a good solution. Please consider removing it or making it conditional.
Btw they will end up here quite easily when they click on a link in VM events
|
||
const breadcrumbsForVMPage = (match: any) => () => [ | ||
{ | ||
name: VirtualMachineModel.labelPlural, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just making sure that this is correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, the idea is to have the same page ... for vm and vmi, It do have different path now, but user should see the same breadcrumbs for both ...
p.s.
when changing namespace it will get to the wrong list, but this will have to be looked at at later time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
for the detail, shouldn't hurt removing the namespace select altogether
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
makes sense to me too, this is a console wise change, so not for this PR, I agree we should look how to do this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok
disksPage, | ||
]; | ||
|
||
const resources = [ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should lookup the vm if it has one - for the status.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
|
||
const resources = [ | ||
getResource(ServiceModel, { namespace: getNamespace(vmProp), prop: 'services' }), | ||
]; | ||
|
||
return ( | ||
<div className="co-m-pane__body"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should pass down a flag - what kind of page we are showing as both vm and vmi can be present. The user can easily navigate to VMI even if VM is there
editButtonId={prefixedID(id, 'cdrom-edit')} | ||
onEditClick={() => VMCDRomModal({ vmLikeEntity: vm, modalClassName: 'modal-lg' })} | ||
idValue={prefixedID(id, 'cdrom')} | ||
isNotAvail={cds.length === 0} | ||
> | ||
<DiskSummary disks={cds} vm={vm} /> | ||
{vm && <DiskSummary disks={cds} vm={vm} />} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we can show it but it should not be editable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's not editable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
but it should be at least visible
@@ -121,14 +121,6 @@ export const VMDetailsList: React.FC<VMResourceListProps> = ({ | |||
<VMStatuses vm={vm} vmi={vmi} pods={pods} migrations={migrations} /> | |||
</VMDetailsItem> | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why are we removing the VMI instance link? I though Pod link should be removed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:-) things change ... the reason is that the vm and vmi page show the same data ... so no new info ...
p.s.
leaving it will require the page to know if it's a vm of vmi page ...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see
editButtonId={prefixedID(id, 'cdrom-edit')} | ||
onEditClick={() => VMCDRomModal({ vmLikeEntity: vm, modalClassName: 'modal-lg' })} | ||
idValue={prefixedID(id, 'cdrom')} | ||
isNotAvail={cds.length === 0} | ||
> | ||
<DiskSummary disks={cds} vm={vm} /> | ||
{vm && <DiskSummary disks={cds} vm={vm} />} | ||
</VMDetailsItem> | ||
|
||
<VMDetailsItem |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lets please forbid editing for flavor and dedicated resources as well
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
btw, does it make sense to create a <Context>
for all components to check if it is a vm or vmi to set editability of their fields? E.g. annotations and description should be editable and others most likely not
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It will be nice to know if we are in vm or vmi, but we can do it in a follow up because it will need to be tested and we may introduce new bugs if we do it too quickly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
editing still possible
|
||
const ipAddrs = getVmiIpAddressesString(vmi, vmStatus); | ||
const ipAddrs = getVmiIpAddresses(vmi).join(', '); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getVmiIpAddressesString can be removed now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
namespace={namespace} | ||
kind={VirtualMachineModel.kind} | ||
kindObj={VirtualMachineModel} | ||
menuActions={menuActionsCreator} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
menuActions
need to be fixed to take VMI into account + also the Consoles
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice !
0cc4846
to
cb94102
Compare
isV2VConversion(vmLike, pods) || // these statuses must precede isRunning() because they do not rely on ready vms | ||
isBeingMigrated(vmLike, migrations) || // -||- | ||
(vm && isBeingImported(vm, pods)) || // -||- | ||
(vmi && isBeingStopped(vm, launcherPod)) || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the vmi check should go inside so we check for the status of the launcher pod
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
isCreated(vm, launcherPod) || | ||
isWaitingForVMI(vm) || { status: VM_STATUS_UNKNOWN } | ||
isVMError(vmLike) || | ||
(vmi && isCreated(vmLike, launcherPod)) || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
and here
@@ -9,6 +9,9 @@ export const getVMIDisks = (vmi: VMIKind): VMIKind['spec']['domain']['devices'][ | |||
export const getVMINetworks = (vmi: VMIKind): VMIKind['spec']['networks'] => | |||
vmi && vmi.spec && vmi.spec.networks ? vmi.spec.networks : []; | |||
|
|||
export const getVMIVolumes = (vmi: VMIKind): VMIKind['spec']['volumes'] => | |||
vmi && vmi.spec && vmi.spec.voluems ? vmi.spec.volumes : []; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
still wrong
disks: getDisks(vm), | ||
volumes: getVolumes(vm), | ||
disks: vmi && vmi.spec ? getVMIDisks(vmi) : getDisks(vm), | ||
volumes: vmi && vmi.spec ? getVMIVolumes(vmi) : getVolumes(vm), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we have to check for the spec?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
resources={resources} | ||
breadcrumbsFor={breadcrumbsForVMPage(props.match)} | ||
> | ||
<HintBlock |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know if this is a good solution. Please consider removing it or making it conditional.
Btw they will end up here quite easily when they click on a link in VM events
|
||
const breadcrumbsForVMPage = (match: any) => () => [ | ||
{ | ||
name: VirtualMachineModel.labelPlural, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok
@@ -121,14 +121,6 @@ export const VMDetailsList: React.FC<VMResourceListProps> = ({ | |||
<VMStatuses vm={vm} vmi={vmi} pods={pods} migrations={migrations} /> | |||
</VMDetailsItem> | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see
editButtonId={prefixedID(id, 'cdrom-edit')} | ||
onEditClick={() => VMCDRomModal({ vmLikeEntity: vm, modalClassName: 'modal-lg' })} | ||
idValue={prefixedID(id, 'cdrom')} | ||
isNotAvail={cds.length === 0} | ||
> | ||
<DiskSummary disks={cds} vm={vm} /> | ||
{vm && <DiskSummary disks={cds} vm={vm} />} | ||
</VMDetailsItem> | ||
|
||
<VMDetailsItem |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
editing still possible
editButtonId={prefixedID(id, 'cdrom-edit')} | ||
onEditClick={() => VMCDRomModal({ vmLikeEntity: vm, modalClassName: 'modal-lg' })} | ||
idValue={prefixedID(id, 'cdrom')} | ||
isNotAvail={cds.length === 0} | ||
> | ||
<DiskSummary disks={cds} vm={vm} /> | ||
{vm && <DiskSummary disks={cds} vm={vm} />} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
but it should be at least visible
const devices = getDevices(vm); | ||
const launcherPod = findVMPod(vmLike, pods); | ||
const id = getBasicID(vmLike); | ||
const cds = vm ? getCDRoms(vm) : []; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should work for vmi as well
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
working and visible :-)
); | ||
}; | ||
|
||
export type VirtualMachinesDetailsPageProps = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please change the name as it is a duplicate
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
|
||
import './vmi-details-page.scss'; | ||
|
||
export const VirtualMachinesInstanseDetailsPage: React.FC<VirtualMachinesDetailsPageProps> = ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks 👍
a546fcc
to
6bb1d80
Compare
/test analyze |
- move around imports to prevent circular dependencies - better naming? - add flavor/workload/os to the vmi when creating the vms - show all VMI details correctly and without editing possibilities (except description) - fix types - do not load unnecesary resources in vm console - fix description editing when empty - do not show empty template link in VMI - unify selectors for VMWrapper and VMIWrapper
9582e13
to
7e1c078
Compare
/lgtm |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: jelkosz, yaacov The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
/retest Please review the full test history for this PR and help us cut down flakes. |
1 similar comment
/retest Please review the full test history for this PR and help us cut down flakes. |
@yaacov: The following test failed, say
Full PR test history. Your PR dashboard. Please help us cut down on flakes by linking to an open issue when you hit one in your PR. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here. |
Show VMI as type of Virtual Machine
Design:
openshift/openshift-origin-design#310
Screenshot:
VM Details page:
VMI Details page:
VM List page: