github.com/arunkumar7540/cli@v6.45.0+incompatible/actor/v7pushaction/prepare_space.go (about)

     1  package v7pushaction
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/actor/v7action"
     6  	log "github.com/sirupsen/logrus"
     7  )
     8  
     9  func (actor Actor) PrepareSpace(pushPlans []PushPlan, manifestParser ManifestParser) (<-chan []PushPlan, <-chan Event, <-chan Warnings, <-chan error) {
    10  	pushPlansStream := make(chan []PushPlan)
    11  	eventStream := make(chan Event)
    12  	warningsStream := make(chan Warnings)
    13  	errorStream := make(chan error)
    14  
    15  	go func() {
    16  		log.Debug("starting space preparation go routine")
    17  		defer close(pushPlansStream)
    18  		defer close(eventStream)
    19  		defer close(warningsStream)
    20  		defer close(errorStream)
    21  
    22  		var warnings v7action.Warnings
    23  		var err error
    24  		var successEvent Event
    25  
    26  		if manifestParser.ContainsManifest() {
    27  			var manifest []byte
    28  			manifest, err = getManifest(pushPlans, manifestParser)
    29  			if err != nil {
    30  				errorStream <- err
    31  				return
    32  			}
    33  			eventStream <- ApplyManifest
    34  			warnings, err = actor.V7Actor.SetSpaceManifest(pushPlans[0].SpaceGUID, manifest, pushPlans[0].NoRouteFlag)
    35  			successEvent = ApplyManifestComplete
    36  		} else {
    37  			_, warnings, err = actor.V7Actor.CreateApplicationInSpace(pushPlans[0].Application, pushPlans[0].SpaceGUID)
    38  			if _, ok := err.(actionerror.ApplicationAlreadyExistsError); ok {
    39  				eventStream <- SkippingApplicationCreation
    40  				successEvent = ApplicationAlreadyExists
    41  				err = nil
    42  			} else {
    43  				eventStream <- CreatingApplication
    44  				successEvent = CreatedApplication
    45  			}
    46  		}
    47  
    48  		warningsStream <- Warnings(warnings)
    49  		if err != nil {
    50  			errorStream <- err
    51  			return
    52  		}
    53  		pushPlansStream <- pushPlans
    54  		eventStream <- successEvent
    55  	}()
    56  
    57  	return pushPlansStream, eventStream, warningsStream, errorStream
    58  }
    59  
    60  func getManifest(plans []PushPlan, parser ManifestParser) ([]byte, error) {
    61  	if len(plans) == 1 {
    62  		return parser.RawAppManifest(plans[0].Application.Name)
    63  	}
    64  	return parser.FullRawManifest(), nil
    65  }