...

Source file src/edge-infra.dev/pkg/f8n/warehouse/pallet/options.go

Documentation: edge-infra.dev/pkg/f8n/warehouse/pallet

     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  // Options configure how Pallets are constructed from OCI artifacts.
    16  type Options struct {
    17  	ClusterProviders cluster.Providers
    18  	Capabilities     capability.Capabilities
    19  	Metadata         Metadata
    20  	DisableRendering bool
    21  	Parameters       []string
    22  }
    23  
    24  // Validate returns an error if the pallet options are invalid or incomplete.
    25  func (o Options) Validate() error {
    26  	return multierr.Combine([]error{
    27  		o.Metadata.Validate(),
    28  		o.ClusterProviders.IsValid(""),
    29  	}...)
    30  }
    31  
    32  // annos produces the standard annotations for pallets based on the options
    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  // commonAnnotations are added to all artifacts produced by this package.
    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