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