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  }