...
1 package apply
2
3 import (
4 "context"
5 "fmt"
6
7 "edge-infra.dev/pkg/f8n/warehouse/cluster"
8 "edge-infra.dev/pkg/f8n/warehouse/lift"
9 "edge-infra.dev/pkg/f8n/warehouse/lift/cmd/internal"
10 "edge-infra.dev/pkg/f8n/warehouse/lift/render"
11 "edge-infra.dev/pkg/f8n/warehouse/pallet"
12 "edge-infra.dev/pkg/lib/cli/sink"
13 )
14
15
16
17 func New(cfg lift.Config) *sink.Command {
18 var (
19 packer = internal.NewPacker(cfg)
20 unpacker = internal.NewUnpacker(cfg.Parameters)
21 applier = internal.NewApplier()
22 )
23
24 cmd := &sink.Command{
25 Use: "apply [flags] <pallets>",
26 Short: "schedule Warehouse packages to a cluster",
27 Extensions: []sink.Extension{packer, unpacker, applier},
28 Exec: func(ctx context.Context, r sink.Run) error {
29 if len(r.Args()) == 0 {
30 return fmt.Errorf("at least one pallet is required")
31 }
32 applier.Info(r)
33 unpacker.Info(r)
34
35 for _, a := range r.Args() {
36 artifact, err := internal.ResolveArtifact(packer, a)
37 if err != nil {
38 return err
39 }
40 p, err := pallet.New(artifact)
41 if err != nil {
42 return err
43 }
44 parameters := p.Parameters()
45 _, err = render.HandleParams(parameters, unpacker.RenderingParams)
46 if err != nil {
47 return err
48 }
49
50 err = applier.Apply(ctx, artifact, unpacker.Options()...)
51 if err == cluster.ErrNoProviders {
52 return fmt.Errorf("failed to apply %s: %w, pass via --cluster-provider or CLUSTER_PROVIDER environment variable", a, err)
53 }
54 if err != nil {
55 return fmt.Errorf("failed to apply %s: %w", a, err)
56 }
57 }
58
59 return nil
60 },
61 }
62 return cmd
63 }
64
View as plain text