-
Notifications
You must be signed in to change notification settings - Fork 0
/
results.go
156 lines (133 loc) · 4.65 KB
/
results.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
package cloudimages
import (
"github.com/dynuc/gophercloud"
"github.com/dynuc/gophercloud/pagination"
)
// Image represents an image found in the OpenStack Image service.
type Image struct {
File string `json:"file"`
Owner string `json:"owner"`
ID string `json:"id"`
Size int64 `json:"size"`
Self string `json:"self"`
Schema string `json:"schema"`
Status string `json:"status"`
Tags []string `json:"tags"`
Visibility string `json:"visibility"`
Name string `json:"name"`
Checksum string `json:"checksum"`
Deleted bool `json:"deleted"`
Protected bool `json:"protected"`
ContainerFormat string `json:"container_format"`
MinRam int `json:"min_ram"`
UpdatedAt string `json:"updated_at"`
OsBit string `json:"__os_bit"`
OsVersion string `json:"__os_version"`
Description string `json:"__description"`
DiskFormat string `json:"disk_format"`
Isregistered string `json:"__isregistered"`
Platform string `json:"__platform"`
OsType string `json:"__os_type"`
MinDisk int `json:"min_disk"`
VirtualEnvType string `json:"virtual_env_type"`
ImageSourceType string `json:"__image_source_type"`
Imagetype string `json:"__imagetype"`
CreatedAt string `json:"created_at"`
VirtualSize int `json:"virtual_size"`
DeletedAt string `json:"deleted_at"`
Originalimagename string `json:"__originalimagename"`
BackupID string `json:"__backup_id"`
Productcode string `json:"__productcode"`
ImageSize string `json:"__image_size"`
DataOrigin string `json:"__data_origin"`
SupportKvm string `json:"__support_kvm"`
SupportXen string `json:"__support_xen"`
SupportDiskintensive string `json:"__support_diskintensive"`
SupportHighperformance string `json:"__support_highperformance"`
SupportXenGpuType string `json:"__support_xen_gpu_type"`
IsConfigInit string `json:"__is_config_init"`
SystemSupportMarket bool `json:"__system_support_market"`
}
//执行创建image异步接口时返回的jobid结构
type Job struct {
// job id of create image
Id string `json:"job_id"`
}
//根据jobId查询job的结构
type JobResult struct {
//任务ID
Id string `json:"job_id"`
//任务类型
Type string `json:"job_type"`
/*任务状态,目前取值如下:
SUCCESS:表示该任务执行已经结束,任务执行成功。
FAIL:表示该任务执行已经结束,任务执行失败。
RUNNING:表示该任务正在执行。
INIT:表示给任务还未执行,正在初始化。*/
Status string `json:"status"`
//任务开始时间
BeginTime string `json:"begin_time"`
//任务结束时间
EndTime string `json:"end_time"`
//错误码
ErrorCode string `json:"error_code"`
//失败原因
FailReason string `json:"fail_reason"`
//任务自定义属性。任务正常时,会返回镜像的ID。
Entities Entity `json:"entities"`
}
type Entity struct {
ImageId string `json:"image_id"`
}
type commonResult struct {
gophercloud.Result
}
type CreateResult struct {
commonResult
}
type JobExecResult struct {
commonResult
}
// ImagePage represents the results of a List request.
type ImagePage struct {
pagination.LinkedPageBase
}
// IsEmpty returns true if an ImagePage contains no Images results.
func (r ImagePage) IsEmpty() (bool, error) {
images, err := ExtractImages(r)
return len(images) == 0, err
}
// NextPageURL uses the response's embedded link reference to navigate to
// the next page of results.
func (r ImagePage) NextPageURL() (string, error) {
var s struct {
Next string `json:"next"`
}
err := r.ExtractInto(&s)
if err != nil {
return "", err
}
if s.Next == "" {
return "", nil
}
return nextPageURL(r.URL.String(), s.Next)
}
// ExtractImages interprets the results of a single page from a List() call,
// producing a slice of Image entities.
func ExtractImages(r pagination.Page) ([]Image, error) {
var s struct {
Images []Image `json:"images"`
}
err := (r.(ImagePage)).ExtractInto(&s)
return s.Images, err
}
func (r commonResult) ExtractJob() (*Job, error) {
var j *Job
err := r.ExtractInto(&j)
return j, err
}
func (r commonResult) ExtractJobResult() (*JobResult, error) {
var jr *JobResult
err := r.ExtractInto(&jr)
return jr, err
}