mirror of
https://github.com/onepanelio/onepanel.git
synced 2025-09-27 01:56:03 +08:00
140 lines
3.5 KiB
Go
140 lines
3.5 KiB
Go
package v1
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/onepanelio/core/pkg/util/ptr"
|
|
log "github.com/sirupsen/logrus"
|
|
corev1 "k8s.io/api/core/v1"
|
|
"sigs.k8s.io/yaml"
|
|
"strings"
|
|
)
|
|
|
|
// SystemConfig is configuration loaded from kubernetes config and secrets that includes information about the
|
|
// database, server, etc.
|
|
type SystemConfig map[string]string
|
|
|
|
type NodePoolOption struct {
|
|
ParameterOption
|
|
Resources corev1.ResourceRequirements
|
|
}
|
|
|
|
// GetValue returns the value in the underlying map if it exists, otherwise nil is returned
|
|
// If the value does not exist, it is also logged.
|
|
func (s SystemConfig) GetValue(name string) *string {
|
|
value, ok := s[name]
|
|
if !ok {
|
|
log.WithFields(log.Fields{
|
|
"Method": "SystemConfig.GetValue",
|
|
"Name": name,
|
|
"Error": "does not exist",
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
return &value
|
|
}
|
|
|
|
// Domain gets the ONEPANEL_DOMAIN value, or nil.
|
|
func (s SystemConfig) Domain() *string {
|
|
return s.GetValue("ONEPANEL_DOMAIN")
|
|
}
|
|
|
|
// APIURL gets the ONEPANEL_API_URL, or nil.
|
|
func (s SystemConfig) APIURL() *string {
|
|
return s.GetValue("ONEPANEL_API_URL")
|
|
}
|
|
|
|
// APIProtocol returns either http:// or https:// or nil.
|
|
// It is based on the ONEPANEL_API_URL config value and checks if it has https or http
|
|
func (s SystemConfig) APIProtocol() *string {
|
|
url := s.APIURL()
|
|
if url == nil {
|
|
return nil
|
|
}
|
|
|
|
if strings.HasPrefix(*url, "https://") {
|
|
return ptr.String("https://")
|
|
}
|
|
|
|
return ptr.String("http://")
|
|
}
|
|
|
|
// FQDN gets the ONEPANEL_FQDN value or nil.
|
|
func (s SystemConfig) FQDN() *string {
|
|
return s.GetValue("ONEPANEL_FQDN")
|
|
}
|
|
|
|
// NodePoolLabel gets the applicationNodePoolLabel from the config or returns nil.
|
|
func (s SystemConfig) NodePoolLabel() (label *string) {
|
|
return s.GetValue("applicationNodePoolLabel")
|
|
}
|
|
|
|
// NodePoolOptions loads and parses the applicationNodePoolOptions from the config.
|
|
// If there is no data, an error is returned.
|
|
func (s SystemConfig) NodePoolOptions() (options []*NodePoolOption, err error) {
|
|
data := s.GetValue("applicationNodePoolOptions")
|
|
if data == nil {
|
|
return nil, fmt.Errorf("no nodePoolOptions in config")
|
|
}
|
|
|
|
if err = yaml.Unmarshal([]byte(*data), &options); err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s SystemConfig) NodePoolOptionByValue(value string) (option *NodePoolOption, err error) {
|
|
options, err := s.NodePoolOptions()
|
|
if err != nil {
|
|
return
|
|
}
|
|
for _, opt := range options {
|
|
if opt.Value == value {
|
|
option = opt
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// DatabaseDriverName gets the databaseDriverName value, or nil.
|
|
func (s SystemConfig) DatabaseDriverName() *string {
|
|
return s.GetValue("databaseDriverName")
|
|
}
|
|
|
|
type ArtifactRepositoryS3Config struct {
|
|
KeyFormat string
|
|
Bucket string
|
|
Endpoint string
|
|
Insecure bool
|
|
Region string
|
|
AccessKeySecret corev1.SecretKeySelector
|
|
SecretKeySecret corev1.SecretKeySelector
|
|
AccessKey string
|
|
Secretkey string
|
|
}
|
|
|
|
// FormatKey replaces placeholder values with their actual values and returns this string.
|
|
// {{workflow.namespace}} -> namespace
|
|
// {{workflow.name}} -> workflowName
|
|
// {{pod.name}} -> podName
|
|
func (a *ArtifactRepositoryS3Config) FormatKey(namespace, workflowName, podName string) string {
|
|
keyFormat := a.KeyFormat
|
|
|
|
keyFormat = strings.Replace(keyFormat, "{{workflow.namespace}}", namespace, -1)
|
|
keyFormat = strings.Replace(keyFormat, "{{workflow.name}}", workflowName, -1)
|
|
keyFormat = strings.Replace(keyFormat, "{{pod.name}}", podName, -1)
|
|
|
|
return keyFormat
|
|
}
|
|
|
|
type ArtifactRepositoryConfig struct {
|
|
S3 *ArtifactRepositoryS3Config
|
|
}
|
|
|
|
type NamespaceConfig struct {
|
|
ArtifactRepository ArtifactRepositoryConfig
|
|
}
|