open-cluster-management.io/governance-policy-propagator@v0.13.0/api/v1/placementbinding_types.go (about) 1 // Copyright (c) 2020 Red Hat, Inc. 2 // Copyright Contributors to the Open Cluster Management project 3 4 package v1 5 6 import ( 7 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 8 ) 9 10 // Subject defines the resource that can be used as PlacementBinding subject 11 type Subject struct { 12 // +kubebuilder:validation:Required 13 // +kubebuilder:validation:MinLength=1 14 // +kubebuilder:validation:Enum=policy.open-cluster-management.io 15 APIGroup string `json:"apiGroup"` 16 // +kubebuilder:validation:Required 17 // +kubebuilder:validation:MinLength=1 18 // +kubebuilder:validation:Enum=Policy;PolicySet 19 Kind string `json:"kind"` 20 // +kubebuilder:validation:Required 21 // +kubebuilder:validation:MinLength=1 22 Name string `json:"name"` 23 } 24 25 // PlacementSubject defines the resource that can be used as PlacementBinding placementRef 26 type PlacementSubject struct { 27 // +kubebuilder:validation:Required 28 // +kubebuilder:validation:MinLength=1 29 // +kubebuilder:validation:Enum=apps.open-cluster-management.io;cluster.open-cluster-management.io 30 APIGroup string `json:"apiGroup"` 31 // +kubebuilder:validation:Required 32 // +kubebuilder:validation:MinLength=1 33 // +kubebuilder:validation:Enum=PlacementRule;Placement 34 Kind string `json:"kind"` 35 // +kubebuilder:validation:Required 36 // +kubebuilder:validation:MinLength=1 37 Name string `json:"name"` 38 } 39 40 // PlacementBindingStatus defines the observed state of PlacementBinding 41 type PlacementBindingStatus struct{} 42 43 // BindingOverrides defines the overrides to the Subjects 44 type BindingOverrides struct { 45 // +kubebuilder:validation:Optional 46 // +kubebuilder:validation:Enum=Enforce;enforce 47 // This field overrides the policy remediationAction on target clusters 48 RemediationAction string `json:"remediationAction,omitempty"` 49 } 50 51 // SubFilter defines the selection rule for bound clusters 52 type SubFilter string 53 54 const Restricted SubFilter = "restricted" 55 56 //+kubebuilder:object:root=true 57 58 // PlacementBinding is the Schema for the placementbindings API 59 // +kubebuilder:subresource:status 60 // +kubebuilder:resource:path=placementbindings,scope=Namespaced 61 // +kubebuilder:resource:path=placementbindings,shortName=pb 62 type PlacementBinding struct { 63 metav1.TypeMeta `json:",inline"` 64 metav1.ObjectMeta `json:"metadata,omitempty"` 65 // +kubebuilder:validation:Optional 66 BindingOverrides BindingOverrides `json:"bindingOverrides,omitempty"` 67 // This field provides the ability to select a subset of bound clusters 68 // +kubebuilder:validation:Optional 69 // +kubebuilder:validation:Enum=restricted 70 SubFilter SubFilter `json:"subFilter,omitempty"` 71 // +kubebuilder:validation:Required 72 PlacementRef PlacementSubject `json:"placementRef"` 73 // +kubebuilder:validation:Required 74 // +kubebuilder:validation:MinItems=1 75 Subjects []Subject `json:"subjects"` 76 Status PlacementBindingStatus `json:"status,omitempty"` 77 } 78 79 //+kubebuilder:object:root=true 80 81 // PlacementBindingList contains a list of PlacementBinding 82 type PlacementBindingList struct { 83 metav1.TypeMeta `json:",inline"` 84 metav1.ListMeta `json:"metadata,omitempty"` 85 Items []PlacementBinding `json:"items"` 86 } 87 88 func init() { 89 SchemeBuilder.Register(&PlacementBinding{}, &PlacementBindingList{}) 90 }