...
1 package pallet
2
3 import (
4 "fmt"
5 "sort"
6 "strings"
7
8 "go.uber.org/multierr"
9
10 wh "edge-infra.dev/pkg/f8n/warehouse"
11 "edge-infra.dev/pkg/f8n/warehouse/capability"
12 "edge-infra.dev/pkg/f8n/warehouse/cluster"
13 )
14
15
16 type Options struct {
17 ClusterProviders cluster.Providers
18 Capabilities capability.Capabilities
19 Metadata Metadata
20 DisableRendering bool
21 Parameters []string
22 }
23
24
25 func (o Options) Validate() error {
26 return multierr.Combine([]error{
27 o.Metadata.Validate(),
28 o.ClusterProviders.IsValid(""),
29 }...)
30 }
31
32
33 func (o Options) annos() []map[string]string {
34 annos := []map[string]string{
35 o.Metadata.OCIAnnotations(),
36 o.Capabilities.OCIAnnotations(),
37 o.ClusterProviders.OCIAnnotations(),
38 commonAnnotations,
39 }
40
41 if o.DisableRendering {
42 annos = append(annos, map[string]string{wh.AnnotationRender: "false"})
43 }
44
45 if len(o.Parameters) > 0 {
46 sort.Strings(o.Parameters)
47 parameters := strings.Join(o.Parameters, ",")
48 annos = append(annos, map[string]string{wh.AnnotationParameters: parameters})
49 }
50
51 return annos
52 }
53
54
55 var commonAnnotations = map[string]string{
56 wh.AnnotationSchemaVersion: wh.Schema1,
57 wh.AnnotationKind: WarehouseKind,
58 }
59
60 func fromOpts(o Options) (*pallet, error) {
61 if err := o.Validate(); err != nil {
62 return nil, fmt.Errorf("pallet: invalid options %v", err)
63 }
64 return &pallet{
65 providers: o.ClusterProviders,
66 meta: o.Metadata,
67 capabilities: o.Capabilities,
68 renderable: !o.DisableRendering,
69 parameters: o.Parameters,
70 }, nil
71 }
72
View as plain text