-
Notifications
You must be signed in to change notification settings - Fork 327
/
types_model.go
372 lines (280 loc) · 13.1 KB
/
types_model.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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
package types
import "strconv"
// StorageType is the type of storage a driver provides.
type StorageType string
const (
// Block is block storage.
Block StorageType = "block"
// NAS is network attached storage.
NAS StorageType = "nas"
// Object is object-backed storage.
Object StorageType = "object"
)
// VolumeMap is the response for listing volumes for a single service.
type VolumeMap map[string]*Volume
// SnapshotMap is the response for listing snapshots for a single service.
type SnapshotMap map[string]*Snapshot
// ServiceVolumeMap is the response for listing volumes for multiple services.
type ServiceVolumeMap map[string]VolumeMap
// ServiceSnapshotMap is the response for listing snapshots for multiple
// services.
type ServiceSnapshotMap map[string]SnapshotMap
// ServicesMap is the response when getting one to many ServiceInfos.
type ServicesMap map[string]*ServiceInfo
// Instance provides information about a storage object.
type Instance struct {
// The ID of the instance to which the object is connected.
InstanceID *InstanceID `json:"instanceID" yaml:"instanceID,omitempty"`
// The name of the instance.
Name string `json:"name,omitempty" yaml:",omitempty"`
// The name of the provider that owns the object.
ProviderName string `json:"providerName" yaml:"providerName,omitempty"`
// The region from which the object originates.
Region string `json:"region,omitempty" yaml:",omitempty"`
// Fields are additional properties that can be defined for this type.
Fields map[string]string `json:"fields,omitempty" yaml:",omitempty"`
}
// MountInfo reveals information about a particular mounted filesystem. This
// struct is populated from the content in the /proc/<pid>/mountinfo file.
type MountInfo struct {
// ID is a unique identifier of the mount (may be reused after umount).
ID int `json:"id,omitempty" yaml:"id,omitempty"`
// Parent indicates the ID of the mount parent (or of self for the top of
// the mount tree).
Parent int `json:"parent,omitempty" yaml:"parent,omitempty"`
// Major indicates one half of the device ID which identifies the device
// class.
Major int `json:"major,omitempty" yaml:"major,omitempty"`
// Minor indicates one half of the device ID which identifies a specific
// instance of device.
Minor int `json:"minor,omitempty" yaml:"minor,omitempty"`
// Root of the mount within the filesystem.
Root string `json:"root,omitempty" yaml:"root,omitempty"`
// MountPoint indicates the mount point relative to the process's root.
MountPoint string `json:"mountPoint,omitempty" yaml:"mountPoint,omitempty"`
// Opts represents mount-specific options.
Opts string `json:"opts,omitempty" yaml:"opts,omitempty"`
// Optional represents optional fields.
Optional string `json:"optional,omitempty" yaml:"optional,omitempty"`
// FSType indicates the type of filesystem, such as EXT3.
FSType string `json:"fsType,omitempty" yaml:"fsType,omitempty"`
// Source indicates filesystem specific information or "none".
Source string `json:"source,omitempty" yaml:"source,omitempty"`
// VFSOpts represents per super block options.
VFSOpts string `json:"vfsOpts,omitempty" yaml:"vfsOpts,omitempty"`
// Fields are additional properties that can be defined for this type.
Fields map[string]string `json:"fields,omitempty" yaml:"fields,omitempty"`
}
// Snapshot provides information about a storage-layer snapshot.
type Snapshot struct {
// A description of the snapshot.
Description string `json:"description,omitempty" yaml:",omitempty"`
// The name of the snapshot.
Name string `json:"name,omitempty" yaml:",omitempty"`
// A flag indicating whether or not the snapshot is encrypted.
Encrypted bool `json:"encrypted,omitempty" yaml:"encrypted,omitempty"`
// The snapshot's ID.
ID string `json:"id" yaml:"id"`
// The time (epoch) at which the request to create the snapshot was submitted.
StartTime int64 `json:"startTime,omitempty" yaml:"startTime,omitempty"`
// The status of the snapshot.
Status string `json:"status,omitempty" yaml:",omitempty"`
// The ID of the volume to which the snapshot belongs.
VolumeID string `json:"volumeID,omitempty" yaml:"volumeID,omitempty"`
// The size of the volume to which the snapshot belongs.
VolumeSize int64 `json:"volumeSize,omitempty" yaml:"volumeSize,omitempty"`
// Fields are additional properties that can be defined for this type.
Fields map[string]string `json:"fields,omitempty" yaml:",omitempty"`
}
// VolumeAttachmentStates is the volume's attachment state possibilities.
type VolumeAttachmentStates int
const (
// VolumeAttachmentStateUnknown indicates the driver has set the state,
// but it is explicitly unknown and should not be inferred from the list of
// attachments alone.
VolumeAttachmentStateUnknown VolumeAttachmentStates = 1
// VolumeAttached indicates the volume is attached to the instance
// specified in the API call that requested the volume information.
VolumeAttached VolumeAttachmentStates = 2
// VolumeAvailable indicates the volume is not attached to any instance.
VolumeAvailable VolumeAttachmentStates = 3
// VolumeUnavailable indicates the volume is attached to some instance
// other than the one specified in the API call that requested the
// volume information.
VolumeUnavailable VolumeAttachmentStates = 4
)
// String returns the string represntation of a VolumeAttachmentStates value.
func (s VolumeAttachmentStates) String() string {
switch s {
case 0:
return "0"
case VolumeAttachmentStateUnknown:
return "unknown"
case VolumeAttached:
return "attached"
case VolumeAvailable:
return "available"
case VolumeUnavailable:
return "unavailable"
}
return strconv.Itoa(int(s))
}
// Volume provides information about a storage volume.
type Volume struct {
// Attachments is information about the instances to which the volume
// is attached.
Attachments []*VolumeAttachment `json:"attachments,omitempty" yaml:"attachments,omitempty"`
// AttachmentState indicates whether or not a volume is attached. A client
// can surmise the same state stored in this field by inspecting a volume's
// Attachments field, but this field provides the server a means of doing
// that inspection and storing the result so the client does not have to do
// so.
AttachmentState VolumeAttachmentStates `json:"attachmentState,omitempty" yaml:"attachmentState,omitempty"`
// The availability zone for which the volume is available.
AvailabilityZone string `json:"availabilityZone,omitempty" yaml:"availabilityZone,omitempty"`
// A flag indicating whether or not the volume is encrypted.
Encrypted bool `json:"encrypted,omitempty" yaml:"encrypted,omitempty"`
// The volume IOPs.
IOPS int64 `json:"iops,omitempty" yaml:"iops,omitempty"`
// The name of the volume.
Name string `json:"name" yaml:"name,omitempty"`
// NetworkName is the name the device is known by in order to discover
// locally.
NetworkName string `json:"networkName,omitempty" yaml:"networkName,omitempty"`
// The size of the volume.
Size int64 `json:"size,omitempty" yaml:"size,omitempty"`
// The volume status.
Status string `json:"status,omitempty" yaml:"status,omitempty"`
// ID is a piece of information that uniquely identifies the volume on
// the storage platform to which the volume belongs. A volume ID is not
// guaranteed to be unique across multiple, configured services.
ID string `json:"id" yaml:"id"`
// The volume type.
Type string `json:"type" yaml:"type"`
// Fields are additional properties that can be defined for this type.
Fields map[string]string `json:"fields,omitempty" yaml:"fields,omitempty"`
}
// VolumeName returns the volume's name.
func (v *Volume) VolumeName() string {
return v.Name
}
// MountPoint returns the volume's mount point, if one is present.
func (v *Volume) MountPoint() string {
if len(v.Attachments) == 0 {
return ""
}
return v.Attachments[0].MountPoint
}
// VolumeAttachment provides information about an object attached to a
// storage volume.
type VolumeAttachment struct {
// The name of the device on which the volume to which the object is
// attached is mounted.
DeviceName string `json:"deviceName" yaml:"deviceName,omitempty"`
// MountPoint is the mount point for the volume. This field is set when a
// volume is retrieved via an integration driver.
MountPoint string `json:"mountPoint,omitempty" yaml:"mountPoint,omitempty"`
// The ID of the instance on which the volume to which the attachment
// belongs is mounted.
InstanceID *InstanceID `json:"instanceID" yaml:"instanceID,omitempty"`
// The status of the attachment.
Status string `json:"status" yaml:",omitempty"`
// The ID of the volume to which the attachment belongs.
VolumeID string `json:"volumeID" yaml:"volumeID,omitempty"`
// Fields are additional properties that can be defined for this type.
Fields map[string]string `json:"fields,omitempty" yaml:",omitempty"`
}
// VolumeDevice provides information about a volume's backing storage
// device. This might be a block device, NAS device, object device, etc.
type VolumeDevice struct {
// The name of the device.
Name string `json:"name"`
// The ID of the instance to which the device is connected.
InstanceID *InstanceID `json:"instanceID,omitempty" yaml:"instanceID,omitempty"`
// The name of the network on which the device resides.
NetworkName string `json:"networkName,omitempty" yaml:"networkName,omitempty"`
// The name of the provider that owns the block device.
ProviderName string `json:"providerName,omitempty" yaml:"providerName,omitempty"`
// The region from which the device originates.
Region string `json:"region,omitempty" yaml:",omitempty"`
// The device status.
Status string `json:"status"`
// The ID of the volume for which the device is mounted.
VolumeID string `json:"volumeID" yaml:"volumeID"`
// Fields are additional properties that can be defined for this type.
Fields map[string]string `json:"fields,omitempty" yaml:",omitempty"`
}
// ServiceInfo is information about a service.
type ServiceInfo struct {
// Name is the service's name.
Name string `json:"name"`
// Instance is the service's instance.
Instance *Instance `json:"instance,omitempty" yaml:",omitempty"`
// Driver is the name of the driver registered for the service.
Driver *DriverInfo `json:"driver"`
}
// DriverInfo is information about a driver.
type DriverInfo struct {
// Name is the driver's name.
Name string `json:"name"`
// Type is the type of storage the driver provides: block, nas, object.
Type StorageType `json:"type"`
// NextDevice is the next available device information for the service.
NextDevice *NextDeviceInfo `json:"nextDevice,omitempty" yaml:"nextDevice,omitempty"`
}
// NextDeviceInfo assists the libStorage client in determining the
// next available device name by providing the driver's device prefix and
// optional pattern.
//
// For example, the Amazon Web Services (AWS) device prefix is "xvd" and its
// pattern is "[a-z]". These two values would be used to determine on an EC2
// instance where "/dev/xvda" and "/dev/xvdb" are in use that the next
// available device name is "/dev/xvdc".
//
// If the Ignore field is set to true then the client logic does not invoke the
// GetNextAvailableDeviceName function prior to submitting an AttachVolume
// request to the server.
type NextDeviceInfo struct {
// Ignore is a flag that indicates whether the client logic should invoke
// the GetNextAvailableDeviceName function prior to submitting an
// AttachVolume request to the server.
Ignore bool `json:"ignore"`
// Prefix is the first part of a device path's value after the "/dev/"
// porition. For example, the prefix in "/dev/xvda" is "xvd".
Prefix string `json:"prefix"`
// Pattern is the regex to match the part of a device path after the prefix.
Pattern string `json:"pattern"`
}
// TaskState is the possible state of a task.
type TaskState string
const (
// TaskStateQueued is the state for a task that has been enqueued but not
// yet started.
TaskStateQueued TaskState = "queued"
// TaskStateRunning is the state for a task that is running.
TaskStateRunning = "running"
// TaskStateSuccess is the state for a task that has completed successfully.
TaskStateSuccess = "success"
// TaskStateError is the state for a task that has completed with an error.
TaskStateError = "error"
)
// Task is a representation of an asynchronous, long-running task.
type Task struct {
// ID is the task's ID.
ID int `json:"id" yaml:"id"`
// User is the name of the user that created the task.
User string `json:"user,omitempty" yaml:",omitempty"`
// CompleteTime is the time stamp when the task was completed
// (whether success or failure).
CompleteTime int64 `json:"completeTime,omitempty" yaml:"completeTime,omitempty"`
// QueueTime is the time stamp when the task was created.
QueueTime int64 `json:"queueTime" yaml:"queueTime"`
// StartTime is the time stamp when the task started running.
StartTime int64 `json:"startTime,omitempty" yaml:"startTime,omitempty"`
// State is the current state of the task.
State TaskState `json:"state"`
// Result holds the result of the task.
Result interface{} `json:"result,omitempty" yaml:",omitempty"`
// Error contains the error if the task was unsuccessful.
Error error `json:"error,omitempty" yaml:",omitempty"`
}