kernels.go raw
1 package linodego
2
3 import (
4 "context"
5 "encoding/json"
6 "time"
7
8 "github.com/linode/linodego/internal/parseabletime"
9 )
10
11 // LinodeKernel represents a Linode Instance kernel object
12 type LinodeKernel struct {
13 ID string `json:"id"`
14 Label string `json:"label"`
15 Version string `json:"version"`
16 Architecture string `json:"architecture"`
17 Deprecated bool `json:"deprecated"`
18 KVM bool `json:"kvm"`
19 XEN bool `json:"xen"`
20 PVOPS bool `json:"pvops"`
21 Built *time.Time `json:"-"`
22 }
23
24 // UnmarshalJSON implements the json.Unmarshaler interface
25 func (i *LinodeKernel) UnmarshalJSON(b []byte) error {
26 type Mask LinodeKernel
27
28 p := struct {
29 *Mask
30
31 Built *parseabletime.ParseableTime `json:"built"`
32 }{
33 Mask: (*Mask)(i),
34 }
35
36 if err := json.Unmarshal(b, &p); err != nil {
37 return err
38 }
39
40 i.Built = (*time.Time)(p.Built)
41
42 return nil
43 }
44
45 // ListKernels lists linode kernels. This endpoint is cached by default.
46 func (c *Client) ListKernels(ctx context.Context, opts *ListOptions) ([]LinodeKernel, error) {
47 endpoint, err := generateListCacheURL("linode/kernels", opts)
48 if err != nil {
49 return nil, err
50 }
51
52 if result := c.getCachedResponse(endpoint); result != nil {
53 return result.([]LinodeKernel), nil
54 }
55
56 response, err := getPaginatedResults[LinodeKernel](ctx, c, "linode/kernels", opts)
57 if err != nil {
58 return nil, err
59 }
60
61 c.addCachedResponse(endpoint, response, nil)
62
63 return response, nil
64 }
65
66 // GetKernel gets the kernel with the provided ID. This endpoint is cached by default.
67 func (c *Client) GetKernel(ctx context.Context, kernelID string) (*LinodeKernel, error) {
68 e := formatAPIPath("linode/kernels/%s", kernelID)
69
70 if result := c.getCachedResponse(e); result != nil {
71 result := result.(LinodeKernel)
72 return &result, nil
73 }
74
75 response, err := doGETRequest[LinodeKernel](ctx, c, e)
76 if err != nil {
77 return nil, err
78 }
79
80 c.addCachedResponse(e, response, nil)
81
82 return response, nil
83 }
84