@@ -13,6 +13,7 @@ package com.redhat.devtools.intellij.kubernetes.model.resource
13
13
import com.redhat.devtools.intellij.kubernetes.model.client.ClientAdapter
14
14
import com.redhat.devtools.intellij.kubernetes.model.util.ResourceException
15
15
import com.redhat.devtools.intellij.kubernetes.model.util.hasGenerateName
16
+ import com.redhat.devtools.intellij.kubernetes.model.util.hasManagedFields
16
17
import com.redhat.devtools.intellij.kubernetes.model.util.hasName
17
18
import com.redhat.devtools.intellij.kubernetes.model.util.runWithoutServerSetProperties
18
19
import io.fabric8.kubernetes.api.model.APIResource
@@ -84,26 +85,44 @@ class NonCachingSingleResourceOperator(
84
85
val genericKubernetesResource = toGenericKubernetesResource(resource, true )
85
86
val op = createOperation(resource)
86
87
return if (hasName(genericKubernetesResource)) {
87
- patch(genericKubernetesResource, op)
88
+ if (hasManagedFields(genericKubernetesResource)) {
89
+ patch(genericKubernetesResource, op, PatchType .JSON_MERGE )
90
+ } else {
91
+ patch(genericKubernetesResource, op, PatchType .SERVER_SIDE_APPLY )
92
+ }
88
93
} else if (hasGenerateName(genericKubernetesResource)) {
89
- op.resource(genericKubernetesResource)
90
- .create()
94
+ op.resource(genericKubernetesResource).create()
91
95
} else {
92
96
throw ResourceException (" Could not replace ${resource.kind ? : " resource" } : has neither name nor generateName." )
93
97
}
94
98
}
95
99
100
+ fun create (resource : HasMetadata ): HasMetadata ? {
101
+ // force clone, patch changes the given resource
102
+ val genericKubernetesResource = toGenericKubernetesResource(resource, true )
103
+ val op = createOperation(resource)
104
+ return if (hasName(genericKubernetesResource)
105
+ && ! hasManagedFields(genericKubernetesResource)
106
+ ) {
107
+ patch(genericKubernetesResource, op, PatchType .SERVER_SIDE_APPLY )
108
+ } else {
109
+ op.resource(genericKubernetesResource)
110
+ .create()
111
+ }
112
+ }
113
+
96
114
private fun patch (
97
115
genericKubernetesResource : GenericKubernetesResource ,
98
- op : NonNamespaceOperation <GenericKubernetesResource , GenericKubernetesResourceList , Resource <GenericKubernetesResource >>
116
+ op : NonNamespaceOperation <GenericKubernetesResource , GenericKubernetesResourceList , Resource <GenericKubernetesResource >>,
117
+ patchType : PatchType
99
118
): HasMetadata ? {
100
119
return runWithoutServerSetProperties(genericKubernetesResource) {
101
120
op
102
121
.resource(genericKubernetesResource)
103
122
.patch(
104
123
PatchContext .Builder ()
105
- .withForce(true )
106
- .withPatchType(PatchType . SERVER_SIDE_APPLY )
124
+ // .withForce(true)
125
+ .withPatchType(patchType )
107
126
.build()
108
127
)
109
128
}
0 commit comments