github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/bms/v1/baremetalservers/results.go (about) 1 package baremetalservers 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 "github.com/chnsz/golangsdk/pagination" 6 ) 7 8 type cloudServerResult struct { 9 golangsdk.Result 10 } 11 12 type Flavor struct { 13 ID string `json:"id"` 14 Name string `json:"name"` 15 Disk string `json:"disk"` 16 Vcpus string `json:"vcpus"` 17 RAM string `json:"ram"` 18 } 19 20 // Image defines a image struct in details of a server. 21 type Image struct { 22 ID string `json:"id"` 23 Name string `json:"name"` 24 Type string `json:"__os_type"` 25 } 26 27 type SysTags struct { 28 Key string `json:"key"` 29 Value string `json:"value"` 30 } 31 32 type OsSchedulerHints struct { 33 DecBaremetal []string `json:"dec_baremetal"` 34 } 35 36 // Metadata is only used for method that requests details on a single server, by ID. 37 // Because metadata struct must be a map. 38 type Metadata struct { 39 ChargingMode string `json:"charging_mode"` 40 OrderID string `json:"metering.order_id"` 41 ProductID string `json:"metering.product_id"` 42 VpcID string `json:"vpc_id"` 43 ImageID string `json:"metering.image_id"` 44 Imagetype string `json:"metering.imagetype"` 45 PortList string `json:"baremetalPortIDList"` 46 Resourcespeccode string `json:"metering.resourcespeccode"` 47 ResourceType string `json:"metering.resourcetype"` 48 ImageName string `json:"image_name"` 49 OpSvcUserId string `json:"op_svc_userid"` 50 OsType string `json:"os_type"` 51 BmsSupportEvs string `json:"__bms_support_evs"` 52 OsBit string `json:"os_bit"` 53 AgencyName string `json:"agency_name"` 54 } 55 56 type Address struct { 57 Version string `json:"version"` 58 Addr string `json:"addr"` 59 MacAddr string `json:"OS-EXT-IPS-MAC:mac_addr"` 60 PortID string `json:"OS-EXT-IPS:port_id"` 61 Type string `json:"OS-EXT-IPS:type"` 62 } 63 64 type Fault struct { 65 Message string `json:"message"` 66 Code int `json:"code"` 67 Details string `json:"details"` 68 Created string `json:"created"` 69 } 70 type VolumeAttached struct { 71 ID string `json:"id"` 72 DeleteOnTermination string `json:"delete_on_termination"` 73 BootIndex string `json:"bootIndex"` 74 Device string `json:"device"` 75 } 76 77 type SecurityGroups struct { 78 Name string `json:"name"` 79 ID string `json:"id"` 80 } 81 82 // CloudServer is only used for method that requests details on a single server, by ID. 83 // Because metadata struct must be a map. 84 type CloudServer struct { 85 ID string `json:"id"` 86 UserID string `json:"user_id"` 87 Name string `json:"name"` 88 TenantID string `json:"tenant_id"` 89 HostID string `json:"hostId"` 90 Addresses map[string][]Address `json:"addresses"` 91 KeyName string `json:"key_name"` 92 Image Image `json:"image"` 93 Flavor Flavor `json:"flavor"` 94 SecurityGroups []SecurityGroups `json:"security_groups"` 95 AccessIPv4 string `json:"accessIPv4"` 96 AccessIPv6 string `json:"accessIPv6"` 97 Status string `json:"status"` 98 Progress *int `json:"progress"` 99 ConfigDrive string `json:"config_drive"` 100 Metadata Metadata `json:"metadata"` 101 TaskState string `json:"OS-EXT-STS:task_state"` 102 VMState string `json:"OS-EXT-STS:vm_state"` 103 Host string `json:"OS-EXT-SRV-ATTR:host"` 104 InstanceName string `json:"OS-EXT-SRV-ATTR:instance_name"` 105 PowerState *int `json:"OS-EXT-STS:power_state"` 106 HypervisorHostname string `json:"OS-EXT-SRV-ATTR:hypervisor_hostname"` 107 AvailabilityZone string `json:"OS-EXT-AZ:availability_zone"` 108 DiskConfig string `json:"OS-DCF:diskConfig"` 109 Fault Fault `json:"fault"` 110 VolumeAttached []VolumeAttached `json:"os-extended-volumes:volumes_attached"` 111 Description string `json:"description"` 112 HostStatus string `json:"host_status"` 113 Hostname string `json:"OS-EXT-SRV-ATTR:hostname"` 114 ReservationID string `json:"OS-EXT-SRV-ATTR:reservation_id"` 115 LaunchIndex *int `json:"OS-EXT-SRV-ATTR:launch_index"` 116 KernelID string `json:"OS-EXT-SRV-ATTR:kernel_id"` 117 RamdiskID string `json:"OS-EXT-SRV-ATTR:ramdisk_id"` 118 RootDeviceName string `json:"OS-EXT-SRV-ATTR:root_device_name"` 119 UserData string `json:"OS-EXT-SRV-ATTR:user_data"` 120 Locked *bool `json:"locked"` 121 Tags []string `json:"tags"` 122 OsSchedulerHints OsSchedulerHints `json:"os:scheduler_hints"` 123 EnterpriseProjectID string `json:"enterprise_project_id"` 124 SysTags []SysTags `json:"sys_tags"` 125 Created string `json:"created"` 126 Updated string `json:"updated"` 127 Launched string `json:"OS-SRV-USG:launched_at"` 128 } 129 130 // GetResult is the response from a Get operation. Call its Extract 131 // method to interpret it as a Server. 132 type GetResult struct { 133 cloudServerResult 134 } 135 136 type UpdateResult struct { 137 cloudServerResult 138 } 139 140 func (r cloudServerResult) Extract() (*CloudServer, error) { 141 var s struct { 142 Server *CloudServer `json:"server"` 143 } 144 err := r.ExtractInto(&s) 145 return s.Server, err 146 } 147 148 // UpdateMetadataResult contains the result of an UpdateMetadata operation. 149 // Call its Extract method to interpret it as a map[string]interface{}. 150 type UpdateMetadataResult struct { 151 golangsdk.Result 152 } 153 154 func (r UpdateMetadataResult) Extract() (interface{}, interface{}) { 155 var s struct { 156 Metadata map[string]interface{} `json:"metadata"` 157 } 158 err := r.ExtractInto(&s) 159 return s.Metadata, err 160 } 161 162 // InstanceDetailPage is a single page maximum result representing a query by offset page. 163 type InstanceDetailPage struct { 164 pagination.OffsetPageBase 165 } 166 167 // ExtractServers is a method to extract the list of BMS instances detail. 168 func ExtractServers(r pagination.Page) ([]CloudServer, error) { 169 var s []CloudServer 170 err := r.(InstanceDetailPage).Result.ExtractIntoSlicePtr(&s, "servers") 171 return s, err 172 }