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  }