github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/set_label_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"code.cloudfoundry.org/cli/actor/sharedaction"
     8  	"code.cloudfoundry.org/cli/actor/v7action"
     9  	"code.cloudfoundry.org/cli/command"
    10  	"code.cloudfoundry.org/cli/command/flag"
    11  	"code.cloudfoundry.org/cli/command/v7/shared"
    12  	"code.cloudfoundry.org/cli/types"
    13  	"code.cloudfoundry.org/clock"
    14  )
    15  
    16  //go:generate counterfeiter . LabelSetter
    17  
    18  type LabelSetter interface {
    19  	Execute(resource TargetResource, labels map[string]types.NullString) error
    20  }
    21  
    22  type SetLabelCommand struct {
    23  	RequiredArgs    flag.SetLabelArgs `positional-args:"yes"`
    24  	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   space\n   stack"`
    25  	relatedCommands interface{}       `related_commands:"labels, unset-label"`
    26  	BuildpackStack  string            `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"`
    27  	LabelSetter     LabelSetter
    28  }
    29  
    30  func (cmd *SetLabelCommand) Setup(config command.Config, ui command.UI) error {
    31  	sharedActor := sharedaction.NewActor(config)
    32  	ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    33  	if err != nil {
    34  		return err
    35  	}
    36  	actor := v7action.NewActor(ccClient, config, nil, nil, clock.NewClock())
    37  
    38  	cmd.LabelSetter = &LabelUpdater{
    39  		UI:          ui,
    40  		Config:      config,
    41  		SharedActor: sharedActor,
    42  		Actor:       actor,
    43  		Action:      Set,
    44  	}
    45  	return nil
    46  }
    47  
    48  func (cmd SetLabelCommand) Execute(args []string) error {
    49  	targetResource := TargetResource{
    50  		ResourceType:   cmd.RequiredArgs.ResourceType,
    51  		ResourceName:   cmd.RequiredArgs.ResourceName,
    52  		BuildpackStack: cmd.BuildpackStack,
    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  }