Skip to content

Commit

Permalink
use client#patch instead of #createOrReplace (redhat-developer#561)
Browse files Browse the repository at this point in the history
Signed-off-by: Andre Dietisheim <adietish@redhat.com>
  • Loading branch information
adietish committed Mar 13, 2023
1 parent d884231 commit c3df59b
Showing 1 changed file with 29 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.redhat.devtools.intellij.kubernetes.model.client.ClientAdapter
import com.redhat.devtools.intellij.kubernetes.model.util.ResourceException
import com.redhat.devtools.intellij.kubernetes.model.util.hasGenerateName
import com.redhat.devtools.intellij.kubernetes.model.util.hasName
import com.redhat.devtools.intellij.kubernetes.model.util.runWithoutServerSetProperties
import io.fabric8.kubernetes.api.model.APIResource
import io.fabric8.kubernetes.api.model.GenericKubernetesResource
import io.fabric8.kubernetes.api.model.GenericKubernetesResourceList
Expand All @@ -26,6 +27,8 @@ import io.fabric8.kubernetes.client.Watcher
import io.fabric8.kubernetes.client.WatcherException
import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation
import io.fabric8.kubernetes.client.dsl.Resource
import io.fabric8.kubernetes.client.dsl.base.PatchContext
import io.fabric8.kubernetes.client.dsl.base.PatchType
import io.fabric8.kubernetes.client.dsl.base.ResourceDefinitionContext
import io.fabric8.kubernetes.client.utils.ApiVersionUtil
import io.fabric8.kubernetes.client.utils.Serialization
Expand Down Expand Up @@ -54,7 +57,7 @@ class NonCachingSingleResourceOperator(
if (!hasName(resource)) {
return null
}
val genericKubernetesResource = toGenericKubernetesResource(resource)
val genericKubernetesResource = toGenericKubernetesResource(resource, false)
val op = createOperation(resource)
return op
.withName(genericKubernetesResource.metadata.name)
Expand All @@ -77,12 +80,12 @@ class NonCachingSingleResourceOperator(
* @return the resource that was created
*/
fun replace(resource: HasMetadata): HasMetadata? {
val genericKubernetesResource = toGenericKubernetesResource(resource)
// force clone, patch changes the given resource
val genericKubernetesResource = toGenericKubernetesResource(resource, true)
val op = createOperation(resource)

return if (hasName(genericKubernetesResource)) {
op.resource(genericKubernetesResource)
.createOrReplace()
patch(genericKubernetesResource, op)
} else if (hasGenerateName(genericKubernetesResource)) {
op.resource(genericKubernetesResource)
.create()
Expand All @@ -91,6 +94,22 @@ class NonCachingSingleResourceOperator(
}
}

private fun patch(
genericKubernetesResource: GenericKubernetesResource,
op: NonNamespaceOperation<GenericKubernetesResource, GenericKubernetesResourceList, Resource<GenericKubernetesResource>>
): HasMetadata? {
return runWithoutServerSetProperties(genericKubernetesResource) {
op
.resource(genericKubernetesResource)
.patch(
PatchContext.Builder()
.withForce(true)
.withPatchType(PatchType.SERVER_SIDE_APPLY)
.build()
)
}
}

/**
* Creates a watch for the given resource.
* Watches the resource on the cluster only if the given resource has a [io.fabric8.kubernetes.api.model.ObjectMeta.name].
Expand All @@ -101,7 +120,7 @@ class NonCachingSingleResourceOperator(
* @return the resource that was created
*/
fun watch(resource: HasMetadata, watcher: Watcher<HasMetadata>): Watch? {
val genericKubernetesResource = toGenericKubernetesResource(resource)
val genericKubernetesResource = toGenericKubernetesResource(resource, false)
if (!hasName(genericKubernetesResource)) {
return null
}
Expand Down Expand Up @@ -152,10 +171,12 @@ class NonCachingSingleResourceOperator(
* The given resource is returned as if it is a [GenericKubernetesResource].
*
* @param resource a HasMetadata to convert
* @param clone force cloning the given resource
* @return a GenericKubernetesResource
*/
private fun toGenericKubernetesResource(resource: HasMetadata): GenericKubernetesResource {
return if (resource is GenericKubernetesResource) {
private fun toGenericKubernetesResource(resource: HasMetadata, clone: Boolean): GenericKubernetesResource {
return if (resource is GenericKubernetesResource
&& !clone) {
resource
} else {
val yaml = Serialization.asYaml(resource)
Expand Down Expand Up @@ -210,4 +231,4 @@ class NonCachingSingleResourceOperator(
watcher.onClose(cause)
}
}
}
}

0 comments on commit c3df59b

Please sign in to comment.