-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Sample For Dynamic Admission Controller with that uses a Custom Resource #95
Comments
Not sure if this is the right way but this is how I got the REST endpoint working: import com.fasterxml.jackson.databind.ObjectMapper
import io.fabric8.kubernetes.api.model.GenericKubernetesResource
import io.fabric8.kubernetes.api.model.Namespaced
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview
import io.fabric8.kubernetes.client.CustomResource
import io.fabric8.kubernetes.model.annotation.Group
import io.fabric8.kubernetes.model.annotation.Kind
import io.fabric8.kubernetes.model.annotation.Version
import io.javaoperatorsdk.webhook.admission.AdmissionController
import io.javaoperatorsdk.webhook.admission.validation.Validator
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.ResponseBody
import org.springframework.web.bind.annotation.RestController
@Group("mygroup")
@Kind("Sample")
@Version("v1")
class SampleCustomResource: CustomResource<Sample, SampleStatus>(), Namespaced
data class Sample(val field: String)
data class SampleStatus(val field: String)
@RestController
class SampleCustomResourceWebhookEndpoint(private val admissionController: AdmissionController<GenericKubernetesResource>) {
@PostMapping("/validate")
@ResponseBody
fun validate(@RequestBody admissionReview: AdmissionReview): AdmissionReview =
admissionController.handle(admissionReview)
}
@Configuration
class SampleCustomResourceWebHookConfiguration {
@Bean
fun admissionController(objectMapper: ObjectMapper): AdmissionController<GenericKubernetesResource> {
return AdmissionController<GenericKubernetesResource>(Validator { resource: GenericKubernetesResource, _ ->
val sampleResource = objectMapper.convertValue(resource.additionalProperties, SampleCustomResource::class.java)
// do your validation here
})
}
} When I send this http request: {
"request": {
"name": "sample",
"namespace": "default",
"object": {
"apiVersion": "mygroup/v1",
"kind": "Sample",
"spec": {
"field": "hello"
}
},
"operation": "CREATE"
}
} I get a proper response: {
"apiVersion": "admission.k8s.io/v1",
"kind": "AdmissionReview",
"response": {
"allowed": true
}
} If I don't go via the
Would be great if the framework could handle the conversion from GenericKubernetesResource to the CustomResource itself |
@sflandergan AFAIk |
@csviri not really.
|
Just if it cannot serialize to a proper resource. Because your resources is not registered for serialization. If you are dealing just with custom resource you can use |
Thanks for the input @csviri Maybe this is related to fabric8io/kubernetes-client#5034 |
Just found out this comes from |
No description provided.
The text was updated successfully, but these errors were encountered: