Documentation ¶
Index ¶
- Constants
- Variables
- func ClassifyItemByPattern(meta *SourceMeta, r AsyncReader) map[string][]Item
- func Convert2AppName(name string) string
- func Convert2SecName(name string) string
- func DisableAddon(ctx context.Context, cli client.Client, name string, config *rest.Config, ...) error
- func EnableAddon(ctx context.Context, name string, version string, cli client.Client, ...) error
- func EnableAddonByLocalDir(ctx context.Context, name string, dir string, cli client.Client, ...) error
- func FetchAddonRelatedApp(ctx context.Context, cli client.Client, addonName string) (*v1beta1.Application, error)
- func FetchArgsFromSecret(sec *v1.Secret) (map[string]interface{}, error)
- func GetPatternFromItem(it Item, r AsyncReader, rootPath string) string
- func IsVersionRegistry(r Registry) bool
- func NewAddonError(msg string) error
- func PackageAddon(addonDictPath string) (string, error)
- func RenderApp(ctx context.Context, addon *InstallPackage, k8sClient client.Client, ...) (*v1beta1.Application, error)
- func RenderArgsSecret(addon *InstallPackage, args map[string]interface{}) *unstructured.Unstructured
- func RenderDefinitionSchema(addon *InstallPackage) ([]*unstructured.Unstructured, error)
- func RenderDefinitions(addon *InstallPackage, config *rest.Config) ([]*unstructured.Unstructured, error)
- func SkipValidateVersion(installer *Installer)
- func WrapErrRateLimit(err error) error
- type AsyncReader
- type Cache
- type Client
- type Dependency
- type DeployTo
- type ElementFile
- type File
- type GitAddonSource
- type GitLabItem
- type GiteeAddonSource
- type GitlabAddonSource
- type HelmSource
- type InstallOption
- type InstallPackage
- type Installer
- type Item
- type ListBucketResult
- type ListOptions
- type MemoryReader
- type Meta
- type OSSAddonSource
- type OSSItem
- type ObservabilityEnvBindingValues
- type ObservabilityEnvironment
- type Pattern
- type ReaderType
- type Registry
- func (r *Registry) BuildReader() (AsyncReader, error)
- func (r *Registry) GetInstallPackage(meta *SourceMeta, uiData *UIData) (*InstallPackage, error)
- func (r *Registry) GetUIData(meta *SourceMeta, opt ListOptions) (*UIData, error)
- func (r *Registry) ListAddonMeta() (map[string]SourceMeta, error)
- func (r *Registry) ListUIData(registryAddonMeta map[string]SourceMeta, opt ListOptions) ([]*UIData, error)
- type RegistryDataStore
- type SafeCopier
- type Source
- type SourceMeta
- type Status
- type SystemRequirements
- type UIData
- type VersionUnMatchError
- type VersionedRegistry
- type WholeAddonPackage
Constants ¶
const ( // ReadmeFileName is the addon readme file name ReadmeFileName string = "readme.md" // MetadataFileName is the addon meatadata.yaml file name MetadataFileName string = "metadata.yaml" // TemplateFileName is the addon template.yaml file name TemplateFileName string = "template.yaml" // ResourcesDirName is the addon resources/ dir name ResourcesDirName string = "resources" // DefinitionsDirName is the addon definitions/ dir name DefinitionsDirName string = "definitions" // DefSchemaName is the addon definition schemas dir name DefSchemaName string = "schemas" // AddonParameterDataKey is the key of parameter in addon args secrets AddonParameterDataKey string = "addonParameterDataKey" // DefaultGiteeURL is the addon repository of gitee api DefaultGiteeURL string = "https://gitee.com/api/v5/" )
const ( // ObservabilityAddon is the name of the observability addon ObservabilityAddon = "observability" // ObservabilityAddonEndpointComponent is the endpoint component name of the observability addon ObservabilityAddonEndpointComponent = "grafana" // ObservabilityAddonDomainArg is the domain argument name of the observability addon ObservabilityAddonDomainArg = "domain" // LocalAddonRegistryName is the addon-registry name for those installed by local dir LocalAddonRegistryName = "local" )
const ( // ObservabilityEnvBindingEnvTag is the env Tag for env-binding settings for observability addon ObservabilityEnvBindingEnvTag = ` envs:` // ObservabilityEnvBindingEnvTmpl is the env values for env-binding settings for observability addon ObservabilityEnvBindingEnvTmpl = `` /* 206-byte string literal not displayed */ // ObservabilityWorkflowStepsTag is the workflow steps Tag for observability addon ObservabilityWorkflowStepsTag = `steps:` // ObservabilityWorkflow4EnvBindingTmpl is the workflow for env-binding settings for observability addon ObservabilityWorkflow4EnvBindingTmpl = `` /* 184-byte string literal not displayed */ )
const ( // EOFError is error returned by xml parse EOFError string = "EOF" // DirType means a directory DirType = "dir" // FileType means a file FileType = "file" // BlobType means a blob BlobType = "blob" // TreeType means a tree TreeType = "tree" )
Variables ¶
var ( // UIMetaOptions get Addon metadata for UI display UIMetaOptions = ListOptions{GetDetail: true, GetDefinition: true, GetParameter: true} // CLIMetaOptions get Addon metadata for CLI display CLIMetaOptions = ListOptions{} // UnInstallOptions used for addon uninstalling UnInstallOptions = ListOptions{GetDefinition: true} )
var ( // ErrRenderCueTmpl is error when render addon's cue file ErrRenderCueTmpl = NewAddonError("fail to render cue tmpl") // ErrRateLimit means exceed GitHub access rate limit ErrRateLimit = NewAddonError("exceed github access rate limit") // ErrNotExist means addon not exists ErrNotExist = NewAddonError("addon not exist") // ErrRegistryNotExist means registry not exists ErrRegistryNotExist = NewAddonError("registry does not exist") )
var ErrorNoDomain = errors.New("domain is not set")
ErrorNoDomain is the error when no domain is found
var ParameterFileName = strings.Join([]string{"resources", "parameter.cue"}, "/")
ParameterFileName is the addon resources/parameter.cue file name
var Patterns = []Pattern{{Value: ReadmeFileName}, {Value: MetadataFileName}, {Value: TemplateFileName}, {Value: ParameterFileName}, {IsDir: true, Value: ResourcesDirName}, {IsDir: true, Value: DefinitionsDirName}, {IsDir: true, Value: DefSchemaName}}
Patterns is the file pattern that the addon should be in
Functions ¶
func ClassifyItemByPattern ¶
func ClassifyItemByPattern(meta *SourceMeta, r AsyncReader) map[string][]Item
ClassifyItemByPattern will filter and classify addon data, data will be classified by pattern it meets
func Convert2SecName ¶
Convert2SecName generate addon argument secret name
func DisableAddon ¶
func DisableAddon(ctx context.Context, cli client.Client, name string, config *rest.Config, force bool) error
DisableAddon will disable addon from cluster.
func EnableAddon ¶
func EnableAddon(ctx context.Context, name string, version string, cli client.Client, discoveryClient *discovery.DiscoveryClient, apply apply.Applicator, config *rest.Config, r Registry, args map[string]interface{}, cache *Cache, opts ...InstallOption) error
EnableAddon will enable addon with dependency check, source is where addon from.
func EnableAddonByLocalDir ¶
func EnableAddonByLocalDir(ctx context.Context, name string, dir string, cli client.Client, dc *discovery.DiscoveryClient, applicator apply.Applicator, config *rest.Config, args map[string]interface{}, opts ...InstallOption) error
EnableAddonByLocalDir enable an addon from local dir
func FetchAddonRelatedApp ¶
func FetchAddonRelatedApp(ctx context.Context, cli client.Client, addonName string) (*v1beta1.Application, error)
FetchAddonRelatedApp will fetch the addon related app, this func will use NamespacedName(vela-system, addon-addonName) to get app if not find will try to get 1.1 legacy addon related app by using NamespacedName(vela-system, `addonName`)
func FetchArgsFromSecret ¶ added in v1.2.4
FetchArgsFromSecret fetch addon args from secrets
func GetPatternFromItem ¶
func GetPatternFromItem(it Item, r AsyncReader, rootPath string) string
GetPatternFromItem will check if the file path has a valid pattern, return empty string if it's invalid. AsyncReader is needed to calculate relative path
func IsVersionRegistry ¶ added in v1.3.0
IsVersionRegistry check the repo source if support multi-version addon
func PackageAddon ¶ added in v1.4.0
PackageAddon package vela addon directory into a helm chart compatible archive and return its absolute path
func RenderApp ¶
func RenderApp(ctx context.Context, addon *InstallPackage, k8sClient client.Client, args map[string]interface{}) (*v1beta1.Application, error)
RenderApp render a K8s application
func RenderArgsSecret ¶
func RenderArgsSecret(addon *InstallPackage, args map[string]interface{}) *unstructured.Unstructured
RenderArgsSecret render addon enable argument to secret
func RenderDefinitionSchema ¶
func RenderDefinitionSchema(addon *InstallPackage) ([]*unstructured.Unstructured, error)
RenderDefinitionSchema will render definitions' schema in addons.
func RenderDefinitions ¶
func RenderDefinitions(addon *InstallPackage, config *rest.Config) ([]*unstructured.Unstructured, error)
RenderDefinitions render definition objects if needed
func SkipValidateVersion ¶ added in v1.4.4
func SkipValidateVersion(installer *Installer)
SkipValidateVersion means skip validating system version
func WrapErrRateLimit ¶
WrapErrRateLimit return ErrRateLimit if is the situation, or return error directly
Types ¶
type AsyncReader ¶
type AsyncReader interface { // ListAddonMeta will return directory tree contain addon metadata only ListAddonMeta() (addonCandidates map[string]SourceMeta, err error) // ReadFile should accept relative path to github repo/path or OSS bucket, and report the file content ReadFile(path string) (content string, err error) // RelativePath return a relative path to GitHub repo/path or OSS bucket/path RelativePath(item Item) string }
AsyncReader helps async read files of addon
func NewAsyncReader ¶
func NewAsyncReader(baseURL, bucket, repo, subPath, token string, rdType ReaderType) (AsyncReader, error)
NewAsyncReader create AsyncReader from 1. GitHub url and directory 2. OSS endpoint and bucket
type Cache ¶
type Cache struct {
// contains filtered or unexported fields
}
Cache package only cache for 1 and 2, we don't cache InstallPackage, and it only read for real installation
func (*Cache) DiscoverAndRefreshLoop ¶
DiscoverAndRefreshLoop will run a loop to automatically discovery and refresh addons from registry
func (*Cache) GetUIData ¶
GetUIData get addon data for UI display from cache, if cache not found, it will find from source
func (*Cache) ListAddonMeta ¶
func (u *Cache) ListAddonMeta(r Registry) (map[string]SourceMeta, error)
ListAddonMeta will list metadata from registry, if cache not found, it will find from source
type Client ¶ added in v1.3.0
Client manages communication with the Gitee API
func NewGiteeClient ¶ added in v1.3.0
NewGiteeClient returns a new Gitee API client
func (*Client) GetGiteeContents ¶ added in v1.3.0
func (c *Client) GetGiteeContents(ctx context.Context, owner, repo, path, ref string) (fileContent *github.RepositoryContent, directoryContent []*github.RepositoryContent, err error)
GetGiteeContents can return either the metadata and content of a single file
type Dependency ¶
type Dependency struct {
Name string `json:"name,omitempty"`
}
Dependency defines the other addons it depends on
type DeployTo ¶
type DeployTo struct { // This field keep the compatible for older case LegacyRuntimeCluster bool `json:"runtime_cluster"` DisableControlPlane bool `json:"disableControlPlane"` RuntimeCluster bool `json:"runtimeCluster"` }
DeployTo defines where the addon to deploy to
type ElementFile ¶
ElementFile can be addon's definition or addon's component
type File ¶
type File struct { Name string `xml:"Key"` Size int `xml:"Size"` LastModified time.Time `xml:"LastModified"` Type string `xml:"Type"` StorageClass string `xml:"StorageClass"` }
File is for oss xml parse
type GitAddonSource ¶
type GitAddonSource struct { URL string `json:"url,omitempty" validate:"required"` Path string `json:"path,omitempty"` Token string `json:"token,omitempty"` }
GitAddonSource defines the information about the Git as addon source
func (*GitAddonSource) SafeCopy ¶ added in v1.3.4
func (g *GitAddonSource) SafeCopy() *GitAddonSource
SafeCopy hides field Token
type GitLabItem ¶ added in v1.4.0
type GitLabItem struct {
// contains filtered or unexported fields
}
GitLabItem addon's sub item
func (GitLabItem) GetName ¶ added in v1.4.0
func (g GitLabItem) GetName() string
GetName get addon's sub item name
func (GitLabItem) GetPath ¶ added in v1.4.0
func (g GitLabItem) GetPath() string
GetPath get addon's sub item path
func (GitLabItem) GetType ¶ added in v1.4.0
func (g GitLabItem) GetType() string
GetType get addon's sub item type
type GiteeAddonSource ¶ added in v1.3.0
type GiteeAddonSource struct { URL string `json:"url,omitempty" validate:"required"` Path string `json:"path,omitempty"` Token string `json:"token,omitempty"` }
GiteeAddonSource defines the information about the Gitee as addon source
func (*GiteeAddonSource) SafeCopy ¶ added in v1.3.4
func (g *GiteeAddonSource) SafeCopy() *GiteeAddonSource
SafeCopy hides field Token
type GitlabAddonSource ¶ added in v1.4.0
type GitlabAddonSource struct { URL string `json:"url,omitempty" validate:"required"` Repo string `json:"repo,omitempty" validate:"required"` Path string `json:"path,omitempty"` Token string `json:"token,omitempty"` }
GitlabAddonSource defines the information about the Gitlab as addon source
func (*GitlabAddonSource) SafeCopy ¶ added in v1.4.0
func (g *GitlabAddonSource) SafeCopy() *GitlabAddonSource
SafeCopy hides field Token
type HelmSource ¶ added in v1.3.0
type HelmSource struct { URL string `json:"url,omitempty" validate:"required"` Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` }
HelmSource defines the information about the helm repo addon source
func (*HelmSource) SafeCopy ¶ added in v1.3.4
func (h *HelmSource) SafeCopy() *HelmSource
SafeCopy hides field Username, Password
type InstallOption ¶ added in v1.4.4
type InstallOption func(installer *Installer)
InstallOption define additional option for installation
type InstallPackage ¶
type InstallPackage struct { Meta // Definitions and CUEDefinitions are converted as OAM X-Definitions, they will only in control plane cluster Definitions []ElementFile `json:"definitions"` CUEDefinitions []ElementFile `json:"CUEDefinitions"` // DefSchemas are UI schemas read by VelaUX, it will only be installed in control plane clusters DefSchemas []ElementFile `json:"defSchemas,omitempty"` Parameters string `json:"parameters"` // CUETemplates and YAMLTemplates are resources needed to be installed in managed clusters CUETemplates []ElementFile `json:"CUETemplates"` YAMLTemplates []ElementFile `json:"YAMLTemplates,omitempty"` AppTemplate *v1beta1.Application `json:"appTemplate"` }
InstallPackage contains all necessary files that can be installed for an addon
func GetInstallPackageFromReader ¶
func GetInstallPackageFromReader(r AsyncReader, meta *SourceMeta, uiData *UIData) (*InstallPackage, error)
GetInstallPackageFromReader get install package of addon from Reader, this is used to enable an addon
type Installer ¶
type Installer struct {
// contains filtered or unexported fields
}
Installer helps addon enable, dependency-check, dispatch resources
func NewAddonInstaller ¶
func NewAddonInstaller(ctx context.Context, cli client.Client, discoveryClient *discovery.DiscoveryClient, apply apply.Applicator, config *rest.Config, r *Registry, args map[string]interface{}, cache *Cache, opts ...InstallOption) Installer
NewAddonInstaller will create an installer for addon
type Item ¶
type Item interface { // GetType return "dir" or "file" GetType() string GetPath() string GetName() string }
Item is a partial interface for github.RepositoryContent
type ListBucketResult ¶
ListBucketResult describe a file list from OSS
type ListOptions ¶
type ListOptions struct { GetDetail bool GetDefinition bool GetResource bool GetParameter bool GetTemplate bool GetDefSchema bool }
ListOptions contains flags mark what files should be read in an addon directory
type MemoryReader ¶ added in v1.3.0
type MemoryReader struct { Name string Files []*loader.BufferedFile // contains filtered or unexported fields }
MemoryReader is async reader for memory data
func (*MemoryReader) ListAddonMeta ¶ added in v1.3.0
func (l *MemoryReader) ListAddonMeta() (map[string]SourceMeta, error)
ListAddonMeta list all metadata of helm repo registry
func (*MemoryReader) ReadFile ¶ added in v1.3.0
func (l *MemoryReader) ReadFile(path string) (string, error)
ReadFile ready file from memory
func (*MemoryReader) RelativePath ¶ added in v1.3.0
func (l *MemoryReader) RelativePath(item Item) string
RelativePath calculate the relative path of one file
type Meta ¶
type Meta struct { Name string `json:"name" validate:"required"` Version string `json:"version"` Description string `json:"description"` Icon string `json:"icon"` URL string `json:"url,omitempty"` Tags []string `json:"tags,omitempty"` DeployTo *DeployTo `json:"deployTo,omitempty"` Dependencies []*Dependency `json:"dependencies,omitempty"` NeedNamespace []string `json:"needNamespace,omitempty"` Invisible bool `json:"invisible"` SystemRequirements *SystemRequirements `json:"system,omitempty"` }
Meta defines the format for a single addon
type OSSAddonSource ¶
type OSSAddonSource struct { Endpoint string `json:"end_point" validate:"required"` Bucket string `json:"bucket"` Path string `json:"path"` }
OSSAddonSource is UIData source from alibaba cloud OSS style source
type OSSItem ¶
type OSSItem struct {
// contains filtered or unexported fields
}
OSSItem is Item implement for OSS
type ObservabilityEnvBindingValues ¶
type ObservabilityEnvBindingValues struct {
Envs []ObservabilityEnvironment
}
ObservabilityEnvBindingValues is a list of ObservabilityEnvironment and will be used to render observability-env-binding.yaml
type ObservabilityEnvironment ¶
type ObservabilityEnvironment struct { Cluster string Domain string LoadBalancerIP string ServiceExternalIP string }
ObservabilityEnvironment contains the Observability addon's domain for each cluster
func GetObservabilityAccessibilityInfo ¶
func GetObservabilityAccessibilityInfo(ctx context.Context, k8sClient client.Client, domain string) ([]ObservabilityEnvironment, error)
GetObservabilityAccessibilityInfo will get the accessibility info of addon in local cluster and multiple clusters
type Pattern ¶
Pattern indicates the addon framework file pattern, all files should match at least one of the pattern.
type Registry ¶
type Registry struct { Name string `json:"name"` Helm *HelmSource `json:"helm,omitempty"` Git *GitAddonSource `json:"git,omitempty"` OSS *OSSAddonSource `json:"oss,omitempty"` Gitee *GiteeAddonSource `json:"gitee,omitempty"` Gitlab *GitlabAddonSource `json:"gitlab,omitempty"` }
Registry represent a addon registry model
func (*Registry) BuildReader ¶
func (r *Registry) BuildReader() (AsyncReader, error)
BuildReader will build a AsyncReader from registry, AsyncReader are needed to read addon files
func (*Registry) GetInstallPackage ¶
func (r *Registry) GetInstallPackage(meta *SourceMeta, uiData *UIData) (*InstallPackage, error)
GetInstallPackage get install package which is all needed to enable an addon from addon registry
func (*Registry) GetUIData ¶
func (r *Registry) GetUIData(meta *SourceMeta, opt ListOptions) (*UIData, error)
GetUIData get UIData of an addon
func (*Registry) ListAddonMeta ¶
func (r *Registry) ListAddonMeta() (map[string]SourceMeta, error)
ListAddonMeta list addon file meta(path and name) from a registry
func (*Registry) ListUIData ¶
func (r *Registry) ListUIData(registryAddonMeta map[string]SourceMeta, opt ListOptions) ([]*UIData, error)
ListUIData list UI data from addon registry
type RegistryDataStore ¶
type RegistryDataStore interface { ListRegistries(context.Context) ([]Registry, error) AddRegistry(context.Context, Registry) error DeleteRegistry(context.Context, string) error UpdateRegistry(context.Context, Registry) error GetRegistry(context.Context, string) (Registry, error) }
RegistryDataStore CRUD addon registry data in configmap
func NewRegistryDataStore ¶
func NewRegistryDataStore(cli client.Client) RegistryDataStore
NewRegistryDataStore get RegistryDataStore operation interface
type SafeCopier ¶ added in v1.3.4
type SafeCopier interface {
SafeCopy() interface{}
}
SafeCopier is an interface to copy Struct without sensitive fields, such as Token, Username, Password
type Source ¶
type Source interface { GetUIData(meta *SourceMeta, opt ListOptions) (*UIData, error) ListUIData(registryAddonMeta map[string]SourceMeta, opt ListOptions) ([]*UIData, error) GetInstallPackage(meta *SourceMeta, uiData *UIData) (*InstallPackage, error) ListAddonMeta() (map[string]SourceMeta, error) }
Source is where to get addons, Registry implement this interface
type SourceMeta ¶
SourceMeta record the whole metadata of an addon
type Status ¶
type Status struct { AddonPhase string AppStatus *commontypes.AppStatus // the status of multiple clusters Clusters map[string]map[string]interface{} `json:"clusters,omitempty"` InstalledVersion string Parameters map[string]interface{} // Where the addon is from. Can be empty if not installed. InstalledRegistry string }
Status contain addon phase and related app status
type SystemRequirements ¶ added in v1.2.4
type SystemRequirements struct { VelaVersion string `json:"vela,omitempty"` KubernetesVersion string `json:"kubernetes,omitempty"` }
SystemRequirements is this addon need version
type UIData ¶
type UIData struct { Meta APISchema *openapi3.Schema `json:"schema"` UISchema []*utils.UIParameter `json:"uiSchema"` // Detail is README.md in an addon Detail string `json:"detail,omitempty"` Definitions []ElementFile `json:"definitions"` CUEDefinitions []ElementFile `json:"CUEDefinitions"` Parameters string `json:"parameters"` RegistryName string `json:"registryName"` AvailableVersions []string `json:"availableVersions"` }
UIData contains all information represent an addon for UI
func GetUIDataFromReader ¶
func GetUIDataFromReader(r AsyncReader, meta *SourceMeta, opt ListOptions) (*UIData, error)
GetUIDataFromReader read ui metadata of addon from Reader, used to be displayed in UI
func ListAddonUIDataFromReader ¶
func ListAddonUIDataFromReader(r AsyncReader, registryMeta map[string]SourceMeta, registryName string, opt ListOptions) ([]*UIData, error)
ListAddonUIDataFromReader list addons from AsyncReader
type VersionUnMatchError ¶ added in v1.3.1
type VersionUnMatchError struct {
// contains filtered or unexported fields
}
VersionUnMatchError means addon system requirement cannot meet requirement
func (VersionUnMatchError) Error ¶ added in v1.3.1
func (v VersionUnMatchError) Error() string
type VersionedRegistry ¶ added in v1.3.0
type VersionedRegistry interface { ListAddon() ([]*UIData, error) GetAddonUIData(ctx context.Context, addonName, version string) (*UIData, error) GetAddonInstallPackage(ctx context.Context, addonName, version string) (*InstallPackage, error) GetDetailedAddon(ctx context.Context, addonName, version string) (*WholeAddonPackage, error) }
VersionedRegistry is the interface of support version registry
func BuildVersionedRegistry ¶ added in v1.3.0
func BuildVersionedRegistry(name, repoURL string, opts *common.HTTPOption) VersionedRegistry
BuildVersionedRegistry is build versioned addon registry
type WholeAddonPackage ¶ added in v1.3.0
type WholeAddonPackage struct { InstallPackage APISchema *openapi3.Schema `json:"schema"` // Detail is README.md in an addon Detail string `json:"detail,omitempty"` AvailableVersions []string `json:"availableVersions"` RegistryName string `json:"registryName"` }
WholeAddonPackage contains all infos of an addon
func FindWholeAddonPackagesFromRegistry ¶ added in v1.4.0
func FindWholeAddonPackagesFromRegistry(ctx context.Context, k8sClient client.Client, addonNames []string, registryNames []string) ([]*WholeAddonPackage, error)
FindWholeAddonPackagesFromRegistry find addons' WholeInstallPackage from registries, empty registryName indicates matching all