From 6d74ab5f540026e136097cd324a41e181a32519c Mon Sep 17 00:00:00 2001 From: wilhelmguo Date: Wed, 20 Feb 2019 18:59:28 +0800 Subject: [PATCH 1/2] backend: kubernetes pod add entercontainer link --- src/backend/controllers/kubernetes/pod/pod.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/controllers/kubernetes/pod/pod.go b/src/backend/controllers/kubernetes/pod/pod.go index a02fe4005..a54fdb125 100644 --- a/src/backend/controllers/kubernetes/pod/pod.go +++ b/src/backend/controllers/kubernetes/pod/pod.go @@ -104,6 +104,7 @@ func (c *KubePodController) List() { deployment := c.Input().Get("deployment") statefulset := c.Input().Get("statefulset") daemonSet := c.Input().Get("daemonSet") + podName := c.Input().Get("pod") job := c.Input().Get("job") manager, err := client.Manager(cluster) if err == nil { @@ -117,6 +118,10 @@ func (c *KubePodController) List() { result, err = pod.GetPodsByDaemonSet(manager.CacheFactory, namespace, daemonSet) } else if job != "" { result, err = pod.GetPodsByJob(manager.CacheFactory, namespace, job) + } else if podName != "" { + var podInfo *pod.Pod + podInfo, err = pod.GetPodByName(manager.Client, namespace, podName) + result = []*pod.Pod{podInfo} } else { err = fmt.Errorf("unknown resource type. ") } From ec8ae523e7ab437ed20be0b6c9c0de8ce3ebedc5 Mon Sep 17 00:00:00 2001 From: wilhelmguo Date: Wed, 20 Feb 2019 18:59:49 +0800 Subject: [PATCH 2/2] frontend: kubernetes pod add entercontainer link --- .../kubernetes/pod/kube-pod.component.html | 1 + .../kubernetes/pod/kube-pod.component.ts | 1 - .../pod/list-pod/list-pod.component.html | 2 ++ .../pod/list-pod/list-pod.component.ts | 13 ++++++++++ .../app/shared/list-pod/list-pod.component.ts | 24 ++++++++++--------- src/frontend/src/assets/i18n/zh-Hans.json | 4 +++- 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/frontend/src/app/admin/kubernetes/pod/kube-pod.component.html b/src/frontend/src/app/admin/kubernetes/pod/kube-pod.component.html index 4690f17a6..9c6d63a57 100644 --- a/src/frontend/src/app/admin/kubernetes/pod/kube-pod.component.html +++ b/src/frontend/src/app/admin/kubernetes/pod/kube-pod.component.html @@ -33,6 +33,7 @@ {{'ADMIN.KUBERNETES.ACTION.EDIT' | translate}} + + {{ obj.metadata.name }} diff --git a/src/frontend/src/app/admin/kubernetes/pod/list-pod/list-pod.component.ts b/src/frontend/src/app/admin/kubernetes/pod/list-pod/list-pod.component.ts index 54b9912db..9fce16304 100644 --- a/src/frontend/src/app/admin/kubernetes/pod/list-pod/list-pod.component.ts +++ b/src/frontend/src/app/admin/kubernetes/pod/list-pod/list-pod.component.ts @@ -12,11 +12,24 @@ import { KubePod } from '../../../../shared/model/v1/kubernetes/kubepod'; export class ListPodComponent extends KubernetesListResource { @Input() resources: any[]; @Input() showState: object; + @Input() cluster: string; constructor(public tplDetailService: TplDetailService) { super(tplDetailService); } + enterContainer(pod: KubePod): void { + const url = `portal/namespace/0/app/0/pod` + + `/${pod.metadata.name}/pod/${pod.metadata.name}/terminal/${this.cluster}/${pod.metadata.namespace}`; + window.open(url, '_blank'); + } + + podLog(pod: KubePod): void { + const url = `portal/logging/namespace/0/app/0/pod/${pod.metadata.name}` + + `/pod/${pod.metadata.name}/${this.cluster}/${pod.metadata.namespace}`; + window.open(url, '_blank'); + } + // getPodStatus returns the pod state getPodStatus(pod: KubePod): string { // Terminating diff --git a/src/frontend/src/app/shared/list-pod/list-pod.component.ts b/src/frontend/src/app/shared/list-pod/list-pod.component.ts index ce517baef..a258ada9b 100644 --- a/src/frontend/src/app/shared/list-pod/list-pod.component.ts +++ b/src/frontend/src/app/shared/list-pod/list-pod.component.ts @@ -27,7 +27,7 @@ import { AuthService } from '../auth/auth.service'; styleUrls: ['list-pod.scss'] }) -export class ListPodComponent implements OnDestroy { +export class ListPodComponent implements OnDestroy { @Input() Type: string; checkOnGoing = false; isSubmitOnGoing = false; @@ -38,7 +38,7 @@ export class ListPodComponent implements OnDestroy { timeComparator = new TimeComparator(); stateComparator = new StateComparator(); currentCluster: string; - deployment: string; + resourceName: string; logSource: string; timer: any; whetherHotReflash = true; @@ -87,9 +87,9 @@ export class ListPodComponent implements OnDestroy { clearInterval(this.timer); } - openModal(cluster: string, deployment: string) { + openModal(cluster: string, resourceName: string) { this.currentCluster = cluster; - this.deployment = deployment; + this.resourceName = resourceName; this.pods = null; this.logSource = null; this.modalOpened = true; @@ -125,12 +125,14 @@ export class ListPodComponent implements OnDestroy { if (!this.modalOpened) { clearInterval(this.timer); } - if (this.whetherHotReflash) { this.refresh(); } + if (this.whetherHotReflash) { + this.refresh(); + } }, 5000); } refresh() { - this.podClient.listByResouce(this.appId, this.currentCluster, this.cacheService.kubeNamespace, this.Type, this.deployment).subscribe( + this.podClient.listByResouce(this.appId, this.currentCluster, this.cacheService.kubeNamespace, this.Type, this.resourceName).subscribe( response => { const pods = response.data; this.inventory.size = pods.length; @@ -159,7 +161,7 @@ export class ListPodComponent implements OnDestroy { enterContainer(pod: Pod): void { const appId = this.route.parent.snapshot.params['id']; const url = `portal/namespace/${this.cacheService.namespaceId}/app/${appId}/${this.Type}` + - `/${this.deployment}/pod/${pod.name}/terminal/${this.currentCluster}/${this.cacheService.kubeNamespace}`; + `/${this.resourceName}/pod/${pod.name}/terminal/${this.currentCluster}/${this.cacheService.kubeNamespace}`; window.open(url, '_blank'); } @@ -174,8 +176,8 @@ export class ListPodComponent implements OnDestroy { if (this.logSource === undefined) { this.messageHandlerService.showInfo('缺少机房信息,请联系管理员'); } - const kubeToolCmd = `kubetool log --source ${this.logSource === undefined ? '' : this.logSource} --${this.Type} ${this.deployment} ` + - `--pod=${pod.name} --layout=log`; + const kubeToolCmd = `kubetool log --source ${this.logSource === undefined ? '' : this.logSource} ` + + ` --${this.Type} ${this.resourceName} --pod=${pod.name} --layout=log`; this.copyService.copy(kubeToolCmd); this.switchCopyButton(); } @@ -183,8 +185,8 @@ export class ListPodComponent implements OnDestroy { podLog(pod: Pod): void { const appId = this.route.parent.snapshot.params['id']; - const url = `portal/logging/namespace/${this.cacheService.namespaceId}/app/${appId}/${this.Type}/${this.deployment}` + - `/pod/${pod.name}/${this.currentCluster}/${this.cacheService.kubeNamespace}`; + const url = `portal/logging/namespace/${this.cacheService.namespaceId}/app/${appId}/${this.Type}/${this.resourceName}` + + `/pod/${pod.name}/${this.currentCluster}/${this.cacheService.kubeNamespace}`; window.open(url, '_blank'); } } diff --git a/src/frontend/src/assets/i18n/zh-Hans.json b/src/frontend/src/assets/i18n/zh-Hans.json index 9a16257f3..522b7e268 100644 --- a/src/frontend/src/assets/i18n/zh-Hans.json +++ b/src/frontend/src/assets/i18n/zh-Hans.json @@ -603,7 +603,9 @@ "MIGRATION": "迁移", "DELETE": "删除", "FORCEDELETE": "强制删除", - "REFRESH": "刷新" + "REFRESH": "刷新", + "ENTER_CONTAINER": "进入容器", + "LOG": "查看日志" }, "LABEL": { "NAMESPACE": "命名空间:"