github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/db/v1/instances/results.go (about) 1 package instances 2 3 import ( 4 "encoding/json" 5 "time" 6 7 "github.com/huaweicloud/golangsdk" 8 "github.com/huaweicloud/golangsdk/openstack/db/v1/datastores" 9 "github.com/huaweicloud/golangsdk/openstack/db/v1/users" 10 "github.com/huaweicloud/golangsdk/pagination" 11 ) 12 13 // Volume represents information about an attached volume for a database instance. 14 type Volume struct { 15 // The size in GB of the volume 16 Size int 17 18 Used float64 19 } 20 21 // Flavor represents (virtual) hardware configurations for server resources in a region. 22 type Flavor struct { 23 // The flavor's unique identifier. 24 ID string 25 // Links to access the flavor. 26 Links []golangsdk.Link 27 } 28 29 // Fault describes the fault reason in more detail when a database instance has errored 30 type Fault struct { 31 // Indicates the time when the fault occured 32 Created time.Time `json:"-"` 33 34 // A message describing the fault reason 35 Message string 36 37 // More details about the fault, for example a stack trace. Only filled 38 // in for admin users. 39 Details string 40 } 41 42 func (r *Fault) UnmarshalJSON(b []byte) error { 43 type tmp Fault 44 var s struct { 45 tmp 46 Created golangsdk.JSONRFC3339NoZ `json:"created"` 47 } 48 err := json.Unmarshal(b, &s) 49 if err != nil { 50 return err 51 } 52 *r = Fault(s.tmp) 53 54 r.Created = time.Time(s.Created) 55 56 return nil 57 } 58 59 // Instance represents a remote MySQL instance. 60 type Instance struct { 61 // Indicates the datetime that the instance was created 62 Created time.Time `json:"-"` 63 64 // Indicates the most recent datetime that the instance was updated. 65 Updated time.Time `json:"-"` 66 67 // Indicates the hardware flavor the instance uses. 68 Flavor Flavor 69 70 // A DNS-resolvable hostname associated with the database instance (rather 71 // than an IPv4 address). Since the hostname always resolves to the correct 72 // IP address of the database instance, this relieves the user from the task 73 // of maintaining the mapping. Note that although the IP address may likely 74 // change on resizing, migrating, and so forth, the hostname always resolves 75 // to the correct database instance. 76 Hostname string 77 78 // The IP addresses associated with the database instance 79 // Is empty if the instance has a hostname 80 IP []string 81 82 // Indicates the unique identifier for the instance resource. 83 ID string 84 85 // Exposes various links that reference the instance resource. 86 Links []golangsdk.Link 87 88 // The human-readable name of the instance. 89 Name string 90 91 // The build status of the instance. 92 Status string 93 94 // Fault information (only available when the instance has errored) 95 Fault *Fault 96 97 // Information about the attached volume of the instance. 98 Volume Volume 99 100 // Indicates how the instance stores data. 101 Datastore datastores.DatastorePartial 102 } 103 104 func (r *Instance) UnmarshalJSON(b []byte) error { 105 type tmp Instance 106 var s struct { 107 tmp 108 Created golangsdk.JSONRFC3339NoZ `json:"created"` 109 Updated golangsdk.JSONRFC3339NoZ `json:"updated"` 110 } 111 err := json.Unmarshal(b, &s) 112 if err != nil { 113 return err 114 } 115 *r = Instance(s.tmp) 116 117 r.Created = time.Time(s.Created) 118 r.Updated = time.Time(s.Updated) 119 120 return nil 121 } 122 123 type commonResult struct { 124 golangsdk.Result 125 } 126 127 // CreateResult represents the result of a Create operation. 128 type CreateResult struct { 129 commonResult 130 } 131 132 // GetResult represents the result of a Get operation. 133 type GetResult struct { 134 commonResult 135 } 136 137 // DeleteResult represents the result of a Delete operation. 138 type DeleteResult struct { 139 golangsdk.ErrResult 140 } 141 142 // ConfigurationResult represents the result of a AttachConfigurationGroup/DetachConfigurationGroup operation. 143 type ConfigurationResult struct { 144 golangsdk.ErrResult 145 } 146 147 // Extract will extract an Instance from various result structs. 148 func (r commonResult) Extract() (*Instance, error) { 149 var s struct { 150 Instance *Instance `json:"instance"` 151 } 152 err := r.ExtractInto(&s) 153 return s.Instance, err 154 } 155 156 // InstancePage represents a single page of a paginated instance collection. 157 type InstancePage struct { 158 pagination.LinkedPageBase 159 } 160 161 // IsEmpty checks to see whether the collection is empty. 162 func (page InstancePage) IsEmpty() (bool, error) { 163 instances, err := ExtractInstances(page) 164 return len(instances) == 0, err 165 } 166 167 // NextPageURL will retrieve the next page URL. 168 func (page InstancePage) NextPageURL() (string, error) { 169 var s struct { 170 Links []golangsdk.Link `json:"instances_links"` 171 } 172 err := page.ExtractInto(&s) 173 if err != nil { 174 return "", err 175 } 176 return golangsdk.ExtractNextURL(s.Links) 177 } 178 179 // ExtractInstances will convert a generic pagination struct into a more 180 // relevant slice of Instance structs. 181 func ExtractInstances(r pagination.Page) ([]Instance, error) { 182 var s struct { 183 Instances []Instance `json:"instances"` 184 } 185 err := (r.(InstancePage)).ExtractInto(&s) 186 return s.Instances, err 187 } 188 189 // EnableRootUserResult represents the result of an operation to enable the root user. 190 type EnableRootUserResult struct { 191 golangsdk.Result 192 } 193 194 // Extract will extract root user information from a UserRootResult. 195 func (r EnableRootUserResult) Extract() (*users.User, error) { 196 var s struct { 197 User *users.User `json:"user"` 198 } 199 err := r.ExtractInto(&s) 200 return s.User, err 201 } 202 203 // ActionResult represents the result of action requests, such as: restarting 204 // an instance service, resizing its memory allocation, and resizing its 205 // attached volume size. 206 type ActionResult struct { 207 golangsdk.ErrResult 208 } 209 210 // IsRootEnabledResult is the result of a call to IsRootEnabled. To see if 211 // root is enabled, call the type's Extract method. 212 type IsRootEnabledResult struct { 213 golangsdk.Result 214 } 215 216 // Extract is used to extract the data from a IsRootEnabledResult. 217 func (r IsRootEnabledResult) Extract() (bool, error) { 218 return r.Body.(map[string]interface{})["rootEnabled"] == true, r.Err 219 }