github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/set_label_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/LukasHeimann/cloudfoundrycli/v8/command"
     8  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     9  	"github.com/LukasHeimann/cloudfoundrycli/v8/types"
    10  )
    11  
    12  //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . LabelSetter
    13  
    14  type LabelSetter interface {
    15  	Execute(resource TargetResource, labels map[string]types.NullString) error
    16  }
    17  
    18  type SetLabelCommand struct {
    19  	BaseCommand
    20  
    21  	RequiredArgs    flag.SetLabelArgs `positional-args:"yes"`
    22  	relatedCommands interface{}       `related_commands:"labels, unset-label"`
    23  	BuildpackStack  string            `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"`
    24  	ServiceBroker   string            `long:"broker" short:"b" description:"Specify a service broker to disambiguate service offerings or service plans with the same name."`
    25  	ServiceOffering string            `long:"offering" short:"e" description:"Specify a service offering to disambiguate service plans with the same name."`
    26  
    27  	LabelSetter LabelSetter
    28  }
    29  
    30  func (cmd *SetLabelCommand) Setup(config command.Config, ui command.UI) error {
    31  	err := cmd.BaseCommand.Setup(config, ui)
    32  	if err != nil {
    33  		return err
    34  	}
    35  
    36  	cmd.LabelSetter = &LabelUpdater{
    37  		UI:          ui,
    38  		Config:      config,
    39  		SharedActor: cmd.SharedActor,
    40  		Actor:       cmd.Actor,
    41  		Action:      Set,
    42  	}
    43  	return nil
    44  }
    45  
    46  func (cmd SetLabelCommand) Execute(args []string) error {
    47  	targetResource := TargetResource{
    48  		ResourceType:    cmd.RequiredArgs.ResourceType,
    49  		ResourceName:    cmd.RequiredArgs.ResourceName,
    50  		BuildpackStack:  cmd.BuildpackStack,
    51  		ServiceBroker:   cmd.ServiceBroker,
    52  		ServiceOffering: cmd.ServiceOffering,
    53  	}
    54  
    55  	labels := make(map[string]types.NullString)
    56  	for _, label := range cmd.RequiredArgs.Labels {
    57  		parts := strings.SplitN(label, "=", 2)
    58  		if len(parts) < 2 {
    59  			return fmt.Errorf("Metadata error: no value provided for label '%s'", label)
    60  		}
    61  		labels[parts[0]] = types.NewNullString(parts[1])
    62  	}
    63  
    64  	return cmd.LabelSetter.Execute(targetResource, labels)
    65  }
    66  
    67  func (cmd SetLabelCommand) Usage() string {
    68  	return `CF_NAME set-label RESOURCE RESOURCE_NAME KEY=VALUE...`
    69  }
    70  
    71  func (cmd SetLabelCommand) Examples() string {
    72  	return `
    73  cf set-label app dora env=production
    74  cf set-label org business pci=true public-facing=false
    75  cf set-label buildpack go_buildpack go=1.12 -s cflinuxfs3`
    76  }
    77  
    78  func (cmd SetLabelCommand) Resources() string {
    79  	return `
    80  app
    81  buildpack
    82  domain
    83  org
    84  route
    85  service-broker
    86  service-instance
    87  service-offering
    88  service-plan
    89  space
    90  stack`
    91  }