github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/securitygroup/unbind_staging_security_group.go (about)

     1  package securitygroup
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/cloudfoundry/cli/cf/api/security_groups"
     7  	"github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging"
     8  	"github.com/cloudfoundry/cli/cf/command"
     9  	"github.com/cloudfoundry/cli/cf/command_metadata"
    10  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
    11  	"github.com/cloudfoundry/cli/cf/errors"
    12  	. "github.com/cloudfoundry/cli/cf/i18n"
    13  	"github.com/cloudfoundry/cli/cf/requirements"
    14  	"github.com/cloudfoundry/cli/cf/terminal"
    15  	"github.com/codegangsta/cli"
    16  )
    17  
    18  type unbindFromStagingGroup struct {
    19  	ui                terminal.UI
    20  	configRepo        core_config.Reader
    21  	securityGroupRepo security_groups.SecurityGroupRepo
    22  	stagingGroupRepo  staging.StagingSecurityGroupsRepo
    23  }
    24  
    25  func NewUnbindFromStagingGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo, stagingGroupRepo staging.StagingSecurityGroupsRepo) command.Command {
    26  	return &unbindFromStagingGroup{
    27  		ui:                ui,
    28  		configRepo:        configRepo,
    29  		securityGroupRepo: securityGroupRepo,
    30  		stagingGroupRepo:  stagingGroupRepo,
    31  	}
    32  }
    33  
    34  func (cmd *unbindFromStagingGroup) Metadata() command_metadata.CommandMetadata {
    35  	primaryUsage := T("CF_NAME unbind-staging-security-group SECURITY_GROUP")
    36  	tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.")
    37  	return command_metadata.CommandMetadata{
    38  		Name:        "unbind-staging-security-group",
    39  		Description: T("Unbind a security group from the set of security groups for staging applications"),
    40  		Usage:       strings.Join([]string{primaryUsage, tipUsage}, "\n\n"),
    41  	}
    42  }
    43  
    44  func (cmd *unbindFromStagingGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) {
    45  	if len(context.Args()) != 1 {
    46  		cmd.ui.FailWithUsage(context)
    47  	}
    48  
    49  	return []requirements.Requirement{
    50  		requirementsFactory.NewLoginRequirement(),
    51  	}, nil
    52  }
    53  
    54  func (cmd *unbindFromStagingGroup) Run(context *cli.Context) {
    55  	name := context.Args()[0]
    56  
    57  	cmd.ui.Say(T("Unbinding security group {{.security_group}} from defaults for staging as {{.username}}",
    58  		map[string]interface{}{
    59  			"security_group": terminal.EntityNameColor(name),
    60  			"username":       terminal.EntityNameColor(cmd.configRepo.Username()),
    61  		}))
    62  
    63  	securityGroup, err := cmd.securityGroupRepo.Read(name)
    64  	switch (err).(type) {
    65  	case nil:
    66  	case *errors.ModelNotFoundError:
    67  		cmd.ui.Ok()
    68  		cmd.ui.Warn(T("Security group {{.security_group}} {{.error_message}}",
    69  			map[string]interface{}{
    70  				"security_group": terminal.EntityNameColor(name),
    71  				"error_message":  terminal.WarningColor(T("does not exist.")),
    72  			}))
    73  		return
    74  	default:
    75  		cmd.ui.Failed(err.Error())
    76  	}
    77  
    78  	err = cmd.stagingGroupRepo.UnbindFromStagingSet(securityGroup.Guid)
    79  	if err != nil {
    80  		cmd.ui.Failed(err.Error())
    81  	}
    82  
    83  	cmd.ui.Ok()
    84  	cmd.ui.Say("\n\n")
    85  	cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted."))
    86  }