github.com/tigera/api@v0.0.0-20240320170621-278e89a8c5fb/pkg/apis/projectcalico/v3/deeppacketinspection.go (about)

     1  // Copyright (c) 2021 Tigera, Inc. All rights reserved.
     2  
     3  package v3
     4  
     5  import (
     6  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     7  )
     8  
     9  const (
    10  	KindDeepPacketInspection     = "DeepPacketInspection"
    11  	KindDeepPacketInspectionList = "DeepPacketInspectionList"
    12  )
    13  
    14  // +genclient
    15  // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
    16  // +kubebuilder:subresource:status
    17  
    18  type DeepPacketInspection struct {
    19  	metav1.TypeMeta `json:",inline"`
    20  	// Standard object's metadata.
    21  	metav1.ObjectMeta `json:"metadata,omitempty"`
    22  	// Specification of the DeepPacketInspection.
    23  	Spec DeepPacketInspectionSpec `json:"spec,omitempty"`
    24  	// Status of the DeepPacketInspection.
    25  	Status DeepPacketInspectionStatus `json:"status,omitempty"`
    26  }
    27  
    28  // DeepPacketInspectionSpec contains the values of the deep packet inspection.
    29  type DeepPacketInspectionSpec struct {
    30  	// The selector is an expression used to pick out the endpoints for which deep packet inspection should
    31  	// be performed on. The selector will only match endpoints in the same namespace as the
    32  	// DeepPacketInspection resource.
    33  	//
    34  	// Selector expressions follow this syntax:
    35  	//
    36  	// 	label == "string_literal"  ->  comparison, e.g. my_label == "foo bar"
    37  	// 	label != "string_literal"   ->  not equal; also matches if label is not present
    38  	// 	label in { "a", "b", "c", ... }  ->  true if the value of label X is one of "a", "b", "c"
    39  	// 	label not in { "a", "b", "c", ... }  ->  true if the value of label X is not one of "a", "b", "c"
    40  	// 	has(label_name)  -> True if that label is present
    41  	// 	! expr -> negation of expr
    42  	// 	expr && expr  -> Short-circuit and
    43  	// 	expr || expr  -> Short-circuit or
    44  	// 	( expr ) -> parens for grouping
    45  	// 	all() or the empty selector -> matches all endpoints.
    46  	//
    47  	// Label names are allowed to contain alphanumerics, -, _ and /. String literals are more permissive
    48  	// but they do not support escape characters.
    49  	//
    50  	// Examples (with made-up labels):
    51  	//
    52  	// 	type == "webserver" && deployment == "prod"
    53  	// 	type in {"frontend", "backend"}
    54  	// 	deployment != "dev"
    55  	// 	! has(label_name)
    56  	Selector string `json:"selector,omitempty" validate:"selector"`
    57  }
    58  
    59  // DeepPacketInspectionStatus contains status of deep packet inspection in each node.
    60  type DeepPacketInspectionStatus struct {
    61  	Nodes []DPINode `json:"nodes,omitempty"`
    62  }
    63  
    64  type DPINode struct {
    65  	// Node identifies with a physical node from the cluster via its hostname.
    66  	Node   string    `json:"node,omitempty"`
    67  	Active DPIActive `json:"active,omitempty"`
    68  	// +kubebuilder:validation:MaxItems:=10
    69  	ErrorConditions []DPIErrorCondition `json:"errorConditions,omitempty"`
    70  }
    71  
    72  type DPIActive struct {
    73  	// Success indicates if deep packet inspection is running on all workloads matching the selector.
    74  	Success bool `json:"success,omitempty"`
    75  	// Timestamp of when the active status was last updated.
    76  	LastUpdated *metav1.Time `json:"lastUpdated,omitempty"`
    77  }
    78  
    79  type DPIErrorCondition struct {
    80  	// Message from deep packet inspection error.
    81  	Message string `json:"message,omitempty"`
    82  	// Timestamp of when this error message was added.
    83  	LastUpdated *metav1.Time `json:"lastUpdated,omitempty"`
    84  }
    85  
    86  // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
    87  
    88  // DeepPacketInspectionList contains list of DeepPacketInspection resource.
    89  type DeepPacketInspectionList struct {
    90  	metav1.TypeMeta `json:",inline"`
    91  	metav1.ListMeta `json:"metadata"`
    92  	Items           []DeepPacketInspection `json:"items"`
    93  }
    94  
    95  // NewDeepPacketInspection creates a new (zeroed) DeepPacketInspection struct with the TypeMetadata
    96  // initialized to the current version.
    97  func NewDeepPacketInspection() *DeepPacketInspection {
    98  	return &DeepPacketInspection{
    99  		TypeMeta: metav1.TypeMeta{
   100  			Kind:       KindDeepPacketInspection,
   101  			APIVersion: GroupVersionCurrent,
   102  		},
   103  	}
   104  }
   105  
   106  // NewDeepPacketInspectionList creates a new zeroed) DeepPacketInspectionList struct with the TypeMetadata
   107  // initialized to the current version.
   108  func NewDeepPacketInspectionList() *DeepPacketInspectionList {
   109  	return &DeepPacketInspectionList{
   110  		TypeMeta: metav1.TypeMeta{
   111  			Kind:       KindDeepPacketInspectionList,
   112  			APIVersion: GroupVersionCurrent,
   113  		},
   114  	}
   115  }