kuma

Форк
0
91 строка · 2.2 Кб
1
package cmd
2

3
import (
4
	"os"
5
	"path/filepath"
6
	"strings"
7
	"text/template"
8

9
	"github.com/spf13/cobra"
10

11
	"github.com/kumahq/kuma/tools/policy-gen/generator/pkg/parse"
12
	"github.com/kumahq/kuma/tools/policy-gen/generator/pkg/save"
13
)
14

15
func newPluginFile(rootArgs *args) *cobra.Command {
16
	cmd := &cobra.Command{
17
		Use:   "plugin-file",
18
		Short: "Generate a plugin.go file for the policy",
19
		Long:  "Generate a plugin.go file for the policy.",
20
		RunE: func(cmd *cobra.Command, _ []string) error {
21
			policyName := filepath.Base(rootArgs.pluginDir)
22
			apiDir := filepath.Join(rootArgs.pluginDir, "api")
23
			policyPath := filepath.Join(apiDir, rootArgs.version, policyName+".go")
24
			if _, err := os.Stat(policyPath); err != nil {
25
				return err
26
			}
27
			pconfig, err := parse.Policy(policyPath)
28
			if err != nil {
29
				return err
30
			}
31

32
			if pconfig.SkipRegistration {
33
				return nil
34
			}
35

36
			files, err := os.ReadDir(apiDir)
37
			if err != nil {
38
				return err
39
			}
40

41
			versions := []string{}
42
			for _, file := range files {
43
				if file.IsDir() {
44
					versions = append(versions, file.Name())
45
				}
46
			}
47

48
			outPath := filepath.Join(rootArgs.pluginDir, "zz_generated.plugin.go")
49
			return save.GoTemplate(pluginGoTemplate, struct {
50
				Package  string
51
				Versions []string
52
				Name     string
53
				GoModule string
54
			}{
55
				Package:  strings.ToLower(pconfig.Name),
56
				Name:     pconfig.Name,
57
				Versions: versions,
58
				GoModule: rootArgs.goModule,
59
			}, outPath)
60
		},
61
	}
62

63
	return cmd
64
}
65

66
var pluginGoTemplate = template.Must(template.New("plugin-go").Parse(`
67
package {{ .Package }}
68

69
{{ $pkg := .Package }}
70
{{ $name := .Name }}
71
{{ $gomodule := .GoModule }}
72

73
import (
74
	"github.com/kumahq/kuma/pkg/plugins/policies/core"
75
{{- range $idx, $version := .Versions}}
76
	api_{{ $version }} "{{ $gomodule }}/pkg/plugins/policies/{{ $pkg }}/api/{{ $version }}"
77
	k8s_{{ $version }} "{{ $gomodule }}/pkg/plugins/policies/{{ $pkg }}/k8s/{{ $version }}"
78
	plugin_{{ $version }} "{{ $gomodule }}/pkg/plugins/policies/{{ $pkg }}/plugin/{{ $version }}"
79
{{- end}}
80
)
81

82
func InitPlugin() {
83
	{{- range $idx, $version := .Versions}}
84
	core.Register(
85
		api_{{ $version }}.{{ $name }}ResourceTypeDescriptor,
86
		k8s_{{ $version }}.AddToScheme,
87
		plugin_{{ $version }}.NewPlugin(),
88
	)
89
	{{- end}}
90
}
91
`))
92

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.