crd/nodenetworkconfig/api/v1alpha/nodenetworkconfig.go (84 lines of code) (raw):

//go:build !ignore_uncovered // +build !ignore_uncovered package v1alpha import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // Important: Run "make" to regenerate code after modifying this file // +kubebuilder:object:root=true // NodeNetworkConfig is the Schema for the nodenetworkconfigs API // +kubebuilder:resource:scope=Namespaced // +kubebuilder:resource:shortName=nnc // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Requested IPs",type=integer,priority=1,JSONPath=`.spec.requestedIPCount` // +kubebuilder:printcolumn:name="Availability Zone",type=string,priority=1,JSONPath=`.spec.availabilityZone` // +kubebuilder:printcolumn:name="Allocated IPs",type=integer,priority=0,JSONPath=`.status.assignedIPCount` // +kubebuilder:printcolumn:name="Subnet",type=string,priority=1,JSONPath=`.status.networkContainers[*].subnetName` // +kubebuilder:printcolumn:name="Subnet CIDR",type=string,priority=1,JSONPath=`.status.networkContainers[*].subnetAddressSpace` // +kubebuilder:printcolumn:name="NC ID",type=string,priority=1,JSONPath=`.status.networkContainers[*].id` // +kubebuilder:printcolumn:name="NC Mode",type=string,priority=0,JSONPath=`.status.networkContainers[*].assignmentMode` // +kubebuilder:printcolumn:name="NC Type",type=string,priority=1,JSONPath=`.status.networkContainers[*].type` // +kubebuilder:printcolumn:name="NC Version",type=integer,priority=0,JSONPath=`.status.networkContainers[*].version` type NodeNetworkConfig struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec NodeNetworkConfigSpec `json:"spec,omitempty"` Status NodeNetworkConfigStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true // NodeNetworkConfigList contains a list of NetworkConfig type NodeNetworkConfigList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []NodeNetworkConfig `json:"items"` } // NodeNetworkConfigSpec defines the desired state of NetworkConfig type NodeNetworkConfigSpec struct { // +kubebuilder:default=0 // +kubebuilder:validation:Optional RequestedIPCount int64 `json:"requestedIPCount"` IPsNotInUse []string `json:"ipsNotInUse,omitempty"` // AvailabilityZone contains the Azure availability zone for the virtual machine where network containers are placed. // +kubebuilder:validation:Optional AvailabilityZone uint `json:"availabilityZone,omitempty"` } // Status indicates the NNC reconcile status // +kubebuilder:validation:Enum=Updating;Updated;Error type Status string const ( Updating Status = "Updating" Updated Status = "Updated" Error Status = "Error" ) // NCStatus indicates the latest NC request status // +kubebuilder:validation:Enum=NCUpdateSubnetFullError;NCUpdateInternalServerError;NCUpdateUnauthorizedError;NCUpdateSuccess;NCUpdateFailed // +kubebuilder:validation:Optional type NCStatus string const ( NCUpdateSubnetFull NCStatus = "NCUpdateSubnetFullError" NCUpdateInternalServerError NCStatus = "NCUpdateInternalServerError" NCUpdateUnauthorizedError NCStatus = "NCUpdateUnauthorizedError" NCUpdateSuccess NCStatus = "NCUpdateSuccess" NCUpdateFailed NCStatus = "NCUpdateFailed" ) // NodeNetworkConfigStatus defines the observed state of NetworkConfig type NodeNetworkConfigStatus struct { // +kubebuilder:default=0 // +kubebuilder:validation:Optional AssignedIPCount int `json:"assignedIPCount"` Scaler Scaler `json:"scaler,omitempty"` Status Status `json:"status,omitempty"` NetworkContainers []NetworkContainer `json:"networkContainers,omitempty"` } // Scaler groups IP request params together type Scaler struct { BatchSize int64 `json:"batchSize,omitempty"` ReleaseThresholdPercent int64 `json:"releaseThresholdPercent,omitempty"` RequestThresholdPercent int64 `json:"requestThresholdPercent,omitempty"` MaxIPCount int64 `json:"maxIPCount,omitempty"` } // AssignmentMode is whether we are allocated an entire block or IP by IP. // +kubebuilder:validation:Enum=dynamic;static type AssignmentMode string const ( Dynamic AssignmentMode = "dynamic" Static AssignmentMode = "static" ) // NCType is the specific type of network this NC represents. type NCType string const ( VNET NCType = "vnet" VNETBlock NCType = "vnetblock" Overlay NCType = "overlay" ) // NetworkContainer defines the structure of a Network Container as found in NetworkConfigStatus type NetworkContainer struct { ID string `json:"id,omitempty"` // +kubebuilder:default=dynamic AssignmentMode AssignmentMode `json:"assignmentMode,omitempty"` // +kubebuilder:default=vnet Type NCType `json:"type,omitempty"` PrimaryIP string `json:"primaryIP,omitempty"` PrimaryIPV6 string `json:"primaryIPV6,omitempty"` SubnetName string `json:"subnetName,omitempty"` IPAssignments []IPAssignment `json:"ipAssignments,omitempty"` DefaultGateway string `json:"defaultGateway,omitempty"` DefaultGatewayV6 string `json:"defaultGatewayV6,omitempty"` MacAddress string `json:"macAddress,omitempty"` SubnetAddressSpace string `json:"subnetAddressSpace,omitempty"` // +kubebuilder:default=0 // +kubebuilder:validation:Optional Version int64 `json:"version"` NodeIP string `json:"nodeIP,omitempty"` SubscriptionID string `json:"subcriptionID,omitempty"` ResourceGroupID string `json:"resourceGroupID,omitempty"` VNETID string `json:"vnetID,omitempty"` SubnetID string `json:"subnetID,omitempty"` Status NCStatus `json:"status,omitempty"` } // IPAssignment groups an IP address and Name. Name is a UUID set by the the IP address assigner. type IPAssignment struct { Name string `json:"name,omitempty"` IP string `json:"ip,omitempty"` } func init() { SchemeBuilder.Register(&NodeNetworkConfig{}, &NodeNetworkConfigList{}) }