Commit d4f48c93 authored by Dr. Stefan Schimanski's avatar Dr. Stefan Schimanski

admission: split MutationInterface out of Interface

parent 970d2553
...@@ -30,9 +30,27 @@ func (admissionHandler chainAdmissionHandler) Admit(a Attributes) error { ...@@ -30,9 +30,27 @@ func (admissionHandler chainAdmissionHandler) Admit(a Attributes) error {
if !handler.Handles(a.GetOperation()) { if !handler.Handles(a.GetOperation()) {
continue continue
} }
err := handler.Admit(a) if mutator, ok := handler.(MutationInterface); ok {
if err != nil { err := mutator.Admit(a)
return err if err != nil {
return err
}
}
}
return nil
}
// ValidatingAdmit performs an admission control check using a chain of handlers, and returns immediately on first error
func (admissionHandler chainAdmissionHandler) ValidatingAdmit(a Attributes) error {
for _, handler := range admissionHandler {
if !handler.Handles(a.GetOperation()) {
continue
}
if validator, ok := handler.(ValidationInterface); ok {
err := validator.ValidatingAdmit(a)
if err != nil {
return err
}
} }
} }
return nil return nil
......
...@@ -53,22 +53,22 @@ type Attributes interface { ...@@ -53,22 +53,22 @@ type Attributes interface {
// Interface is an abstract, pluggable interface for Admission Control decisions. // Interface is an abstract, pluggable interface for Admission Control decisions.
type Interface interface { type Interface interface {
// Admit makes an admission decision based on the request attributes
Admit(a Attributes) (err error)
// Handles returns true if this admission controller can handle the given operation // Handles returns true if this admission controller can handle the given operation
// where operation can be one of CREATE, UPDATE, DELETE, or CONNECT // where operation can be one of CREATE, UPDATE, DELETE, or CONNECT
Handles(operation Operation) bool Handles(operation Operation) bool
} }
type MutationInterface interface {
Interface
// Admit makes an admission decision based on the request attributes
Admit(a Attributes) (err error)
}
// ValidationInterface is an abstract, pluggable interface for Admission Control decisions. // ValidationInterface is an abstract, pluggable interface for Admission Control decisions.
type ValidationInterface interface { type ValidationInterface interface {
// ValidatingAdmit makes an admission decision based on the request attributes. It is NOT allowed to mutate // ValidatingAdmit makes an admission decision based on the request attributes. It is NOT allowed to mutate
ValidatingAdmit(a Attributes) (err error) ValidatingAdmit(a Attributes) (err error)
// Handles returns true if this admission controller can handle the given operation
// where operation can be one of CREATE, UPDATE, DELETE, or CONNECT
Handles(operation Operation) bool
} }
// Operation is the type of resource operation being checked for admission control // Operation is the type of resource operation being checked for admission control
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment