Skip to content

Commit 8354bc8

Browse files
committed
list replica sets & replication controllers (#650)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 906d9b5 commit 8354bc8

File tree

6 files changed

+123
-19
lines changed

6 files changed

+123
-19
lines changed

Diff for: src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/OperatorFactory.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.Namespa
2424
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.NodesOperator
2525
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PersistentVolumeClaimsOperator
2626
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PersistentVolumesOperator
27+
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.ReplicaSetsOperator
2728
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.SecretsOperator
2829
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.ServicesOperator
2930
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.StatefulSetsOperator
@@ -47,6 +48,8 @@ object OperatorFactory {
4748
NamespacesOperator.KIND to ::NamespacesOperator,
4849
NodesOperator.KIND to ::NodesOperator,
4950
AllPodsOperator.KIND to ::AllPodsOperator,
51+
ReplicaSetsOperator.KIND to ::ReplicaSetsOperator,
52+
ReplicationControllersOperator.KIND to ::ReplicationControllersOperator,
5053
DeploymentsOperator.KIND to ::DeploymentsOperator,
5154
StatefulSetsOperator.KIND to ::StatefulSetsOperator,
5255
DaemonSetsOperator.KIND to ::DaemonSetsOperator,
@@ -58,7 +61,6 @@ object OperatorFactory {
5861
DeploymentConfigsOperator.KIND to ::DeploymentConfigsOperator,
5962
BuildsOperator.KIND to ::BuildsOperator,
6063
BuildConfigsOperator.KIND to ::BuildConfigsOperator,
61-
ReplicationControllersOperator.KIND to ::ReplicationControllersOperator,
6264
RoutesOperator.KIND to ::RoutesOperator,
6365
ServicesOperator.KIND to ::ServicesOperator,
6466
EndpointsOperator.KIND to ::EndpointsOperator,
@@ -76,6 +78,8 @@ object OperatorFactory {
7678
NamespacesOperator.KIND to ::NamespacesOperator,
7779
NodesOperator.KIND to ::NodesOperator,
7880
AllPodsOperator.KIND to ::AllPodsOperator,
81+
ReplicaSetsOperator.KIND to ::ReplicaSetsOperator,
82+
ReplicationControllersOperator.KIND to ::ReplicationControllersOperator,
7983
DeploymentsOperator.KIND to ::DeploymentsOperator,
8084
StatefulSetsOperator.KIND to ::StatefulSetsOperator,
8185
DaemonSetsOperator.KIND to ::DaemonSetsOperator,

Diff for: src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/kubernetes/Filters.kt

+7
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
package com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes
1212

1313
import io.fabric8.kubernetes.api.model.Pod
14+
import io.fabric8.kubernetes.api.model.ReplicationController
1415
import io.fabric8.kubernetes.api.model.Service
1516
import io.fabric8.kubernetes.api.model.apps.DaemonSet
1617
import io.fabric8.kubernetes.api.model.apps.Deployment
18+
import io.fabric8.kubernetes.api.model.apps.ReplicaSet
1719
import io.fabric8.kubernetes.api.model.apps.StatefulSet
1820
import io.fabric8.kubernetes.api.model.batch.v1.Job
1921
import java.util.function.Predicate
@@ -31,6 +33,11 @@ class PodForStatefulSet(statefulSet: StatefulSet)
3133
class PodForDaemonSet(daemonSet: DaemonSet)
3234
: PodForResource(daemonSet.spec.selector?.matchLabels)
3335

36+
class PodForReplicaSet(replicaSet: ReplicaSet)
37+
: PodForResource(replicaSet.spec.selector.matchLabels)
38+
39+
class PodForReplicationController(replicationController: ReplicationController)
40+
: PodForResource(replicationController.spec.selector)
3441

3542
open class PodForResource(private val selectorLabels: Map<String, String>?): Predicate<Pod> {
3643

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2023 Red Hat, Inc.
3+
* Distributed under license by Red Hat, Inc. All rights reserved.
4+
* This program is made available under the terms of the
5+
* Eclipse Public License v2.0 which accompanies this distribution,
6+
* and is available at http://www.eclipse.org/legal/epl-v20.html
7+
*
8+
* Contributors:
9+
* Red Hat, Inc. - initial API and implementation
10+
******************************************************************************/
11+
package com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes
12+
13+
import com.redhat.devtools.intellij.kubernetes.model.client.ClientAdapter
14+
import com.redhat.devtools.intellij.kubernetes.model.resource.NamespacedOperation
15+
import com.redhat.devtools.intellij.kubernetes.model.resource.NamespacedResourceOperator
16+
import com.redhat.devtools.intellij.kubernetes.model.resource.ResourceKind
17+
import io.fabric8.kubernetes.api.model.apps.ReplicaSet
18+
import io.fabric8.kubernetes.client.KubernetesClient
19+
import io.fabric8.kubernetes.client.impl.AppsAPIGroupClient
20+
21+
class ReplicaSetsOperator(client: ClientAdapter<out KubernetesClient>)
22+
: NamespacedResourceOperator<ReplicaSet, AppsAPIGroupClient>(client.getApps()) {
23+
24+
companion object {
25+
val KIND = ResourceKind.create(ReplicaSet::class.java)
26+
}
27+
28+
override val kind = KIND
29+
30+
override fun getOperation(): NamespacedOperation<ReplicaSet> {
31+
return client.replicaSets()
32+
}
33+
}

Diff for: src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/openshift/ReplicationControllersOperator.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ import com.redhat.devtools.intellij.kubernetes.model.resource.NamespacedOperatio
1515
import com.redhat.devtools.intellij.kubernetes.model.resource.NamespacedResourceOperator
1616
import com.redhat.devtools.intellij.kubernetes.model.resource.ResourceKind
1717
import io.fabric8.kubernetes.api.model.ReplicationController
18+
import io.fabric8.kubernetes.client.KubernetesClient
1819
import io.fabric8.openshift.client.OpenShiftClient
1920

20-
class ReplicationControllersOperator(client: ClientAdapter<out OpenShiftClient>)
21-
: NamespacedResourceOperator<ReplicationController, OpenShiftClient>(client.get()) {
21+
class ReplicationControllersOperator(client: ClientAdapter<out KubernetesClient>)
22+
: NamespacedResourceOperator<ReplicationController, KubernetesClient>(client.get()) {
2223

2324
companion object {
2425
val KIND = ResourceKind.create(ReplicationController::class.java)

Diff for: src/main/kotlin/com/redhat/devtools/intellij/kubernetes/tree/KubernetesDescriptors.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@ import io.fabric8.kubernetes.api.model.Node
3333
import io.fabric8.kubernetes.api.model.PersistentVolume
3434
import io.fabric8.kubernetes.api.model.PersistentVolumeClaim
3535
import io.fabric8.kubernetes.api.model.Pod
36+
import io.fabric8.kubernetes.api.model.ReplicationController
3637
import io.fabric8.kubernetes.api.model.Secret
3738
import io.fabric8.kubernetes.api.model.Service
3839
import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinition
3940
import io.fabric8.kubernetes.api.model.apps.DaemonSet
4041
import io.fabric8.kubernetes.api.model.apps.Deployment
42+
import io.fabric8.kubernetes.api.model.apps.ReplicaSet
4143
import io.fabric8.kubernetes.api.model.apps.StatefulSet
4244
import io.fabric8.kubernetes.api.model.batch.v1.Job
4345
import io.fabric8.kubernetes.api.model.batch.v1beta1.CronJob
@@ -79,10 +81,13 @@ object KubernetesDescriptors {
7981
|| element is StorageClass
8082
|| element is ConfigMap
8183
|| element is Secret
82-
|| element is GenericKubernetesResource ->
84+
|| element is GenericKubernetesResource
85+
|| element is ReplicaSet
86+
|| element is ReplicationController ->
8387
ResourceDescriptor(element as HasMetadata, childrenKind, parent, model, project)
8488
element is CustomResourceDefinition ->
8589
CustomResourceDefinitionDescriptor(element, parent, model, project)
90+
8691
else ->
8792
null
8893
}

Diff for: src/main/kotlin/com/redhat/devtools/intellij/kubernetes/tree/KubernetesStructure.kt

+69-15
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,17 @@ import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.Persist
3131
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PodForDaemonSet
3232
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PodForDeployment
3333
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PodForJob
34+
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PodForReplicaSet
35+
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PodForReplicationController
3436
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PodForService
3537
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.PodForStatefulSet
38+
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.ReplicaSetsOperator
3639
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.SecretsOperator
3740
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.ServicesOperator
3841
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.StatefulSetsOperator
3942
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.StorageClassesOperator
4043
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.custom.CustomResourceDefinitionsOperator
44+
import com.redhat.devtools.intellij.kubernetes.model.resource.openshift.ReplicationControllersOperator
4145
import com.redhat.devtools.intellij.kubernetes.model.resourceName
4246
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.CONFIGURATION
4347
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.CONFIG_MAPS
@@ -54,6 +58,8 @@ import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.
5458
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.PERSISTENT_VOLUMES
5559
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.PERSISTENT_VOLUME_CLAIMS
5660
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.PODS
61+
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.REPLICASETS
62+
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.REPLICATIONCONTROLLERS
5763
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.SECRETS
5864
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.SERVICES
5965
import com.redhat.devtools.intellij.kubernetes.tree.KubernetesStructure.Folders.STATEFULSETS
@@ -67,32 +73,36 @@ import io.fabric8.kubernetes.api.model.HasMetadata
6773
import io.fabric8.kubernetes.api.model.Namespace
6874
import io.fabric8.kubernetes.api.model.Node
6975
import io.fabric8.kubernetes.api.model.Pod
76+
import io.fabric8.kubernetes.api.model.ReplicationController
7077
import io.fabric8.kubernetes.api.model.Secret
7178
import io.fabric8.kubernetes.api.model.Service
7279
import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinition
7380
import io.fabric8.kubernetes.api.model.apps.DaemonSet
7481
import io.fabric8.kubernetes.api.model.apps.Deployment
82+
import io.fabric8.kubernetes.api.model.apps.ReplicaSet
7583
import io.fabric8.kubernetes.api.model.apps.StatefulSet
7684
import io.fabric8.kubernetes.api.model.batch.v1.Job
7785
import io.fabric8.kubernetes.api.model.discovery.v1beta1.Endpoint
7886
import io.fabric8.kubernetes.api.model.storage.StorageClass
7987

8088
class KubernetesStructure(model: IResourceModel) : AbstractTreeStructureContribution(model) {
8189
object Folders {
82-
val NAMESPACES = NamespacesFolder("Namespaces")
83-
val NODES = Folder("Nodes", kind = NodesOperator.KIND)
84-
val WORKLOADS = Folder("Workloads", kind = null)
85-
val DEPLOYMENTS = Folder("Deployments", kind = DeploymentsOperator.KIND) // Workloads / Deployments
86-
val STATEFULSETS = Folder("StatefulSets", kind = StatefulSetsOperator.KIND) // Workloads / StatefulSets
87-
val DAEMONSETS = Folder("DaemonSets", kind = DaemonSetsOperator.KIND) // Workloads / DaemonSets
88-
val JOBS = Folder("Jobs", kind = JobsOperator.KIND) // Workloads / Jobs
89-
val CRONJOBS = Folder("CronJobs", kind = CronJobsOperator.KIND) // Workloads / CronJobs
90-
val PODS = Folder("Pods", kind = NamespacedPodsOperator.KIND) // Workloads / Pods
91-
val NETWORK = Folder("Network", kind = null)
92-
val SERVICES = Folder("Services", kind = ServicesOperator.KIND) // Network / Services
93-
val ENDPOINTS = Folder("Endpoints", kind = EndpointsOperator.KIND) // Network / Endpoints
90+
val NAMESPACES = NamespacesFolder("Namespaces")
91+
val NODES = Folder("Nodes", kind = NodesOperator.KIND)
92+
val WORKLOADS = Folder("Workloads", kind = null)
93+
val DEPLOYMENTS = Folder("Deployments", kind = DeploymentsOperator.KIND) // Workloads / Deployments
94+
val STATEFULSETS = Folder("Stateful Sets", kind = StatefulSetsOperator.KIND) // Workloads / StatefulSets
95+
val DAEMONSETS = Folder("Daemon Sets", kind = DaemonSetsOperator.KIND) // Workloads / DaemonSets
96+
val JOBS = Folder("Jobs", kind = JobsOperator.KIND) // Workloads / Jobs
97+
val CRONJOBS = Folder("Cron Jobs", kind = CronJobsOperator.KIND) // Workloads / CronJobs
98+
val PODS = Folder("Pods", kind = NamespacedPodsOperator.KIND) // Workloads / Pods
99+
val REPLICASETS = Folder("Replica Sets", kind = ReplicaSetsOperator.KIND) // Workloads / ReplicaSets
100+
val REPLICATIONCONTROLLERS = Folder("Replication Controllers", kind = ReplicationControllersOperator.KIND) // Workloads / ReplicationControllers
101+
val NETWORK = Folder("Network", kind = null)
102+
val SERVICES = Folder("Services", kind = ServicesOperator.KIND) // Network / Services
103+
val ENDPOINTS = Folder("Endpoints", kind = EndpointsOperator.KIND) // Network / Endpoints
94104
val INGRESS = Folder("Ingress", kind = IngressOperator.KIND) // Network / Ingress
95-
val STORAGE = Folder("Storage", kind = null)
105+
val STORAGE = Folder("Storage", kind = null)
96106
val PERSISTENT_VOLUMES = Folder("Persistent Volumes", kind = PersistentVolumesOperator.KIND) // Storage / Persistent Volumes
97107
val PERSISTENT_VOLUME_CLAIMS = Folder("Persistent Volume Claims", kind = PersistentVolumeClaimsOperator.KIND) // Storage / Persistent Volume Claims
98108
val STORAGE_CLASSES = Folder("Storage Classes", kind = StorageClassesOperator.KIND) // Storage / Storage Classes
@@ -192,7 +202,9 @@ class KubernetesStructure(model: IResourceModel) : AbstractTreeStructureContribu
192202
DAEMONSETS,
193203
JOBS,
194204
CRONJOBS,
195-
PODS)
205+
PODS,
206+
REPLICASETS,
207+
REPLICATIONCONTROLLERS)
196208
}
197209
},
198210
element<Any> {
@@ -298,7 +310,49 @@ class KubernetesStructure(model: IResourceModel) : AbstractTreeStructureContribu
298310
.list()
299311
.sortedBy(resourceName)
300312
}
301-
}
313+
},
314+
element<Any> {
315+
applicableIf { it == REPLICASETS }
316+
childrenKind { ReplicaSetsOperator.KIND }
317+
children {
318+
model.resources(ReplicaSetsOperator.KIND)
319+
.inCurrentNamespace()
320+
.list()
321+
.sortedBy(resourceName)
322+
}
323+
},
324+
element<ReplicaSet> {
325+
applicableIf { it is ReplicaSet }
326+
childrenKind { NamespacedPodsOperator.KIND }
327+
children {
328+
model.resources(NamespacedPodsOperator.KIND)
329+
.inCurrentNamespace()
330+
.filtered(PodForReplicaSet(it))
331+
.list()
332+
.sortedBy(resourceName)
333+
}
334+
},
335+
element<Any> {
336+
applicableIf { it == REPLICATIONCONTROLLERS }
337+
childrenKind { ReplicationControllersOperator.KIND }
338+
children {
339+
model.resources(ReplicationControllersOperator.KIND)
340+
.inCurrentNamespace()
341+
.list()
342+
.sortedBy(resourceName)
343+
}
344+
},
345+
element<ReplicationController> {
346+
applicableIf { it is ReplicationController }
347+
childrenKind { NamespacedPodsOperator.KIND }
348+
children {
349+
model.resources(NamespacedPodsOperator.KIND)
350+
.inCurrentNamespace()
351+
.filtered(PodForReplicationController(it))
352+
.list()
353+
.sortedBy(resourceName)
354+
}
355+
},
302356
)
303357
}
304358

0 commit comments

Comments
 (0)