github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/unset_label_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"strings"
     5  
     6  	"code.cloudfoundry.org/cli/actor/sharedaction"
     7  	"code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/cf/errors"
     9  	"code.cloudfoundry.org/cli/command"
    10  	"code.cloudfoundry.org/cli/command/flag"
    11  	"code.cloudfoundry.org/cli/command/translatableerror"
    12  	"code.cloudfoundry.org/cli/command/v7/shared"
    13  	"code.cloudfoundry.org/cli/types"
    14  	"code.cloudfoundry.org/clock"
    15  )
    16  
    17  type UnsetLabelCommand struct {
    18  	RequiredArgs    flag.UnsetLabelArgs `positional-args:"yes"`
    19  	BuildpackStack  string              `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"`
    20  	usage           interface{}         `usage:"CF_NAME unset-label RESOURCE RESOURCE_NAME KEY...\n\nEXAMPLES:\n   cf unset-label app dora ci_signature_sha2\n   cf unset-label org business pci public-facing\n   cf unset-label buildpack go_buildpack go -s cflinuxfs3\n\nRESOURCES:\n   app\n   buildpack\n   domain\n   org\n   route\n   space\n   stack"`
    21  	relatedCommands interface{}         `related_commands:"labels, set-label"`
    22  	UI              command.UI
    23  	Config          command.Config
    24  	SharedActor     command.SharedActor
    25  	Actor           SetLabelActor
    26  }
    27  
    28  func (cmd *UnsetLabelCommand) Setup(config command.Config, ui command.UI) error {
    29  	cmd.UI = ui
    30  	cmd.Config = config
    31  	cmd.SharedActor = sharedaction.NewActor(config)
    32  	ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    33  	if err != nil {
    34  		return err
    35  	}
    36  	cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock())
    37  	return nil
    38  }
    39  
    40  func (cmd UnsetLabelCommand) Execute(args []string) error {
    41  	user, err := cmd.Config.CurrentUser()
    42  	if err != nil {
    43  		return err
    44  	}
    45  
    46  	err = cmd.validateFlags()
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	labels := make(map[string]types.NullString)
    52  	for _, value := range cmd.RequiredArgs.LabelKeys {
    53  		labels[value] = types.NewNullString()
    54  	}
    55  
    56  	resourceTypeString := strings.ToLower(cmd.RequiredArgs.ResourceType)
    57  	switch ResourceType(resourceTypeString) {
    58  	case App:
    59  		err = cmd.executeApp(user.Name, labels)
    60  	case Buildpack:
    61  		err = cmd.executeBuildpack(user.Name, labels)
    62  	case Domain:
    63  		err = cmd.executeDomain(user.Name, labels)
    64  	case Org:
    65  		err = cmd.executeOrg(user.Name, labels)
    66  	case Route:
    67  		err = cmd.executeRoute(user.Name, labels)
    68  	case Space:
    69  		err = cmd.executeSpace(user.Name, labels)
    70  	case Stack:
    71  		err = cmd.executeStack(user.Name, labels)
    72  
    73  	default:
    74  		err = errors.New(cmd.UI.TranslateText("Unsupported resource type of '{{.ResourceType}}'", map[string]interface{}{"ResourceType": cmd.RequiredArgs.ResourceType}))
    75  	}
    76  
    77  	if err != nil {
    78  		return err
    79  	}
    80  
    81  	cmd.UI.DisplayOK()
    82  	return nil
    83  }
    84  
    85  func (cmd UnsetLabelCommand) executeApp(username string, labels map[string]types.NullString) error {
    86  	err := cmd.SharedActor.CheckTarget(true, true)
    87  	if err != nil {
    88  		return err
    89  	}
    90  
    91  	cmd.UI.DisplayTextWithFlavor("Removing label(s) for app {{.ResourceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{
    92  		"ResourceName": cmd.RequiredArgs.ResourceName,
    93  		"OrgName":      cmd.Config.TargetedOrganization().Name,
    94  		"SpaceName":    cmd.Config.TargetedSpace().Name,
    95  		"User":         username,
    96  	})
    97  
    98  	warnings, err := cmd.Actor.UpdateApplicationLabelsByApplicationName(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedSpace().GUID, labels)
    99  
   100  	cmd.UI.DisplayWarnings(warnings)
   101  
   102  	return err
   103  }
   104  
   105  func (cmd UnsetLabelCommand) executeDomain(username string, labels map[string]types.NullString) error {
   106  	cmd.UI.DisplayTextWithFlavor("Removing label(s) for domain {{.ResourceName}} as {{.User}}...", map[string]interface{}{
   107  		"ResourceName": cmd.RequiredArgs.ResourceName,
   108  		"User":         username,
   109  	})
   110  
   111  	warnings, err := cmd.Actor.UpdateDomainLabelsByDomainName(cmd.RequiredArgs.ResourceName, labels)
   112  
   113  	cmd.UI.DisplayWarnings(warnings)
   114  
   115  	return err
   116  }
   117  
   118  func (cmd UnsetLabelCommand) executeRoute(username string, labels map[string]types.NullString) error {
   119  	cmd.UI.DisplayTextWithFlavor("Removing label(s) for route {{.ResourceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{
   120  		"ResourceName": cmd.RequiredArgs.ResourceName,
   121  		"OrgName":      cmd.Config.TargetedOrganization().Name,
   122  		"SpaceName":    cmd.Config.TargetedSpace().Name,
   123  		"User":         username,
   124  	})
   125  
   126  	warnings, err := cmd.Actor.UpdateRouteLabels(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedSpace().GUID, labels)
   127  
   128  	cmd.UI.DisplayWarnings(warnings)
   129  
   130  	return err
   131  }
   132  
   133  func (cmd UnsetLabelCommand) executeBuildpack(username string, labels map[string]types.NullString) error {
   134  	err := cmd.SharedActor.CheckTarget(false, false)
   135  	if err != nil {
   136  		return err
   137  	}
   138  
   139  	var template string
   140  	if cmd.BuildpackStack == "" {
   141  		template = "Removing label(s) for buildpack {{.ResourceName}} as {{.User}}..."
   142  	} else {
   143  		template = "Removing label(s) for buildpack {{.ResourceName}} with stack {{.StackName}} as {{.User}}..."
   144  	}
   145  	cmd.UI.DisplayTextWithFlavor(template, map[string]interface{}{
   146  		"ResourceName": cmd.RequiredArgs.ResourceName,
   147  		"StackName":    cmd.BuildpackStack,
   148  		"User":         username,
   149  	})
   150  
   151  	warnings, err := cmd.Actor.UpdateBuildpackLabelsByBuildpackNameAndStack(cmd.RequiredArgs.ResourceName, cmd.BuildpackStack, labels)
   152  
   153  	cmd.UI.DisplayWarnings(warnings)
   154  
   155  	return err
   156  }
   157  
   158  func (cmd UnsetLabelCommand) executeOrg(username string, labels map[string]types.NullString) error {
   159  	err := cmd.SharedActor.CheckTarget(false, false)
   160  	if err != nil {
   161  		return err
   162  	}
   163  
   164  	cmd.UI.DisplayTextWithFlavor("Removing label(s) for org {{.ResourceName}} as {{.User}}...", map[string]interface{}{
   165  		"ResourceName": cmd.RequiredArgs.ResourceName,
   166  		"User":         username,
   167  	})
   168  
   169  	warnings, err := cmd.Actor.UpdateOrganizationLabelsByOrganizationName(cmd.RequiredArgs.ResourceName, labels)
   170  
   171  	cmd.UI.DisplayWarnings(warnings)
   172  
   173  	return err
   174  }
   175  
   176  func (cmd UnsetLabelCommand) executeSpace(username string, labels map[string]types.NullString) error {
   177  	err := cmd.SharedActor.CheckTarget(true, false)
   178  	if err != nil {
   179  		return err
   180  	}
   181  
   182  	cmd.UI.DisplayTextWithFlavor("Removing label(s) for space {{.ResourceName}} in org {{.OrgName}} as {{.User}}...", map[string]interface{}{
   183  		"ResourceName": cmd.RequiredArgs.ResourceName,
   184  		"OrgName":      cmd.Config.TargetedOrganization().Name,
   185  		"User":         username,
   186  	})
   187  
   188  	warnings, err := cmd.Actor.UpdateSpaceLabelsBySpaceName(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedOrganization().GUID, labels)
   189  
   190  	cmd.UI.DisplayWarnings(warnings)
   191  
   192  	return err
   193  }
   194  
   195  func (cmd UnsetLabelCommand) executeStack(username string, labels map[string]types.NullString) error {
   196  	err := cmd.SharedActor.CheckTarget(false, false)
   197  	if err != nil {
   198  		return err
   199  	}
   200  
   201  	cmd.UI.DisplayTextWithFlavor("Removing label(s) for stack {{.ResourceName}} as {{.User}}...", map[string]interface{}{
   202  		"ResourceName": cmd.RequiredArgs.ResourceName,
   203  		"User":         username,
   204  	})
   205  
   206  	warnings, err := cmd.Actor.UpdateStackLabelsByStackName(cmd.RequiredArgs.ResourceName, labels)
   207  
   208  	cmd.UI.DisplayWarnings(warnings)
   209  
   210  	return err
   211  }
   212  
   213  func (cmd UnsetLabelCommand) validateFlags() error {
   214  	resourceTypeString := strings.ToLower(cmd.RequiredArgs.ResourceType)
   215  	if cmd.BuildpackStack != "" && ResourceType(resourceTypeString) != Buildpack {
   216  		return translatableerror.ArgumentCombinationError{
   217  			Args: []string{
   218  				cmd.RequiredArgs.ResourceType, "--stack, -s",
   219  			},
   220  		}
   221  	}
   222  	return nil
   223  }