mirror of
https://github.com/alibaba/higress.git
synced 2026-02-22 06:50:50 +08:00
130 lines
3.1 KiB
Go
130 lines
3.1 KiB
Go
// Copyright (c) 2022 Alibaba Group Holding Ltd.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package installer
|
|
|
|
import (
|
|
"github.com/alibaba/higress/hgctl/pkg/helm"
|
|
"github.com/alibaba/higress/hgctl/pkg/util"
|
|
"helm.sh/helm/v3/pkg/chartutil"
|
|
"sigs.k8s.io/yaml"
|
|
)
|
|
|
|
type ComponentName string
|
|
|
|
var ComponentMap = map[ComponentName]struct{}{
|
|
Higress: {},
|
|
Istio: {},
|
|
}
|
|
|
|
type Component interface {
|
|
// ComponentName returns the name of the component.
|
|
ComponentName() ComponentName
|
|
// Namespace returns the namespace for the component.
|
|
Namespace() string
|
|
// Enabled reports whether the component is enabled.
|
|
Enabled() bool
|
|
// Run starts the component. Must be called before the component is used.
|
|
Run() error
|
|
RenderManifest() (string, error)
|
|
}
|
|
|
|
type ComponentOptions struct {
|
|
Name string
|
|
Namespace string
|
|
// local
|
|
ChartPath string
|
|
// remote
|
|
RepoURL string
|
|
ChartName string
|
|
Version string
|
|
Quiet bool
|
|
// Capabilities
|
|
Capabilities *chartutil.Capabilities
|
|
// devel
|
|
Devel bool
|
|
}
|
|
|
|
type ComponentOption func(*ComponentOptions)
|
|
|
|
func WithComponentNamespace(namespace string) ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.Namespace = namespace
|
|
}
|
|
}
|
|
|
|
func WithComponentChartPath(path string) ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.ChartPath = path
|
|
}
|
|
}
|
|
|
|
func WithComponentChartName(chartName string) ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.ChartName = chartName
|
|
}
|
|
}
|
|
|
|
func WithComponentRepoURL(url string) ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.RepoURL = url
|
|
}
|
|
}
|
|
|
|
func WithComponentVersion(version string) ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.Version = version
|
|
}
|
|
}
|
|
|
|
func WithComponentCapabilities(capabilities *chartutil.Capabilities) ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.Capabilities = capabilities
|
|
}
|
|
}
|
|
|
|
func WithQuiet() ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.Quiet = true
|
|
}
|
|
}
|
|
|
|
func WithDevel(devel bool) ComponentOption {
|
|
return func(opts *ComponentOptions) {
|
|
opts.Devel = devel
|
|
}
|
|
}
|
|
|
|
func renderComponentManifest(spec any, renderer helm.Renderer, addOn bool, name ComponentName, namespace string) (string, error) {
|
|
var valsBytes []byte
|
|
var valsYaml string
|
|
var err error
|
|
if yamlString, ok := spec.(string); ok {
|
|
valsYaml = yamlString
|
|
} else {
|
|
if !util.IsValueNil(spec) {
|
|
valsBytes, err = yaml.Marshal(spec)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
valsYaml = string(valsBytes)
|
|
}
|
|
}
|
|
final, err := renderer.RenderManifest(valsYaml)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return final, nil
|
|
}
|