feat(refacto): move everything in internal package
This allows to install katenary with `go install` and to clean up the project folder.
This commit is contained in:
112
internal/generator/secret.go
Normal file
112
internal/generator/secret.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package generator
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"github.com/katenary/katenary/internal/generator/labels"
|
||||
"github.com/katenary/katenary/internal/utils"
|
||||
"strings"
|
||||
|
||||
"github.com/compose-spec/compose-go/types"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
var (
|
||||
_ DataMap = (*Secret)(nil)
|
||||
_ Yaml = (*Secret)(nil)
|
||||
)
|
||||
|
||||
// Secret is a kubernetes Secret.
|
||||
//
|
||||
// Implements the DataMap interface.
|
||||
type Secret struct {
|
||||
*corev1.Secret
|
||||
service types.ServiceConfig `yaml:"-"`
|
||||
}
|
||||
|
||||
// NewSecret creates a new Secret from a compose service
|
||||
func NewSecret(service types.ServiceConfig, appName string) *Secret {
|
||||
secret := &Secret{
|
||||
service: service,
|
||||
Secret: &corev1.Secret{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "Secret",
|
||||
APIVersion: "v1",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: utils.TplName(service.Name, appName),
|
||||
Labels: GetLabels(service.Name, appName),
|
||||
Annotations: Annotations,
|
||||
},
|
||||
Data: make(map[string][]byte),
|
||||
},
|
||||
}
|
||||
|
||||
// check if the value should be in values.yaml
|
||||
valueList := []string{}
|
||||
varDescriptons := utils.GetValuesFromLabel(service, labels.LabelValues)
|
||||
for value := range varDescriptons {
|
||||
valueList = append(valueList, value)
|
||||
}
|
||||
|
||||
for _, value := range valueList {
|
||||
if val, ok := service.Environment[value]; ok {
|
||||
value = strings.TrimPrefix(value, `"`)
|
||||
*val = `.Values.` + service.Name + `.environment.` + value
|
||||
}
|
||||
}
|
||||
|
||||
for key, value := range service.Environment {
|
||||
if value == nil {
|
||||
continue
|
||||
}
|
||||
secret.AddData(key, *value)
|
||||
}
|
||||
|
||||
return secret
|
||||
}
|
||||
|
||||
// AddData adds a key value pair to the secret.
|
||||
func (s *Secret) AddData(key, value string) {
|
||||
if value == "" {
|
||||
return
|
||||
}
|
||||
valuesLabels := utils.GetValuesFromLabel(s.service, labels.LabelValues)
|
||||
if _, ok := valuesLabels[key]; ok {
|
||||
// the value should be in values.yaml
|
||||
s.Data[key] = []byte(`{{ tpl .Values.` + s.service.Name + `.environment.` + key + ` $ | b64enc }}`)
|
||||
} else {
|
||||
encoded := base64.StdEncoding.EncodeToString([]byte(value))
|
||||
s.Data[key] = []byte(encoded)
|
||||
}
|
||||
// s.Data[key] = []byte(`{{ tpl ` + value + ` $ | b64enc }}`)
|
||||
}
|
||||
|
||||
// Filename returns the filename of the secret.
|
||||
func (s *Secret) Filename() string {
|
||||
return s.service.Name + ".secret.yaml"
|
||||
}
|
||||
|
||||
// SetData sets the data of the secret.
|
||||
func (s *Secret) SetData(data map[string]string) {
|
||||
for key, value := range data {
|
||||
s.AddData(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
// Yaml returns the yaml representation of the secret.
|
||||
func (s *Secret) Yaml() ([]byte, error) {
|
||||
var y []byte
|
||||
var err error
|
||||
if y, err = ToK8SYaml(s); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// replace the b64 value by the real value
|
||||
for _, value := range s.Data {
|
||||
encoded := base64.StdEncoding.EncodeToString([]byte(value))
|
||||
y = []byte(strings.ReplaceAll(string(y), encoded, string(value)))
|
||||
}
|
||||
|
||||
return y, nil
|
||||
}
|
Reference in New Issue
Block a user