Skip to content

Commit cc1019b

Browse files
committed
chore(refacto): fix secret and use katenary schema
- add possibility to use a katenary.yaml file to setup values - fix secret generation
1 parent 14877fb commit cc1019b

39 files changed

+375
-155
lines changed

.gitignore

+11-16
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
1-
.venv
21
dist/*
3-
.cache/*
4-
chart/*
5-
*.yaml
6-
*.yml
7-
!.markdownlint.yaml
8-
!generator/*.yaml
9-
doc/venv/*
10-
!doc/mkdocs.yaml
11-
!.readthedocs.yaml
12-
./katenary
132
*.env
14-
docker-compose*
15-
!examples/**/docker-compose*
163
.credentials
174
release.id
18-
configs/
195
cover*
206
.sq
21-
./katenary
227
.aider*
238
.python_history
249
.bash_history
25-
katenary
10+
11+
.cache/
12+
.aider/
13+
.config/
14+
*/venv
15+
16+
# local binary
17+
./katenary
18+
19+
# will be treated later
20+
/examples/*

.markdownlint.yaml

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
default: true
33

44
MD013: # Line length
5-
line_length: 240
5+
line_length: 120
66

77
MD010: # Hard tabs
88
code_blocks: false
@@ -16,3 +16,6 @@ MD041: false
1616
# list indentation
1717
MD007:
1818
indent: 4
19+
20+
# no problem using several code blocks styles
21+
MD046: false

Makefile

+3
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ tests: test
169169
test:
170170
@echo -e "\033[1;33mTesting katenary $(VERSION)...\033[0m"
171171
go test -coverprofile=cover.out ./...
172+
$(MAKE) cover
173+
174+
cover:
172175
go tool cover -func=cover.out | grep "total:"
173176
go tool cover -html=cover.out -o cover.html
174177
if [ "$(BROWSER)" = "xdg-open" ]; then

cmd/katenary/main.go

+22-7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ package main
77
import (
88
"fmt"
99
"katenary/generator"
10+
"katenary/generator/katenaryfile"
11+
"katenary/generator/labels"
1012
"katenary/utils"
1113
"os"
1214
"strings"
@@ -43,6 +45,7 @@ func buildRootCmd() *cobra.Command {
4345
generateConvertCommand(),
4446
generateHashComposefilesCommand(),
4547
generateLabelHelpCommand(),
48+
generateSchemaCommand(),
4649
)
4750

4851
return rootCmd
@@ -245,31 +248,31 @@ func generateLabelHelpCommand() *cobra.Command {
245248
If no label is specified, the help for all labels is printed.
246249
If a label is specified, the help for this label is printed.
247250
248-
The name of the label must be specified without the prefix ` + generator.Prefix() + `.
251+
The name of the label must be specified without the prefix ` + labels.Prefix() + `.
249252
250253
e.g.
251254
kanetary help-labels
252255
katenary help-labels ingress
253256
katenary help-labels map-env
254257
`,
255-
ValidArgs: generator.GetLabelNames(),
258+
ValidArgs: labels.GetLabelNames(),
256259
Run: func(cmd *cobra.Command, args []string) {
257260
if len(args) > 0 {
258-
fmt.Println(generator.GetLabelHelpFor(args[0], markdown))
261+
fmt.Println(labels.GetLabelHelpFor(args[0], markdown))
259262
return
260263
}
261264
if all {
262265
// show the help for all labels
263-
l := len(generator.GetLabelNames())
264-
for i, label := range generator.GetLabelNames() {
265-
fmt.Println(generator.GetLabelHelpFor(label, markdown))
266+
l := len(labels.GetLabelNames())
267+
for i, label := range labels.GetLabelNames() {
268+
fmt.Println(labels.GetLabelHelpFor(label, markdown))
266269
if !markdown && i < l-1 {
267270
fmt.Println(strings.Repeat("-", 80))
268271
}
269272
}
270273
return
271274
}
272-
fmt.Println(generator.GetLabelHelp(markdown))
275+
fmt.Println(labels.GetLabelHelp(markdown))
273276
},
274277
}
275278

@@ -298,3 +301,15 @@ If no composefile is specified, the hash of all composefiles is printed.`,
298301
}
299302
return cmd
300303
}
304+
305+
func generateSchemaCommand() *cobra.Command {
306+
cmd := &cobra.Command{
307+
Use: "schema",
308+
Short: "Print the schema of the katenary file",
309+
Long: "Generate a schama for katenary.yaml file that can be used to validate the file or to use with yaml LSP to complete and check your configuration.",
310+
Run: func(cmd *cobra.Command, args []string) {
311+
fmt.Println(katenaryfile.GenerateSchema())
312+
},
313+
}
314+
return cmd
315+
}

cmd/katenary/main_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ func TestBuildCommand(t *testing.T) {
1010
if rootCmd.Use != "katenary" {
1111
t.Errorf("Expected rootCmd.Use to be katenary, got %s", rootCmd.Use)
1212
}
13-
numCommands := 5
13+
numCommands := 6
1414
if len(rootCmd.Commands()) != numCommands {
1515
t.Errorf("Expected %d command, got %d", numCommands, len(rootCmd.Commands()))
1616
}

generator/chart.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package generator
22

33
import (
44
"fmt"
5-
"katenary/generator/labelStructs"
5+
"katenary/generator/labels"
6+
"katenary/generator/labels/labelStructs"
67
"katenary/utils"
78
"log"
89
"os"
@@ -136,7 +137,7 @@ func (chart *HelmChart) generateConfigMapsAndSecrets(project *types.Project) err
136137
originalEnv[k] = v
137138
}
138139

139-
if v, ok := s.Labels[LabelSecrets]; ok {
140+
if v, ok := s.Labels[labels.LabelSecrets]; ok {
140141
list, err := labelStructs.SecretsFrom(v)
141142
if err != nil {
142143
log.Fatal("error unmarshaling secrets label:", err)
@@ -210,7 +211,8 @@ func (chart *HelmChart) generateDeployment(service types.ServiceConfig, deployme
210211

211212
// get the same-pod label if exists, add it to the list.
212213
// We later will copy some parts to the target deployment and remove this one.
213-
if samePod, ok := service.Labels[LabelSamePod]; ok && samePod != "" {
214+
if samePod, ok := service.Labels[labels.LabelSamePod]; ok && samePod != "" {
215+
log.Printf("Found same-pod label for %s", service.Name)
214216
podToMerge[samePod] = &service
215217
}
216218

@@ -247,7 +249,7 @@ func (chart *HelmChart) setChartVersion(service types.ServiceConfig) {
247249

248250
// setCronJob creates a cronjob from the service labels.
249251
func (chart *HelmChart) setCronJob(service types.ServiceConfig, appName string) *CronJob {
250-
if _, ok := service.Labels[LabelCronJob]; !ok {
252+
if _, ok := service.Labels[labels.LabelCronJob]; !ok {
251253
return nil
252254
}
253255
cronjob, rbac := NewCronJob(service, chart, appName)
@@ -281,7 +283,7 @@ func (chart *HelmChart) setCronJob(service types.ServiceConfig, appName string)
281283
// setDependencies sets the dependencies from the service labels.
282284
func (chart *HelmChart) setDependencies(service types.ServiceConfig) (bool, error) {
283285
// helm dependency
284-
if v, ok := service.Labels[LabelDependencies]; ok {
286+
if v, ok := service.Labels[labels.LabelDependencies]; ok {
285287
d, err := labelStructs.DependenciesFrom(v)
286288
if err != nil {
287289
return false, err
@@ -307,10 +309,10 @@ func (chart *HelmChart) setDependencies(service types.ServiceConfig) (bool, erro
307309
func (chart *HelmChart) setSharedConf(service types.ServiceConfig, deployments map[string]*Deployment) {
308310
// if the service has the "shared-conf" label, we need to add the configmap
309311
// to the chart and add the env vars to the service
310-
if _, ok := service.Labels[LabelEnvFrom]; !ok {
312+
if _, ok := service.Labels[labels.LabelEnvFrom]; !ok {
311313
return
312314
}
313-
fromservices, err := labelStructs.EnvFromFrom(service.Labels[LabelEnvFrom])
315+
fromservices, err := labelStructs.EnvFromFrom(service.Labels[labels.LabelEnvFrom])
314316
if err != nil {
315317
log.Fatal("error unmarshaling env-from label:", err)
316318
}

generator/configMap.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package generator
22

33
import (
4-
"katenary/generator/labelStructs"
4+
"katenary/generator/labels"
5+
"katenary/generator/labels/labelStructs"
56
"katenary/utils"
67
"log"
78
"os"
@@ -73,7 +74,7 @@ func NewConfigMap(service types.ServiceConfig, appName string, forFile bool) *Co
7374
}
7475

7576
// get the secrets from the labels
76-
secrets, err := labelStructs.SecretsFrom(service.Labels[LabelSecrets])
77+
secrets, err := labelStructs.SecretsFrom(service.Labels[labels.LabelSecrets])
7778
if err != nil {
7879
log.Fatal(err)
7980
}
@@ -82,7 +83,7 @@ func NewConfigMap(service types.ServiceConfig, appName string, forFile bool) *Co
8283
drop[secret] = true
8384
}
8485
// get the label values from the labels
85-
varDescriptons := utils.GetValuesFromLabel(service, LabelValues)
86+
varDescriptons := utils.GetValuesFromLabel(service, labels.LabelValues)
8687
for value := range varDescriptons {
8788
labelValues = append(labelValues, value)
8889
}
@@ -98,7 +99,7 @@ func NewConfigMap(service types.ServiceConfig, appName string, forFile bool) *Co
9899
if !forFile {
99100
// do not bind env variables to the configmap
100101
// remove the variables that are already defined in the environment
101-
if l, ok := service.Labels[LabelMapEnv]; ok {
102+
if l, ok := service.Labels[labels.LabelMapEnv]; ok {
102103
envmap, err := labelStructs.MapEnvFrom(l)
103104
if err != nil {
104105
log.Fatal("Error parsing map-env", err)

generator/converter.go

+11-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import (
55
"errors"
66
"fmt"
77
"katenary/generator/extrafiles"
8-
"katenary/generator/labelStructs"
8+
"katenary/generator/katenaryfile"
9+
"katenary/generator/labels"
10+
"katenary/generator/labels/labelStructs"
911
"katenary/parser"
1012
"katenary/utils"
1113
"log"
@@ -125,6 +127,9 @@ func Convert(config ConvertOptions, dockerComposeFile ...string) {
125127
os.Exit(1)
126128
}
127129

130+
// TODO: use katenary.yaml file here to set the labels
131+
katenaryfile.OverrideWithConfig(project)
132+
128133
if !config.Force {
129134
// check if the chart directory exists
130135
// if yes, prevent the user from overwriting it and ask for confirmation
@@ -264,7 +269,7 @@ func addDependencyDescription(values []byte, dependencies []labelStructs.Depende
264269
// of the service definition.
265270
func addDescriptions(values []byte, project types.Project) []byte {
266271
for _, service := range project.Services {
267-
if description, ok := service.Labels[LabelDescription]; ok {
272+
if description, ok := service.Labels[labels.LabelDescription]; ok {
268273
// set it as comment
269274
description = "\n# " + strings.ReplaceAll(description, "\n", "\n# ")
270275

@@ -288,7 +293,7 @@ func addDescriptions(values []byte, project types.Project) []byte {
288293

289294
func addDocToVariable(service types.ServiceConfig, lines []string) []string {
290295
currentService := ""
291-
variables := utils.GetValuesFromLabel(service, LabelValues)
296+
variables := utils.GetValuesFromLabel(service, labels.LabelValues)
292297
for i, line := range lines {
293298
// if the line is a service, it is a name followed by a colon
294299
if regexp.MustCompile(`(?m)^` + service.Name + `:`).MatchString(line) {
@@ -378,7 +383,7 @@ func addMainTagAppDoc(values []byte, project *types.Project) []byte {
378383

379384
for _, service := range project.Services {
380385
// read the label LabelMainApp
381-
if v, ok := service.Labels[LabelMainApp]; !ok {
386+
if v, ok := service.Labels[labels.LabelMainApp]; !ok {
382387
continue
383388
} else if v == "false" || v == "no" || v == "0" {
384389
continue
@@ -651,7 +656,7 @@ func checkOldLabels(project *types.Project) error {
651656
badServices := make([]string, 0)
652657
for _, service := range project.Services {
653658
for label := range service.Labels {
654-
if strings.Contains(label, "katenary.") && !strings.Contains(label, katenaryLabelPrefix) {
659+
if strings.Contains(label, "katenary.") && !strings.Contains(label, labels.KatenaryLabelPrefix) {
655660
badServices = append(badServices, fmt.Sprintf("- %s: %s", service.Name, label))
656661
}
657662
}
@@ -667,7 +672,7 @@ func checkOldLabels(project *types.Project) error {
667672
Services to upgrade:
668673
%s`,
669674
project.Name,
670-
katenaryLabelPrefix[0:len(katenaryLabelPrefix)-1],
675+
labels.KatenaryLabelPrefix[0:len(labels.KatenaryLabelPrefix)-1],
671676
strings.Join(badServices, "\n"),
672677
)
673678

generator/cronJob.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package generator
22

33
import (
4-
"katenary/generator/labelStructs"
4+
"katenary/generator/labels"
5+
"katenary/generator/labels/labelStructs"
56
"katenary/utils"
67
"log"
78
"strings"
@@ -25,7 +26,7 @@ type CronJob struct {
2526

2627
// NewCronJob creates a new CronJob from a compose service. The appName is the name of the application taken from the project name.
2728
func NewCronJob(service types.ServiceConfig, chart *HelmChart, appName string) (*CronJob, *RBAC) {
28-
labels, ok := service.Labels[LabelCronJob]
29+
labels, ok := service.Labels[labels.LabelCronJob]
2930
if !ok {
3031
return nil, nil
3132
}

0 commit comments

Comments
 (0)