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 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 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 ¶
func Convert2SecName(name string) string
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) 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{}) 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
func FetchArgsFromSecret(sec *v1.Secret) (map[string]interface{}, error)
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
func IsVersionRegistry(r Registry) bool
IsVersionRegistry check the repo source if support multi-version addon
func PackageAddon ¶ added in v1.4.0
func PackageAddon(addonDictPath string) (string, error)
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 WrapErrRateLimit ¶
func WrapErrRateLimit(err error) error
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 ¶
func (u *Cache) DiscoverAndRefreshLoop(cacheTime time.Duration)
DiscoverAndRefreshLoop will run a loop to automatically discovery and refresh addons from registry
func (*Cache) GetUIData ¶
func (u *Cache) GetUIData(r Registry, addonName, version string) (*UIData, error)
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
func (*Cache) ListUIData ¶
func (u *Cache) ListUIData(r Registry) ([]*UIData, error)
ListUIData will always list UIData from cache first, if not exist, read from source.
type Client ¶ added in v1.3.0
type Client struct {
Client *http.Client
BaseURL *url.URL
}
Client manages communication with the Gitee API
func NewGiteeClient ¶ added in v1.3.0
func NewGiteeClient(httpClient *http.Client, baseURL *url.URL) *Client
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 ¶
type ElementFile struct {
Data string
Name string
}
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
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
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
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
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
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) 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 ¶
type ListBucketResult struct {
Files []File `xml:"Contents"`
Count int `xml:"KeyCount"`
}
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 ¶
type Pattern struct {
IsDir bool
Value string
}
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 ¶
type SourceMeta struct {
Name string
Items []Item
}
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
func GetAddonStatus ¶
func GetAddonStatus(ctx context.Context, cli client.Client, name string) (Status, error)
GetAddonStatus is general func for cli and apiServer get addon 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
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