Skip to content

Commit be54abb

Browse files
authored
feat(k8s): add support for GetNodeMetadata (#2158)
1 parent c1db474 commit be54abb

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

api/k8s/v1/k8s_sdk.go

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,15 @@ type Node struct {
11911191
UpdatedAt *time.Time `json:"updated_at"`
11921192
}
11931193

1194+
// NodeMetadataCoreV1Taint: node metadata core v1 taint.
1195+
type NodeMetadataCoreV1Taint struct {
1196+
Key string `json:"key"`
1197+
1198+
Value string `json:"value"`
1199+
1200+
Effect string `json:"effect"`
1201+
}
1202+
11941203
// UpdateClusterRequestAutoUpgrade: update cluster request auto upgrade.
11951204
type UpdateClusterRequestAutoUpgrade struct {
11961205
// Enable: defines whether auto upgrade is enabled for the cluster.
@@ -1266,6 +1275,15 @@ type UpdatePoolRequestUpgradePolicy struct {
12661275
MaxSurge *uint32 `json:"max_surge"`
12671276
}
12681277

1278+
// AuthExternalNodeRequest: auth external node request.
1279+
type AuthExternalNodeRequest struct {
1280+
// Region: region to target. If none is passed will use default region from the config.
1281+
Region scw.Region `json:"-"`
1282+
1283+
// PoolID: pool the node will be attached to.
1284+
PoolID string `json:"-"`
1285+
}
1286+
12691287
// CreateClusterRequest: create cluster request.
12701288
type CreateClusterRequest struct {
12711289
// Region: region to target. If none is passed will use default region from the config.
@@ -1455,6 +1473,13 @@ type ExternalNode struct {
14551473
NodeTaints []*ExternalNodeCoreV1Taint `json:"node_taints"`
14561474
}
14571475

1476+
// ExternalNodeAuth: external node auth.
1477+
type ExternalNodeAuth struct {
1478+
NodeToken string `json:"node_token"`
1479+
1480+
APIURL string `json:"api_url"`
1481+
}
1482+
14581483
// GetClusterKubeConfigRequest: get cluster kube config request.
14591484
type GetClusterKubeConfigRequest struct {
14601485
// Region: region to target. If none is passed will use default region from the config.
@@ -1476,6 +1501,12 @@ type GetClusterRequest struct {
14761501
ClusterID string `json:"-"`
14771502
}
14781503

1504+
// GetNodeMetadataRequest: get node metadata request.
1505+
type GetNodeMetadataRequest struct {
1506+
// Region: region to target. If none is passed will use default region from the config.
1507+
Region scw.Region `json:"-"`
1508+
}
1509+
14791510
// GetNodeRequest: get node request.
14801511
type GetNodeRequest struct {
14811512
// Region: region to target. If none is passed will use default region from the config.
@@ -1789,6 +1820,37 @@ type MigrateClusterToRoutedIPsRequest struct {
17891820
ClusterID string `json:"-"`
17901821
}
17911822

1823+
// NodeMetadata: node metadata.
1824+
type NodeMetadata struct {
1825+
ID string `json:"id"`
1826+
1827+
Name string `json:"name"`
1828+
1829+
ClusterURL string `json:"cluster_url"`
1830+
1831+
ClusterCa string `json:"cluster_ca"`
1832+
1833+
CredentialProviderConfig string `json:"credential_provider_config"`
1834+
1835+
PoolVersion string `json:"pool_version"`
1836+
1837+
KubeletConfig string `json:"kubelet_config"`
1838+
1839+
NodeLabels map[string]string `json:"node_labels"`
1840+
1841+
NodeTaints []*NodeMetadataCoreV1Taint `json:"node_taints"`
1842+
1843+
PrivateNetworkMode string `json:"private_network_mode"`
1844+
1845+
KapsuleIfaceMac string `json:"kapsule_iface_mac"`
1846+
1847+
FullIsolation bool `json:"full_isolation"`
1848+
1849+
HasGpu bool `json:"has_gpu"`
1850+
1851+
ExternalIP string `json:"external_ip"`
1852+
}
1853+
17921854
// RebootNodeRequest: reboot node request.
17931855
type RebootNodeRequest struct {
17941856
// Region: region to target. If none is passed will use default region from the config.
@@ -2594,6 +2656,69 @@ func (s *API) DeletePool(req *DeletePoolRequest, opts ...scw.RequestOption) (*Po
25942656
return &resp, nil
25952657
}
25962658

2659+
// GetNodeMetadata: Rerieve metadata to instantiate a Kapsule/Kosmos node. This method is not intended to be called by end users but rather programmatically by the node-installer.
2660+
func (s *API) GetNodeMetadata(req *GetNodeMetadataRequest, opts ...scw.RequestOption) (*NodeMetadata, error) {
2661+
var err error
2662+
2663+
if req.Region == "" {
2664+
defaultRegion, _ := s.client.GetDefaultRegion()
2665+
req.Region = defaultRegion
2666+
}
2667+
2668+
if fmt.Sprint(req.Region) == "" {
2669+
return nil, errors.New("field Region cannot be empty in request")
2670+
}
2671+
2672+
scwReq := &scw.ScalewayRequest{
2673+
Method: "GET",
2674+
Path: "/k8s/v1/regions/" + fmt.Sprint(req.Region) + "/nodes/metadata",
2675+
}
2676+
2677+
var resp NodeMetadata
2678+
2679+
err = s.client.Do(scwReq, &resp, opts...)
2680+
if err != nil {
2681+
return nil, err
2682+
}
2683+
return &resp, nil
2684+
}
2685+
2686+
// AuthExternalNode: Creates a newer Kosmos node and returns its token. This method is not intended to be called by end users but rather programmatically by the node-installer.
2687+
func (s *API) AuthExternalNode(req *AuthExternalNodeRequest, opts ...scw.RequestOption) (*ExternalNodeAuth, error) {
2688+
var err error
2689+
2690+
if req.Region == "" {
2691+
defaultRegion, _ := s.client.GetDefaultRegion()
2692+
req.Region = defaultRegion
2693+
}
2694+
2695+
if fmt.Sprint(req.Region) == "" {
2696+
return nil, errors.New("field Region cannot be empty in request")
2697+
}
2698+
2699+
if fmt.Sprint(req.PoolID) == "" {
2700+
return nil, errors.New("field PoolID cannot be empty in request")
2701+
}
2702+
2703+
scwReq := &scw.ScalewayRequest{
2704+
Method: "POST",
2705+
Path: "/k8s/v1/regions/" + fmt.Sprint(req.Region) + "/pools/" + fmt.Sprint(req.PoolID) + "/external-nodes/auth",
2706+
}
2707+
2708+
err = scwReq.SetBody(req)
2709+
if err != nil {
2710+
return nil, err
2711+
}
2712+
2713+
var resp ExternalNodeAuth
2714+
2715+
err = s.client.Do(scwReq, &resp, opts...)
2716+
if err != nil {
2717+
return nil, err
2718+
}
2719+
return &resp, nil
2720+
}
2721+
25972722
// CreateExternalNode: Retrieve metadata for a Kosmos node. This method is not intended to be called by end users but rather programmatically by the kapsule-node-agent.
25982723
func (s *API) CreateExternalNode(req *CreateExternalNodeRequest, opts ...scw.RequestOption) (*ExternalNode, error) {
25992724
var err error

0 commit comments

Comments
 (0)