| /* |
| Copyright 2017 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package v1alpha1 |
| |
| import ( |
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| ) |
| |
| // +genclient |
| // +genclient:nonNamespaced |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // InitializerConfiguration describes the configuration of initializers. |
| type InitializerConfiguration struct { |
| metav1.TypeMeta `json:",inline"` |
| // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. |
| // +optional |
| metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` |
| |
| // Initializers is a list of resources and their default initializers |
| // Order-sensitive. |
| // When merging multiple InitializerConfigurations, we sort the initializers |
| // from different InitializerConfigurations by the name of the |
| // InitializerConfigurations; the order of the initializers from the same |
| // InitializerConfiguration is preserved. |
| // +patchMergeKey=name |
| // +patchStrategy=merge |
| // +optional |
| Initializers []Initializer `json:"initializers,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=initializers"` |
| } |
| |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // InitializerConfigurationList is a list of InitializerConfiguration. |
| type InitializerConfigurationList struct { |
| metav1.TypeMeta `json:",inline"` |
| // Standard list metadata. |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds |
| // +optional |
| metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` |
| |
| // List of InitializerConfiguration. |
| Items []InitializerConfiguration `json:"items" protobuf:"bytes,2,rep,name=items"` |
| } |
| |
| // Initializer describes the name and the failure policy of an initializer, and |
| // what resources it applies to. |
| type Initializer struct { |
| // Name is the identifier of the initializer. It will be added to the |
| // object that needs to be initialized. |
| // Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where |
| // "alwayspullimages" is the name of the webhook, and kubernetes.io is the name |
| // of the organization. |
| // Required |
| Name string `json:"name" protobuf:"bytes,1,opt,name=name"` |
| |
| // Rules describes what resources/subresources the initializer cares about. |
| // The initializer cares about an operation if it matches _any_ Rule. |
| // Rule.Resources must not include subresources. |
| Rules []Rule `json:"rules,omitempty" protobuf:"bytes,2,rep,name=rules"` |
| } |
| |
| // Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended |
| // to make sure that all the tuple expansions are valid. |
| type Rule struct { |
| // APIGroups is the API groups the resources belong to. '*' is all groups. |
| // If '*' is present, the length of the slice must be one. |
| // Required. |
| APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,1,rep,name=apiGroups"` |
| |
| // APIVersions is the API versions the resources belong to. '*' is all versions. |
| // If '*' is present, the length of the slice must be one. |
| // Required. |
| APIVersions []string `json:"apiVersions,omitempty" protobuf:"bytes,2,rep,name=apiVersions"` |
| |
| // Resources is a list of resources this rule applies to. |
| // |
| // For example: |
| // 'pods' means pods. |
| // 'pods/log' means the log subresource of pods. |
| // '*' means all resources, but not subresources. |
| // 'pods/*' means all subresources of pods. |
| // '*/scale' means all scale subresources. |
| // '*/*' means all resources and their subresources. |
| // |
| // If wildcard is present, the validation rule will ensure resources do not |
| // overlap with each other. |
| // |
| // Depending on the enclosing object, subresources might not be allowed. |
| // Required. |
| Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` |
| } |