kuma
1package cmd
2
3import (
4"fmt"
5"io"
6"os"
7
8"github.com/pkg/errors"
9"github.com/spf13/cobra"
10
11kuma_dp "github.com/kumahq/kuma/pkg/config/app/kuma-dp"
12core_mesh "github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
13"github.com/kumahq/kuma/pkg/core/resources/model"
14"github.com/kumahq/kuma/pkg/core/resources/model/rest"
15"github.com/kumahq/kuma/pkg/util/template"
16)
17
18func readResource(cmd *cobra.Command, r *kuma_dp.DataplaneRuntime) (model.Resource, error) {
19var b []byte
20var err error
21
22// Load from file first.
23switch r.ResourcePath {
24case "":
25if r.Resource != "" {
26b = []byte(r.Resource)
27}
28case "-":
29if b, err = io.ReadAll(cmd.InOrStdin()); err != nil {
30return nil, err
31}
32default:
33if b, err = os.ReadFile(r.ResourcePath); err != nil {
34return nil, errors.Wrap(err, "error while reading provided file")
35}
36}
37
38if len(b) == 0 {
39return nil, nil
40}
41
42b = template.Render(string(b), r.ResourceVars)
43runLog.Info("rendered resource", "resource", string(b))
44
45res, err := rest.YAML.UnmarshalCore(b)
46if err != nil {
47return nil, err
48}
49
50if err, msg := core_mesh.ValidateMetaBackwardsCompatible(res.GetMeta(), res.Descriptor().Scope); err.HasViolations() {
51return nil, &err
52} else if msg != "" {
53if _, printErr := fmt.Fprintln(cmd.ErrOrStderr(), msg); printErr != nil {
54return nil, printErr
55}
56}
57
58return res, nil
59}
60