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

     1  package application
     2  
     3  import (
     4  	"github.com/cloudfoundry/cli/cf"
     5  	"github.com/cloudfoundry/cli/cf/api/applications"
     6  	"github.com/cloudfoundry/cli/cf/command_metadata"
     7  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     8  	. "github.com/cloudfoundry/cli/cf/i18n"
     9  	"github.com/cloudfoundry/cli/cf/models"
    10  	"github.com/cloudfoundry/cli/cf/requirements"
    11  	"github.com/cloudfoundry/cli/cf/terminal"
    12  	"github.com/codegangsta/cli"
    13  )
    14  
    15  type UnsetEnv struct {
    16  	ui      terminal.UI
    17  	config  core_config.Reader
    18  	appRepo applications.ApplicationRepository
    19  	appReq  requirements.ApplicationRequirement
    20  }
    21  
    22  func NewUnsetEnv(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) (cmd *UnsetEnv) {
    23  	cmd = new(UnsetEnv)
    24  	cmd.ui = ui
    25  	cmd.config = config
    26  	cmd.appRepo = appRepo
    27  	return
    28  }
    29  
    30  func (cmd *UnsetEnv) Metadata() command_metadata.CommandMetadata {
    31  	return command_metadata.CommandMetadata{
    32  		Name:        "unset-env",
    33  		Description: T("Remove an env variable"),
    34  		Usage:       T("CF_NAME unset-env APP_NAME ENV_VAR_NAME"),
    35  	}
    36  }
    37  
    38  func (cmd *UnsetEnv) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) {
    39  	if len(c.Args()) != 2 {
    40  		cmd.ui.FailWithUsage(c)
    41  	}
    42  
    43  	cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0])
    44  	reqs = []requirements.Requirement{
    45  		requirementsFactory.NewLoginRequirement(),
    46  		requirementsFactory.NewTargetedSpaceRequirement(),
    47  		cmd.appReq,
    48  	}
    49  	return
    50  }
    51  
    52  func (cmd *UnsetEnv) Run(c *cli.Context) {
    53  	varName := c.Args()[1]
    54  	app := cmd.appReq.GetApplication()
    55  
    56  	cmd.ui.Say(T("Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...",
    57  		map[string]interface{}{
    58  			"VarName":     terminal.EntityNameColor(varName),
    59  			"AppName":     terminal.EntityNameColor(app.Name),
    60  			"OrgName":     terminal.EntityNameColor(cmd.config.OrganizationFields().Name),
    61  			"SpaceName":   terminal.EntityNameColor(cmd.config.SpaceFields().Name),
    62  			"CurrentUser": terminal.EntityNameColor(cmd.config.Username())}))
    63  
    64  	envParams := app.EnvironmentVars
    65  
    66  	if _, ok := envParams[varName]; !ok {
    67  		cmd.ui.Ok()
    68  		cmd.ui.Warn(T("Env variable {{.VarName}} was not set.", map[string]interface{}{"VarName": varName}))
    69  		return
    70  	}
    71  
    72  	delete(envParams, varName)
    73  
    74  	_, apiErr := cmd.appRepo.Update(app.Guid, models.AppParams{EnvironmentVars: &envParams})
    75  	if apiErr != nil {
    76  		cmd.ui.Failed(apiErr.Error())
    77  		return
    78  	}
    79  
    80  	cmd.ui.Ok()
    81  	cmd.ui.Say(T("TIP: Use '{{.Command}}' to ensure your env variable changes take effect",
    82  		map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " restage")}))
    83  }