-
Notifications
You must be signed in to change notification settings - Fork 927
/
resource.go
149 lines (119 loc) · 4.85 KB
/
resource.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package pushaction
import (
"os"
"code.cloudfoundry.org/cli/actor/sharedaction"
"code.cloudfoundry.org/cli/actor/v2action"
log "github.com/sirupsen/logrus"
)
func (actor Actor) CreateArchive(config ApplicationConfig) (string, error) {
log.Info("creating archive")
var archivePath string
var err error
//change to look at unmatched
if config.Archive {
archivePath, err = actor.SharedActor.ZipArchiveResources(config.Path, actor.ConvertV2ResourcesToSharedResources(config.UnmatchedResources))
} else {
archivePath, err = actor.SharedActor.ZipDirectoryResources(config.Path, actor.ConvertV2ResourcesToSharedResources(config.UnmatchedResources))
}
if err != nil {
log.WithField("path", config.Path).Errorln("archiving resources:", err)
return archivePath, err
}
log.WithField("archivePath", archivePath).Debug("archive created")
return archivePath, nil
}
func (actor Actor) ConvertSharedResourcesToV2Resources(resources []sharedaction.Resource) []v2action.Resource {
newResources := make([]v2action.Resource, 0, len(resources)) // Explicitly done to prevent nils
for _, resource := range resources {
newResources = append(newResources, v2action.Resource(resource))
}
return newResources
}
func (actor Actor) ConvertV2ResourcesToSharedResources(resources []v2action.Resource) []sharedaction.Resource {
newResources := make([]sharedaction.Resource, 0, len(resources)) // Explicitly done to prevent nils
for _, resource := range resources {
newResources = append(newResources, sharedaction.Resource(resource))
}
return newResources
}
func (actor Actor) SetMatchedResources(config ApplicationConfig) (ApplicationConfig, Warnings) {
matched, unmatched, warnings, err := actor.V2Actor.ResourceMatch(config.AllResources)
if err != nil {
log.Error("uploading all resources instead of resource matching")
config.UnmatchedResources = config.AllResources
return config, Warnings(warnings)
}
config.MatchedResources = matched
config.UnmatchedResources = unmatched
return config, Warnings(warnings)
}
func (actor Actor) UploadPackage(config ApplicationConfig) (Warnings, error) {
job, warnings, err := actor.V2Actor.UploadApplicationPackage(config.DesiredApplication.GUID, config.MatchedResources, nil, 0)
if err != nil {
return Warnings(warnings), err
}
pollWarnings, err := actor.V2Actor.PollJob(job)
return append(Warnings(warnings), pollWarnings...), err
}
func (actor Actor) UploadPackageWithArchive(config ApplicationConfig, archivePath string, progressbar ProgressBar, eventStream chan<- Event) (Warnings, error) {
log.Info("uploading archive")
archive, err := os.Open(archivePath)
if err != nil {
log.WithField("archivePath", archivePath).Errorln("opening temp archive:", err)
return nil, err
}
defer archive.Close()
archiveInfo, err := archive.Stat()
if err != nil {
log.WithField("archivePath", archivePath).Errorln("stat temp archive:", err)
return nil, err
}
log.WithFields(log.Fields{
"appGUID": config.DesiredApplication.GUID,
"archiveSize": archiveInfo.Size(),
}).Debug("uploading app bits")
eventStream <- UploadingApplicationWithArchive
reader := progressbar.NewProgressBarWrapper(archive, archiveInfo.Size())
var allWarnings Warnings
// change to look at matched resoruces
job, warnings, err := actor.V2Actor.UploadApplicationPackage(config.DesiredApplication.GUID, config.MatchedResources, reader, archiveInfo.Size())
allWarnings = append(allWarnings, Warnings(warnings)...)
if err != nil {
log.WithField("archivePath", archivePath).Errorln("streaming archive:", err)
return allWarnings, err
}
eventStream <- UploadWithArchiveComplete
warnings, err = actor.V2Actor.PollJob(job)
allWarnings = append(allWarnings, Warnings(warnings)...)
return allWarnings, err
}
func (actor Actor) UploadDroplet(config ApplicationConfig, dropletPath string, progressbar ProgressBar, eventStream chan<- Event) (Warnings, error) {
log.Info("uploading droplet")
droplet, err := os.Open(dropletPath)
if err != nil {
log.WithField("dropletPath", dropletPath).WithError(err).Errorln("opening droplet")
return nil, err
}
defer droplet.Close()
dropletInfo, err := droplet.Stat()
if err != nil {
log.WithField("dropletPath", dropletPath).WithError(err).Errorln("stat droplet")
return nil, err
}
log.WithFields(log.Fields{
"app_guid": config.DesiredApplication.GUID,
"droplet_size": dropletInfo.Size(),
}).Debug("uploading droplet")
eventStream <- UploadingDroplet
reader := progressbar.NewProgressBarWrapper(droplet, dropletInfo.Size())
var allWarnings Warnings
job, warnings, err := actor.V2Actor.UploadDroplet(config.DesiredApplication.GUID, reader, dropletInfo.Size())
allWarnings = append(allWarnings, warnings...)
if err != nil {
return allWarnings, err
}
eventStream <- UploadDropletComplete
pollWarnings, err := actor.V2Actor.PollJob(job)
allWarnings = append(allWarnings, pollWarnings...)
return allWarnings, err
}