github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/set_label_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"code.cloudfoundry.org/cli/command"
     8  	"code.cloudfoundry.org/cli/command/flag"
     9  	"code.cloudfoundry.org/cli/types"
    10  )
    11  
    12  //go:generate counterfeiter . 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  	usage           interface{}       `usage:"CF_NAME set-label RESOURCE RESOURCE_NAME KEY=VALUE...\n\nEXAMPLES:\n   cf set-label app dora env=production\n   cf set-label org business pci=true public-facing=false\n   cf set-label buildpack go_buildpack go=1.12 -s cflinuxfs3\n\nRESOURCES:\n   app\n   buildpack\n   domain\n   org\n   route\n   service-broker\n   service-offering\n   service-plan\n   space\n   stack"`
    23  	relatedCommands interface{}       `related_commands:"labels, unset-label"`
    24  	BuildpackStack  string            `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"`
    25  	ServiceBroker   string            `long:"broker" short:"b" description:"Specify a service broker to disambiguate service offerings or service plans with the same name."`
    26  	ServiceOffering string            `long:"offering" short:"e" description:"Specify a service offering to disambiguate service plans with the same name."`
    27  
    28  	LabelSetter LabelSetter
    29  }
    30  
    31  func (cmd *SetLabelCommand) Setup(config command.Config, ui command.UI) error {
    32  	err := cmd.BaseCommand.Setup(config, ui)
    33  	if err != nil {
    34  		return err
    35  	}
    36  
    37  	cmd.LabelSetter = &LabelUpdater{
    38  		UI:          ui,
    39  		Config:      config,
    40  		SharedActor: cmd.SharedActor,
    41  		Actor:       cmd.Actor,
    42  		Action:      Set,
    43  	}
    44  	return nil
    45  }
    46  
    47  func (cmd SetLabelCommand) Execute(args []string) error {
    48  	targetResource := TargetResource{
    49  		ResourceType:    cmd.RequiredArgs.ResourceType,
    50  		ResourceName:    cmd.RequiredArgs.ResourceName,
    51  		BuildpackStack:  cmd.BuildpackStack,
    52  		ServiceBroker:   cmd.ServiceBroker,
    53  		ServiceOffering: cmd.ServiceOffering,
    54  	}
    55  
    56  	labels := make(map[string]types.NullString)
    57  	for _, label := range cmd.RequiredArgs.Labels {
    58  		parts := strings.SplitN(label, "=", 2)
    59  		if len(parts) < 2 {
    60  			return fmt.Errorf("Metadata error: no value provided for label '%s'", label)
    61  		}
    62  		labels[parts[0]] = types.NewNullString(parts[1])
    63  	}
    64  
    65  	return cmd.LabelSetter.Execute(targetResource, labels)
    66  }