...

Source file src/edge-infra.dev/pkg/f8n/warehouse/lift/cmd/apply/apply.go

Documentation: edge-infra.dev/pkg/f8n/warehouse/lift/cmd/apply

     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  // TODO: dry-run
    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