github.com/Thanhphan1147/cloudfoundry-cli@v7.1.0+incompatible/actor/v7pushaction/create_push_plans.go (about)

     1  package v7pushaction
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/v7action"
     5  	"code.cloudfoundry.org/cli/resources"
     6  	"code.cloudfoundry.org/cli/util/manifestparser"
     7  )
     8  
     9  // CreatePushPlans returns a set of PushPlan objects based off the inputs
    10  // provided. It's assumed that all flag and argument and manifest combinations
    11  // have been validated prior to calling this function.
    12  func (actor Actor) CreatePushPlans(
    13  	spaceGUID string,
    14  	orgGUID string,
    15  	manifest manifestparser.Manifest,
    16  	overrides FlagOverrides,
    17  ) ([]PushPlan, v7action.Warnings, error) {
    18  	var pushPlans []PushPlan
    19  
    20  	apps, warnings, err := actor.V7Actor.GetApplicationsByNamesAndSpace(manifest.AppNames(), spaceGUID)
    21  	if err != nil {
    22  		return nil, warnings, err
    23  	}
    24  	nameToApp := actor.generateAppNameToApplicationMapping(apps)
    25  
    26  	for _, manifestApplication := range manifest.Applications {
    27  		plan := PushPlan{
    28  			OrgGUID:     orgGUID,
    29  			SpaceGUID:   spaceGUID,
    30  			Application: nameToApp[manifestApplication.Name],
    31  			BitsPath:    manifestApplication.Path,
    32  		}
    33  
    34  		if manifestApplication.Docker != nil {
    35  			plan.DockerImageCredentials = v7action.DockerImageCredentials{
    36  				Path:     manifestApplication.Docker.Image,
    37  				Username: manifestApplication.Docker.Username,
    38  				Password: overrides.DockerPassword,
    39  			}
    40  		}
    41  
    42  		// List of PreparePushPlanSequence is defined in NewActor
    43  		for _, updatePlan := range actor.PreparePushPlanSequence {
    44  			var err error
    45  			plan, err = updatePlan(plan, overrides)
    46  			if err != nil {
    47  				return nil, warnings, err
    48  			}
    49  		}
    50  
    51  		pushPlans = append(pushPlans, plan)
    52  	}
    53  
    54  	return pushPlans, warnings, nil
    55  }
    56  
    57  func (actor Actor) generateAppNameToApplicationMapping(applications []resources.Application) map[string]resources.Application {
    58  	nameToApp := make(map[string]resources.Application, len(applications))
    59  	for _, app := range applications {
    60  		nameToApp[app.Name] = app
    61  	}
    62  	return nameToApp
    63  }