kuma
91 строка · 2.2 Кб
1package cmd
2
3import (
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
15func newPluginFile(rootArgs *args) *cobra.Command {
16cmd := &cobra.Command{
17Use: "plugin-file",
18Short: "Generate a plugin.go file for the policy",
19Long: "Generate a plugin.go file for the policy.",
20RunE: func(cmd *cobra.Command, _ []string) error {
21policyName := filepath.Base(rootArgs.pluginDir)
22apiDir := filepath.Join(rootArgs.pluginDir, "api")
23policyPath := filepath.Join(apiDir, rootArgs.version, policyName+".go")
24if _, err := os.Stat(policyPath); err != nil {
25return err
26}
27pconfig, err := parse.Policy(policyPath)
28if err != nil {
29return err
30}
31
32if pconfig.SkipRegistration {
33return nil
34}
35
36files, err := os.ReadDir(apiDir)
37if err != nil {
38return err
39}
40
41versions := []string{}
42for _, file := range files {
43if file.IsDir() {
44versions = append(versions, file.Name())
45}
46}
47
48outPath := filepath.Join(rootArgs.pluginDir, "zz_generated.plugin.go")
49return save.GoTemplate(pluginGoTemplate, struct {
50Package string
51Versions []string
52Name string
53GoModule string
54}{
55Package: strings.ToLower(pconfig.Name),
56Name: pconfig.Name,
57Versions: versions,
58GoModule: rootArgs.goModule,
59}, outPath)
60},
61}
62
63return cmd
64}
65
66var pluginGoTemplate = template.Must(template.New("plugin-go").Parse(`
67package {{ .Package }}
68
69{{ $pkg := .Package }}
70{{ $name := .Name }}
71{{ $gomodule := .GoModule }}
72
73import (
74"github.com/kumahq/kuma/pkg/plugins/policies/core"
75{{- range $idx, $version := .Versions}}
76api_{{ $version }} "{{ $gomodule }}/pkg/plugins/policies/{{ $pkg }}/api/{{ $version }}"
77k8s_{{ $version }} "{{ $gomodule }}/pkg/plugins/policies/{{ $pkg }}/k8s/{{ $version }}"
78plugin_{{ $version }} "{{ $gomodule }}/pkg/plugins/policies/{{ $pkg }}/plugin/{{ $version }}"
79{{- end}}
80)
81
82func InitPlugin() {
83{{- range $idx, $version := .Versions}}
84core.Register(
85api_{{ $version }}.{{ $name }}ResourceTypeDescriptor,
86k8s_{{ $version }}.AddToScheme,
87plugin_{{ $version }}.NewPlugin(),
88)
89{{- end}}
90}
91`))
92