package pallet import ( "fmt" "sort" "strings" "go.uber.org/multierr" wh "edge-infra.dev/pkg/f8n/warehouse" "edge-infra.dev/pkg/f8n/warehouse/capability" "edge-infra.dev/pkg/f8n/warehouse/cluster" ) // Options configure how Pallets are constructed from OCI artifacts. type Options struct { ClusterProviders cluster.Providers Capabilities capability.Capabilities Metadata Metadata DisableRendering bool Parameters []string } // Validate returns an error if the pallet options are invalid or incomplete. func (o Options) Validate() error { return multierr.Combine([]error{ o.Metadata.Validate(), o.ClusterProviders.IsValid(""), }...) } // annos produces the standard annotations for pallets based on the options func (o Options) annos() []map[string]string { annos := []map[string]string{ o.Metadata.OCIAnnotations(), o.Capabilities.OCIAnnotations(), o.ClusterProviders.OCIAnnotations(), commonAnnotations, } if o.DisableRendering { annos = append(annos, map[string]string{wh.AnnotationRender: "false"}) } if len(o.Parameters) > 0 { sort.Strings(o.Parameters) parameters := strings.Join(o.Parameters, ",") annos = append(annos, map[string]string{wh.AnnotationParameters: parameters}) } return annos } // commonAnnotations are added to all artifacts produced by this package. var commonAnnotations = map[string]string{ wh.AnnotationSchemaVersion: wh.Schema1, wh.AnnotationKind: WarehouseKind, } func fromOpts(o Options) (*pallet, error) { if err := o.Validate(); err != nil { return nil, fmt.Errorf("pallet: invalid options %v", err) } return &pallet{ providers: o.ClusterProviders, meta: o.Metadata, capabilities: o.Capabilities, renderable: !o.DisableRendering, parameters: o.Parameters, }, nil }