Skip to content

Commit d15e22b

Browse files
committed
Merge branch 'master' of github.com:Qihoo360/wayne into feature/add_kubernetes_pvc_support
# Conflicts: # src/frontend/src/app/admin/admin-routing.module.ts # src/frontend/src/app/admin/admin.module.ts # src/frontend/src/assets/i18n/zh-Hans.json
2 parents 1690c9f + a9949bd commit d15e22b

File tree

13 files changed

+253
-2
lines changed

13 files changed

+253
-2
lines changed

src/frontend/src/app/admin/admin-routing.module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import { KubeDaemonsetComponent } from './kubernetes/daemonset/kube-daemonset.co
7979
import { KubeCronjobComponent } from './kubernetes/cronjob/kube-cronjob.component';
8080
import { KubeJobComponent } from './kubernetes/job/kube-job.component';
8181
import { KubePvcComponent } from './kubernetes/pvc/kube-pvc.component';
82+
import { KubeReplicasetComponent } from './kubernetes/replicaset/kube-replicaset.component';
8283

8384

8485
const routes: Routes = [
@@ -181,6 +182,8 @@ const routes: Routes = [
181182
{path: 'kubernetes/job/:cluster', component: KubeJobComponent},
182183
{path: 'kubernetes/persistentvolumeclaim', component: KubePvcComponent},
183184
{path: 'kubernetes/persistentvolumeclaim/:cluster', component: KubePvcComponent},
185+
{path: 'kubernetes/replicaset', component: KubeReplicasetComponent},
186+
{path: 'kubernetes/replicaset/:cluster', component: KubeReplicasetComponent},
184187
...ADMINROUTES
185188
]
186189
}

src/frontend/src/app/admin/admin.module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import { KubeStatefulsetModule } from './kubernetes/statefulset/kube-statefulset
5858
import { KubeDaemonsetModule } from './kubernetes/daemonset/kube-daemonset.module';
5959
import { KubeCronjobModule } from './kubernetes/cronjob/kube-cronjob.module';
6060
import { KubeJobModule } from './kubernetes/job/kube-job.module';
61+
import { KubeReplicasetModule } from './kubernetes/replicaset/kube-replicaset.module';
6162
import { KubePvcModule } from './kubernetes/pvc/kube-pvc.module';
6263

6364
@NgModule({
@@ -110,6 +111,8 @@ import { KubePvcModule } from './kubernetes/pvc/kube-pvc.module';
110111
KubeDaemonsetModule,
111112
KubeCronjobModule,
112113
KubeJobModule,
114+
KubeReplicasetModule,
115+
KubeJobModule,
113116
KubePvcModule
114117
],
115118
providers: [

src/frontend/src/app/admin/kubernetes/job/kube-job.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
<wayne-checkbox-group [(ngModel)]="showList">
1313
<wayne-checkbox value="name">{{'ADMIN.KUBERNETES.JOB.LIST.NAME' | translate}}</wayne-checkbox>
1414
<wayne-checkbox value="label">{{'ADMIN.KUBERNETES.JOB.LIST.LABEL' | translate}}</wayne-checkbox>
15+
<wayne-checkbox value="containers">{{'ADMIN.KUBERNETES.JOB.LIST.IMAGES' | translate}}</wayne-checkbox>
16+
<wayne-checkbox value="status">{{'ADMIN.KUBERNETES.JOB.LIST.STATUS' | translate}}</wayne-checkbox>
1517
<wayne-checkbox value="age">{{'ADMIN.KUBERNETES.JOB.LIST.AGE' | translate}}</wayne-checkbox>
1618
</wayne-checkbox-group>
1719
</wayne-filter-box>

src/frontend/src/app/admin/kubernetes/job/kube-job.component.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { ListJobComponent } from './list-job/list-job.component';
1313
const showState = {
1414
'name': {hidden: false},
1515
'label': {hidden: false},
16+
'containers': {hidden: false},
17+
'status': {hidden: false},
1618
'age': {hidden: false},
1719
};
1820

src/frontend/src/app/admin/kubernetes/job/list-job/list-job.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@
4444
</clr-dg-cell>
4545
<clr-dg-cell>
4646
{{obj.status.succeeded ? obj.status.succeeded : 0}}/{{obj.spec.completions }}
47-
<clr-icon style="color: #FF3434" shape="exclamation-triangle" *ngIf="obj.spec.completions !== obj.status.succeeded"
47+
<clr-icon style="color: #FF3434" shape="exclamation-triangle" *ngIf="!isReady(obj)"
4848
class="is-solid"></clr-icon>
49-
<clr-icon style="color: green" shape="success-standard" *ngIf="obj.spec.completions === obj.status.succeeded"
49+
<clr-icon style="color: green" shape="success-standard" *ngIf="isReady(obj)"
5050
class="is-solid"></clr-icon>
5151
</clr-dg-cell>
5252
<clr-dg-cell> {{ obj.metadata.creationTimestamp | relativeTime}} </clr-dg-cell>

src/frontend/src/app/admin/kubernetes/job/list-job/list-job.component.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,10 @@ export class ListJobComponent extends KubernetesNamespacedListResource {
1515
super(tplDetailService);
1616
}
1717

18+
isReady(obj: any): boolean {
19+
const readyNumber = obj.status.succeeded ? obj.status.succeeded : 0;
20+
const desiredNumber = obj.spec.completions;
21+
return readyNumber === desiredNumber;
22+
}
23+
1824
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<div class="clr-row">
2+
<div class="clr-col-lg-12 clr-col-md-12 clr-col-sm-12 clr-col-xs-12">
3+
<div class="table-search">
4+
<div class="table-search-left">
5+
<button class="wayne-button normal" (click)="createResource()">
6+
{{'ADMIN.KUBERNETES.REPLICASET.CREATE' | translate}}
7+
</button>
8+
<button class="wayne-button normal" (click)="retrieveResource()">
9+
{{'ADMIN.KUBERNETES.ACTION.REFRESH' | translate}}
10+
</button>
11+
<wayne-filter-box (confirm)="onConfirmEvent()" (cancel)="onCancelEvent()">
12+
<wayne-checkbox-group [(ngModel)]="showList">
13+
<wayne-checkbox value="name">{{'ADMIN.KUBERNETES.REPLICASET.LIST.NAME' | translate}}</wayne-checkbox>
14+
<wayne-checkbox value="label">{{'ADMIN.KUBERNETES.REPLICASET.LIST.LABEL' | translate}}</wayne-checkbox>
15+
<wayne-checkbox value="containers">{{'ADMIN.KUBERNETES.REPLICASET.LIST.IMAGES' | translate}}</wayne-checkbox>
16+
<wayne-checkbox value="status">{{'ADMIN.KUBERNETES.REPLICASET.LIST.STATUS' | translate}}</wayne-checkbox>
17+
<wayne-checkbox value="age">{{'ADMIN.KUBERNETES.REPLICASET.LIST.AGE' | translate}}</wayne-checkbox>
18+
</wayne-checkbox-group>
19+
</wayne-filter-box>
20+
<label for="namespace_name" class="clr-col-md-3">{{'ADMIN.KUBERNETES.LABEL.NAMESPACE' | translate}}</label>
21+
<wayne-select [(ngModel)]="namespace" (change)="retrieveResource()"
22+
searchable
23+
name="namespace_name"
24+
[placeholder]="'PLACEHOLDER.CHOOSE' | translate"
25+
style="margin-left: 12px;">
26+
<wayne-option *ngFor="let ns of namespaces" [value]="ns">{{ns}}</wayne-option>
27+
</wayne-select>
28+
</div>
29+
</div>
30+
31+
<wayne-list-replicaset
32+
[resources]="resources"
33+
[showState]="showState"
34+
(delete)="onDeleteResourceEvent($event)"
35+
(edit)="onEditResourceEvent($event)"
36+
[page]="pageState.page"
37+
[cluster]="cluster"
38+
(paginate)="retrieveResource($event)">
39+
</wayne-list-replicaset>
40+
</div>
41+
</div>
42+
<deletion-dialog (outputObj)="confirmDeleteEvent($event)"></deletion-dialog>
43+
<wayne-ace-editor (createOutputObj)="onCreateResourceEvent($event)" (outputObj)="onSaveResourceEvent($event)"></wayne-ace-editor>
44+
<wayne-float-window value="{{ cluster }}">
45+
<wayne-float-window-item *ngFor="let cluster of clusters" [value]="cluster"
46+
(click)="jumpToHref(cluster)"></wayne-float-window-item>
47+
</wayne-float-window>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
2+
import { ActivatedRoute, Router } from '@angular/router';
3+
import { MessageHandlerService } from '../../../shared/message-handler/message-handler.service';
4+
import { ClusterService } from '../../../shared/client/v1/cluster.service';
5+
import { AuthService } from '../../../shared/auth/auth.service';
6+
import { AceEditorComponent } from '../../../shared/ace-editor/ace-editor.component';
7+
import { KubernetesClient } from '../../../shared/client/v1/kubernetes/kubernetes';
8+
import { KubeResourceReplicaSet } from '../../../shared/shared.const';
9+
import { KubernetesNamespacedResource } from '../../../shared/base/kubernetes-namespaced/kubernetes-namespaced-resource';
10+
import { DeletionDialogComponent } from '../../../shared/deletion-dialog/deletion-dialog.component';
11+
import { ListReplicasetComponent } from './list-replicaset/list-replicaset.component';
12+
13+
const showState = {
14+
'name': {hidden: false},
15+
'label': {hidden: false},
16+
'containers': {hidden: false},
17+
'status': {hidden: false},
18+
'age': {hidden: false},
19+
};
20+
21+
@Component({
22+
selector: 'wayne-kube-replicaset',
23+
templateUrl: './kube-replicaset.component.html'
24+
})
25+
26+
export class KubeReplicasetComponent extends KubernetesNamespacedResource implements OnInit, OnDestroy {
27+
@ViewChild(ListReplicasetComponent)
28+
listResourceComponent: ListReplicasetComponent;
29+
30+
@ViewChild(AceEditorComponent)
31+
aceEditorModal: AceEditorComponent;
32+
33+
@ViewChild(DeletionDialogComponent)
34+
deletionDialogComponent: DeletionDialogComponent;
35+
36+
constructor(public kubernetesClient: KubernetesClient,
37+
public route: ActivatedRoute,
38+
public router: Router,
39+
public clusterService: ClusterService,
40+
public authService: AuthService,
41+
public messageHandlerService: MessageHandlerService) {
42+
super(kubernetesClient, route, router, clusterService, authService, messageHandlerService);
43+
super.registResourceType('replicaset');
44+
super.registKubeResource(KubeResourceReplicaSet);
45+
super.registShowSate(showState);
46+
}
47+
48+
ngOnInit() {
49+
super.ngOnInit();
50+
}
51+
52+
ngOnDestroy(): void {
53+
super.ngOnDestroy();
54+
}
55+
56+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { NgModule } from '@angular/core';
2+
import { SharedModule } from '../../../shared/shared.module';
3+
import { ReactiveFormsModule } from '@angular/forms';
4+
import { KubeReplicasetComponent } from './kube-replicaset.component';
5+
import { KubernetesClient } from '../../../shared/client/v1/kubernetes/kubernetes';
6+
import { DeletionDialogModule } from '../../../shared/deletion-dialog/deletion-dialog.module';
7+
import { ListReplicasetComponent } from './list-replicaset/list-replicaset.component';
8+
9+
@NgModule({
10+
imports: [
11+
SharedModule,
12+
ReactiveFormsModule,
13+
DeletionDialogModule
14+
],
15+
providers: [
16+
KubernetesClient
17+
],
18+
exports: [
19+
KubeReplicasetComponent,
20+
ListReplicasetComponent
21+
],
22+
declarations: [
23+
KubeReplicasetComponent,
24+
ListReplicasetComponent
25+
]
26+
})
27+
28+
export class KubeReplicasetModule {
29+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<clr-datagrid (clrDgRefresh)="refresh($event)">
2+
<clr-dg-column class="col-app-name" [clrDgField]="'name'">
3+
<ng-container *clrDgHideableColumn="showState['name']">
4+
{{'ADMIN.KUBERNETES.REPLICASET.LIST.NAME' | translate}}
5+
</ng-container>
6+
</clr-dg-column>
7+
<clr-dg-column>
8+
<ng-container *clrDgHideableColumn="showState['label']">
9+
{{'ADMIN.KUBERNETES.REPLICASET.LIST.LABEL' | translate}}
10+
</ng-container>
11+
</clr-dg-column>
12+
<clr-dg-column class="col-version">
13+
<ng-container *clrDgHideableColumn="showState['containers']">
14+
{{'ADMIN.KUBERNETES.REPLICASET.LIST.IMAGES' | translate}}
15+
</ng-container>
16+
</clr-dg-column>
17+
<clr-dg-column>
18+
<ng-container *clrDgHideableColumn="showState['status']">
19+
{{'ADMIN.KUBERNETES.REPLICASET.LIST.STATUS' | translate}}
20+
</ng-container>
21+
</clr-dg-column>
22+
<clr-dg-column [clrDgField]="'creationTimestamp'">
23+
<ng-container *clrDgHideableColumn="showState['age']">
24+
{{'ADMIN.KUBERNETES.REPLICASET.LIST.AGE' | translate}}
25+
</ng-container>
26+
</clr-dg-column>
27+
28+
29+
<clr-dg-row *ngFor="let obj of resources" [clrDgItem]="obj">
30+
<clr-dg-action-overflow>
31+
<button class="action-item" (click)="onEditEvent(obj)">{{'ADMIN.KUBERNETES.ACTION.EDIT' | translate}}</button>
32+
<button class="action-item" (click)="onDeleteEvent(obj)">{{'ADMIN.KUBERNETES.ACTION.DELETE' | translate}}</button>
33+
</clr-dg-action-overflow>
34+
<clr-dg-cell class="col-app-name"> {{ obj.metadata.name }} </clr-dg-cell>
35+
<clr-dg-cell>
36+
<div *ngFor="let label of obj.metadata.labels | keyvalue" class="version-text">
37+
<a href="javascript:" (click)="versionDetail(label.key + ': ' + label.value)">{{label.key}}: {{label.value}}</a>
38+
</div>
39+
</clr-dg-cell>
40+
<clr-dg-cell class="col-version">
41+
<div *ngFor="let container of obj.spec.template.spec.containers" class="version-text">
42+
<a href="javascript:" (click)="versionDetail(container.image)">{{container.image}}</a>
43+
</div>
44+
</clr-dg-cell>
45+
<clr-dg-cell>
46+
{{obj.status.readyReplicas ? obj.status.readyReplicas : 0}}/{{ obj.spec.replicas }}
47+
<clr-icon style="color: #FF3434" shape="exclamation-triangle" *ngIf="!isReady(obj)"
48+
class="is-solid"></clr-icon>
49+
<clr-icon style="color: green" shape="success-standard" *ngIf="isReady(obj)"
50+
class="is-solid"></clr-icon>
51+
</clr-dg-cell>
52+
<clr-dg-cell> {{ obj.metadata.creationTimestamp | relativeTime}} </clr-dg-cell>
53+
</clr-dg-row>
54+
<clr-dg-footer>
55+
<wayne-paginate
56+
[(currentPage)]="currentPage"
57+
[total]="page.totalCount"
58+
[pageSizes]="[10, 20, 50]"
59+
(sizeChange)="pageSizeChange($event)">
60+
</wayne-paginate>
61+
</clr-dg-footer>
62+
</clr-datagrid>

0 commit comments

Comments
 (0)