github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/application/set_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 SetEnv struct {
    16  	ui      terminal.UI
    17  	config  core_config.Reader
    18  	appRepo applications.ApplicationRepository
    19  	appReq  requirements.ApplicationRequirement
    20  }
    21  
    22  func NewSetEnv(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) *SetEnv {
    23  	return &SetEnv{
    24  		ui:      ui,
    25  		config:  config,
    26  		appRepo: appRepo,
    27  	}
    28  }
    29  
    30  func (cmd *SetEnv) Metadata() command_metadata.CommandMetadata {
    31  	return command_metadata.CommandMetadata{
    32  		Name:            "set-env",
    33  		ShortName:       "se",
    34  		Description:     T("Set an env variable for an app"),
    35  		Usage:           T("CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE"),
    36  		SkipFlagParsing: true,
    37  	}
    38  }
    39  
    40  func (cmd *SetEnv) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) {
    41  	if len(c.Args()) != 3 {
    42  		cmd.ui.FailWithUsage(c)
    43  	}
    44  
    45  	cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0])
    46  	reqs = []requirements.Requirement{
    47  		requirementsFactory.NewLoginRequirement(),
    48  		requirementsFactory.NewTargetedSpaceRequirement(),
    49  		cmd.appReq,
    50  	}
    51  	return
    52  }
    53  
    54  func (cmd *SetEnv) Run(c *cli.Context) {
    55  	varName := c.Args()[1]
    56  	varValue := c.Args()[2]
    57  	app := cmd.appReq.GetApplication()
    58  
    59  	cmd.ui.Say(T("Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...",
    60  		map[string]interface{}{
    61  			"VarName":     terminal.EntityNameColor(varName),
    62  			"VarValue":    terminal.EntityNameColor(varValue),
    63  			"AppName":     terminal.EntityNameColor(app.Name),
    64  			"OrgName":     terminal.EntityNameColor(cmd.config.OrganizationFields().Name),
    65  			"SpaceName":   terminal.EntityNameColor(cmd.config.SpaceFields().Name),
    66  			"CurrentUser": terminal.EntityNameColor(cmd.config.Username())}))
    67  
    68  	if len(app.EnvironmentVars) == 0 {
    69  		app.EnvironmentVars = map[string]interface{}{}
    70  	}
    71  	envParams := app.EnvironmentVars
    72  	envParams[varName] = varValue
    73  
    74  	_, apiErr := cmd.appRepo.Update(app.Guid, models.AppParams{EnvironmentVars: &envParams})
    75  
    76  	if apiErr != nil {
    77  		cmd.ui.Failed(apiErr.Error())
    78  		return
    79  	}
    80  
    81  	cmd.ui.Ok()
    82  	cmd.ui.Say(T("TIP: Use '{{.Command}}' to ensure your env variable changes take effect",
    83  		map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " restage")}))
    84  }