-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
types.go
192 lines (159 loc) · 6.38 KB
/
types.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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
package api
// from https://github.com/openservicebrokerapi/servicebroker/blob/b33070e07cea53b9540b1d5ab8d1f62ddc556eb5/spec.md
// and https://github.com/openservicebrokerapi/servicebroker/blob/b33070e07cea53b9540b1d5ab8d1f62ddc556eb5/profile.md
// and https://github.com/avade/servicebroker/blob/9165f14ce6c54c3f81fba760cca53bd781febd6f/spec.md
import (
jsschema "github.com/lestrrat/go-jsschema"
"k8s.io/apiserver/pkg/authentication/user"
)
const (
XBrokerAPIVersion = "X-Broker-Api-Version"
APIVersion = "2.11"
XBrokerAPIOriginatingIdentity = "X-Broker-API-Originating-Identity"
OriginatingIdentitySchemeKubernetes = "kubernetes"
)
type Service struct {
Name string `json:"name"`
ID string `json:"id"`
Description string `json:"description"`
Tags []string `json:"tags,omitempty"`
Requires []string `json:"requires,omitempty"`
Bindable bool `json:"bindable"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
DashboardClient *DashboardClient `json:"dashboard_client,omitempty"`
PlanUpdatable bool `json:"plan_updateable,omitempty"`
Plans []Plan `json:"plans"`
}
type DashboardClient struct {
ID string `json:"id"`
Secret string `json:"secret"`
RedirectURI string `json:"redirect_uri"`
}
type Plan struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
Free bool `json:"free,omitempty"`
Bindable bool `json:"bindable,omitempty"`
Schemas Schema `json:"schemas,omitempty"`
}
type Schema struct {
ServiceInstance ServiceInstances `json:"service_instance,omitempty"`
ServiceBinding ServiceBindings `json:"service_binding,omitempty"`
}
type ServiceInstances struct {
Create map[string]*jsschema.Schema `json:"create,omitempty"`
Update map[string]*jsschema.Schema `json:"update,omitempty"`
}
type ServiceBindings struct {
Create map[string]*jsschema.Schema `json:"create,omitempty"`
}
type CatalogResponse struct {
Services []*Service `json:"services"`
}
type LastOperationResponse struct {
State LastOperationState `json:"state"`
Description string `json:"description,omitempty"`
}
type LastOperationState string
const (
LastOperationStateInProgress LastOperationState = "in progress"
LastOperationStateSucceeded LastOperationState = "succeeded"
LastOperationStateFailed LastOperationState = "failed"
)
type ProvisionRequest struct {
ServiceID string `json:"service_id"`
PlanID string `json:"plan_id"`
Context KubernetesContext `json:"context,omitempty"`
OrganizationID string `json:"organization_guid"`
SpaceID string `json:"space_guid"`
Parameters map[string]string `json:"parameters,omitempty"`
}
type KubernetesContext struct {
Platform string `json:"platform"`
Namespace string `json:"namespace"`
}
const ContextPlatformKubernetes = "kubernetes"
type ProvisionResponse struct {
DashboardURL string `json:"dashboard_url,omitempty"`
Operation Operation `json:"operation,omitempty"`
}
type Operation string
type UpdateRequest struct {
Context KubernetesContext `json:"context,omitempty"`
ServiceID string `json:"service_id"`
PlanID string `json:"plan_id,omitempty"`
Parameters map[string]string `json:"parameters,omitempty"`
PreviousValues struct {
ServiceID string `json:"service_id,omitempty"`
PlanID string `json:"plan_id,omitempty"`
OrganizationID string `json:"organization_id,omitempty"`
SpaceID string `json:"space_id,omitempty"`
} `json:"previous_values,omitempty"`
}
type UpdateResponse struct {
Operation Operation `json:"operation,omitempty"`
}
type BindRequest struct {
ServiceID string `json:"service_id"`
PlanID string `json:"plan_id"`
AppGUID string `json:"app_guid,omitempty"`
BindResource struct {
AppGUID string `json:"app_guid,omitempty"`
Route string `json:"route,omitempty"`
} `json:"bind_resource,omitempty"`
Parameters map[string]string `json:"parameters,omitempty"`
}
type BindResponse struct {
Credentials map[string]interface{} `json:"credentials,omitempty"`
SyslogDrainURL string `json:"syslog_drain_url,omitempty"`
RouteServiceURL string `json:"route_service_url,omitempty"`
VolumeMounts []interface{} `json:"volume_mounts,omitempty"`
}
type UnbindResponse struct {
}
type DeprovisionResponse struct {
Operation Operation `json:"operation,omitempty"`
}
type ErrorResponse struct {
Description string `json:"description"`
}
// asyncRequiredResponse type is not formally defined in the spec
type asyncRequiredResponse struct {
Error string `json:"error,omitempty"`
Description string `json:"description"`
}
var AsyncRequired = asyncRequiredResponse{
Error: "AsyncRequired",
Description: "This service plan requires client support for asynchronous service operations.",
}
// from http://docs.cloudfoundry.org/services/catalog-metadata.html#services-metadata-fields
const (
ServiceMetadataDisplayName = "displayName"
ServiceMetadataImageURL = "imageUrl"
ServiceMetadataLongDescription = "longDescription"
ServiceMetadataProviderDisplayName = "providerDisplayName"
ServiceMetadataDocumentationURL = "documentationUrl"
ServiceMetadataSupportURL = "supportUrl"
)
// the types below are not specified in the openservicebrokerapi spec
type Response struct {
Code int
Body interface{}
Err error
}
type Broker interface {
WaitForReady() error
Catalog() *Response
Provision(u user.Info, instanceID string, preq *ProvisionRequest) *Response
Deprovision(u user.Info, instanceID string) *Response
Bind(u user.Info, instanceID string, bindingID string, breq *BindRequest) *Response
Unbind(u user.Info, instanceID string, bindingID string) *Response
LastOperation(u user.Info, instanceID string, operation Operation) *Response
}
const (
OperationProvisioning Operation = "provisioning"
OperationUpdating Operation = "updating"
OperationDeprovisioning Operation = "deprovisioning"
)