k8c.io/api/v3@v3.0.0-20230904060738-b0a93889c0b6/pkg/apis/kubermatic/v1/addon_config.go (about)

     1  /*
     2  Copyright 2023 The Kubermatic Kubernetes Platform contributors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v1
    18  
    19  import (
    20  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    21  )
    22  
    23  // +genclient
    24  // +kubebuilder:resource:scope=Cluster
    25  // +kubebuilder:object:generate=true
    26  // +kubebuilder:object:root=true
    27  // +kubebuilder:printcolumn:JSONPath=".metadata.creationTimestamp",name="Age",type="date"
    28  
    29  // AddonConfig specifies addon configuration. Addons can be installed without
    30  // a matching AddonConfig, but they will be missing a logo, description and
    31  // the potentially necessary form fields in the KKP dashboard to make the
    32  // addon comfortable to use.
    33  type AddonConfig struct {
    34  	metav1.TypeMeta   `json:",inline"`
    35  	metav1.ObjectMeta `json:"metadata,omitempty"`
    36  
    37  	Spec AddonConfigSpec `json:"spec,omitempty"`
    38  }
    39  
    40  // AddonConfigSpec specifies configuration of addon.
    41  type AddonConfigSpec struct {
    42  	// ShortDescription of the configured addon that contains more detailed information about the addon,
    43  	// it will be displayed in the addon details view in the UI
    44  	ShortDescription string `json:"shortDescription,omitempty"`
    45  	// Description of the configured addon, it will be displayed in the addon overview in the UI
    46  	Description string `json:"description,omitempty"`
    47  	// Logo of the configured addon, encoded in base64
    48  	Logo string `json:"logo,omitempty"`
    49  	// LogoFormat contains logo format of the configured addon, i.e. svg+xml
    50  	LogoFormat string `json:"logoFormat,omitempty"`
    51  	// Controls that can be set for configured addon
    52  	Controls []AddonFormControl `json:"formSpec,omitempty"`
    53  }
    54  
    55  // AddonFormControl specifies addon form control.
    56  type AddonFormControl struct {
    57  	// DisplayName is visible in the UI
    58  	DisplayName string `json:"displayName,omitempty"`
    59  	// InternalName is used internally to save in the addon object
    60  	InternalName string `json:"internalName,omitempty"`
    61  	// HelpText is visible in the UI next to the control
    62  	HelpText string `json:"helpText,omitempty"`
    63  	// Required indicates if the control has to be set
    64  	Required bool `json:"required,omitempty"`
    65  	// Type of displayed control
    66  	Type string `json:"type,omitempty"`
    67  }
    68  
    69  // +kubebuilder:object:generate=true
    70  // +kubebuilder:object:root=true
    71  
    72  // AddonConfigList is a list of addon configs.
    73  type AddonConfigList struct {
    74  	metav1.TypeMeta `json:",inline"`
    75  	metav1.ListMeta `json:"metadata,omitempty"`
    76  
    77  	Items []AddonConfig `json:"items"`
    78  }