From 944b7786dd97c8de8f7cb9eb7e6446fc2dda58fd Mon Sep 17 00:00:00 2001 From: Pawel Kowalczyk Date: Thu, 22 Nov 2018 16:31:31 +0100 Subject: [PATCH] proper-username-and-link-to-ssh-keys-panel Feature #13864 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- src/models/link.ts | 2 +- .../virtual-machines-actions.ts | 14 ++++++++-- .../virtual-machines-reducer.ts | 11 +++++++- .../virtual-machine-panel.tsx | 27 ++++++++++++------- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/models/link.ts b/src/models/link.ts index 9d1711d8..0b5053dc 100644 --- a/src/models/link.ts +++ b/src/models/link.ts @@ -9,7 +9,7 @@ export interface LinkResource extends Resource { tailUuid: string; linkClass: string; name: string; - properties: {}; + properties: any; } export enum LinkClass { diff --git a/src/store/virtual-machines/virtual-machines-actions.ts b/src/store/virtual-machines/virtual-machines-actions.ts index e58a02cd..c9283afd 100644 --- a/src/store/virtual-machines/virtual-machines-actions.ts +++ b/src/store/virtual-machines/virtual-machines-actions.ts @@ -10,11 +10,14 @@ import { bindDataExplorerActions } from '~/store/data-explorer/data-explorer-act import { formatDate } from "~/common/formatters"; import { unionize, ofType, UnionOf } from "~/common/unionize"; import { VirtualMachinesLoginsResource } from '~/models/virtual-machines'; +import { FilterBuilder } from "~/services/api/filter-builder"; +import { ListResults } from "~/services/common-service/common-resource-service"; export const virtualMachinesActions = unionize({ SET_REQUESTED_DATE: ofType(), - SET_VIRTUAL_MACHINES: ofType(), - SET_LOGINS: ofType() + SET_VIRTUAL_MACHINES: ofType>(), + SET_LOGINS: ofType(), + SET_LINKS: ofType>() }); export type VirtualMachineActions = UnionOf; @@ -37,7 +40,14 @@ export const loadVirtualMachinesData = () => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { dispatch(loadRequestedDate()); const virtualMachines = await services.virtualMachineService.list(); + const virtualMachinesUuids = virtualMachines.items.map(it => it.uuid); + const links = await services.linkService.list({ + filters: new FilterBuilder() + .addIn("headUuid", virtualMachinesUuids) + .getFilters() + }); dispatch(virtualMachinesActions.SET_VIRTUAL_MACHINES(virtualMachines)); + dispatch(virtualMachinesActions.SET_LINKS(links)); // const logins = await services.virtualMachineService.logins(virtualMachines.items[0].uuid); // console.log(logins); // const getAllLogins = await services.virtualMachineService.getAllLogins(); diff --git a/src/store/virtual-machines/virtual-machines-reducer.ts b/src/store/virtual-machines/virtual-machines-reducer.ts index a0dd04d1..fa28417e 100644 --- a/src/store/virtual-machines/virtual-machines-reducer.ts +++ b/src/store/virtual-machines/virtual-machines-reducer.ts @@ -10,6 +10,7 @@ interface VirtualMachines { date: string; virtualMachines: ListResults; logins: VirtualMachinesLoginsResource[]; + links: ListResults; } const initialState: VirtualMachines = { @@ -21,7 +22,14 @@ const initialState: VirtualMachines = { itemsAvailable: 0, items: [] }, - logins: [] + logins: [], + links: { + kind: '', + offset: 0, + limit: 0, + itemsAvailable: 0, + items: [] + } }; export const virtualMachinesReducer = (state = initialState, action: VirtualMachineActions): VirtualMachines => @@ -29,5 +37,6 @@ export const virtualMachinesReducer = (state = initialState, action: VirtualMach SET_REQUESTED_DATE: date => ({ ...state, date }), SET_VIRTUAL_MACHINES: virtualMachines => ({ ...state, virtualMachines }), SET_LOGINS: logins => ({ ...state, logins }), + SET_LINKS: links => ({ ...state, links }), default: () => state }); diff --git a/src/views/virtual-machine-panel/virtual-machine-panel.tsx b/src/views/virtual-machine-panel/virtual-machine-panel.tsx index 7d9adde5..65865370 100644 --- a/src/views/virtual-machine-panel/virtual-machine-panel.tsx +++ b/src/views/virtual-machine-panel/virtual-machine-panel.tsx @@ -15,6 +15,7 @@ import { RootState } from '~/store/store'; import { ListResults } from '~/services/common-service/common-resource-service'; import { HelpIcon } from '~/components/icon/icon'; import { VirtualMachinesLoginsResource } from '~/models/virtual-machines'; +import { Routes } from '~/routes/routes'; type CssRules = 'button' | 'codeSnippet' | 'link' | 'linkIcon' | 'icon'; @@ -54,7 +55,8 @@ const mapStateToProps = (state: RootState) => { return { requestedDate: state.virtualMachines.date, virtualMachines: state.virtualMachines.virtualMachines, - logins: state.virtualMachines.logins + logins: state.virtualMachines.logins, + links: state.virtualMachines.links }; }; @@ -67,6 +69,7 @@ interface VirtualMachinesPanelDataProps { requestedDate: string; virtualMachines: ListResults; logins: VirtualMachinesLoginsResource[]; + links: ListResults; } interface VirtualMachinesPanelActionProps { @@ -85,11 +88,11 @@ export const VirtualMachinePanel = compose( } render() { - const { classes, saveRequestedDate, requestedDate, virtualMachines, logins } = this.props; + const { classes, saveRequestedDate, requestedDate, virtualMachines, logins, links } = this.props; return ( {cardContentWithNoVirtualMachines(requestedDate, saveRequestedDate, classes)} - {virtualMachines.itemsAvailable > 0 && cardContentWithVirtualMachines(virtualMachines, classes)} + {virtualMachines.itemsAvailable > 0 && links.itemsAvailable > 0 && cardContentWithVirtualMachines(virtualMachines, links, classes)} {cardSSHSection(classes)} ); @@ -117,7 +120,7 @@ const cardContentWithNoVirtualMachines = (requestedDate: string, saveRequestedDa const login = 'pawelkowalczyk'; -const cardContentWithVirtualMachines = (virtualMachines: ListResults, classes: any) => +const cardContentWithVirtualMachines = (virtualMachines: ListResults, links: ListResults, classes: any) => @@ -141,11 +144,11 @@ const cardContentWithVirtualMachines = (virtualMachines: ListResults, class {virtualMachines.items.map((it, index) => {it.hostname} - {login} - ssh {login}@shell.arvados + {getUsername(links, it)} + ssh {getUsername(links, it)}@shell.arvados - - Log in as {login} + + Log in as {getUsername(links, it)} @@ -156,13 +159,17 @@ const cardContentWithVirtualMachines = (virtualMachines: ListResults, class ; -// dodac link do ssh panelu jak juz bedzie +const getUsername = (links: ListResults, virtualMachine: any) => { + const link = links.items.find((item: any) => item.headUuid === virtualMachine.uuid); + return link.properties.username || undefined; +}; + const cardSSHSection = (classes: any) => - In order to access virtual machines using SSH, add an SSH key to your account and add a section like this to your SSH configuration file ( ~/.ssh/config): + In order to access virtual machines using SSH, add an SSH key to your account and add a section like this to your SSH configuration file ( ~/.ssh/config):