-
Notifications
You must be signed in to change notification settings - Fork 54
/
droplet.go
98 lines (91 loc) · 3.23 KB
/
droplet.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
package presenter
import (
"net/url"
"code.cloudfoundry.org/korifi/api/repositories"
)
type DropletResponse struct {
GUID string `json:"guid"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
State string `json:"state"`
Error *string `json:"error"`
Lifecycle Lifecycle `json:"lifecycle"`
ExecutionMetadata string `json:"execution_metadata"`
Checksum *ChecksumData `json:"checksum"`
Buildpacks []BuildpackData `json:"buildpacks"`
ProcessTypes map[string]string `json:"process_types"`
Stack string `json:"stack"`
Image *string `json:"image"`
Relationships Relationships `json:"relationships"`
Metadata Metadata `json:"metadata"`
Links map[string]*Link `json:"links"`
}
type ChecksumData struct {
Type string `json:"type"`
Value string `json:"value"`
}
type BuildpackData struct {
Name string `json:"name"`
DetectOutput string `json:"detect_output"`
BuildpackName string `json:"buildpack_name"`
Version string `json:"version"`
}
func ForDroplet(dropletRecord repositories.DropletRecord, baseURL url.URL) DropletResponse {
toReturn := DropletResponse{
GUID: dropletRecord.GUID,
CreatedAt: dropletRecord.CreatedAt,
UpdatedAt: dropletRecord.UpdatedAt,
State: dropletRecord.State,
Lifecycle: Lifecycle{
Type: dropletRecord.Lifecycle.Type,
Data: LifecycleData{
Buildpacks: dropletRecord.Lifecycle.Data.Buildpacks,
Stack: dropletRecord.Lifecycle.Data.Stack,
},
},
ExecutionMetadata: "",
Buildpacks: []BuildpackData{},
ProcessTypes: dropletRecord.ProcessTypes,
Stack: dropletRecord.Stack,
Relationships: Relationships{
"app": Relationship{
Data: &RelationshipData{
GUID: dropletRecord.AppGUID,
},
},
},
Metadata: Metadata{
Labels: map[string]string{},
Annotations: map[string]string{},
},
Links: map[string]*Link{
"self": {
HRef: buildURL(baseURL).appendPath(dropletsBase, dropletRecord.GUID).build(),
},
"package": {
HRef: buildURL(baseURL).appendPath(packagesBase, dropletRecord.PackageGUID).build(),
},
"app": {
HRef: buildURL(baseURL).appendPath(appsBase, dropletRecord.AppGUID).build(),
},
"assign_current_droplet": {
HRef: buildURL(baseURL).appendPath(appsBase, dropletRecord.AppGUID, "relationships/current_droplet").build(),
Method: "PATCH",
},
"download": nil,
},
}
if dropletRecord.DropletErrorMsg != "" {
toReturn.Error = &dropletRecord.DropletErrorMsg
}
return toReturn
}
func ForDropletList(dropletRecordList []repositories.DropletRecord, baseURL, requestURL url.URL) ListResponse {
dropletResponses := make([]interface{}, 0, len(dropletRecordList))
for _, droplet := range dropletRecordList {
dropletResponses = append(dropletResponses, ForDroplet(droplet, baseURL))
}
// https://v3-apidocs.cloudfoundry.org/version/3.100.0/index.html#list-droplets-for-a-package
// https://api.example.org/v3/packages/7b34f1cf-7e73-428a-bb5a-8a17a8058396/droplets
return ForList(dropletResponses, baseURL, requestURL)
}