feat: add docker_image and docker_tag to cluster api

Signed-off-by: allanice001 <allanice001@gmail.com>
This commit is contained in:
allanice001
2025-12-08 17:04:10 +00:00
parent 1dbdd04808
commit 4d37a6363f
101 changed files with 721 additions and 185 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -96,6 +96,10 @@ components:
$ref: '#/components/schemas/dto.RecordSetResponse'
created_at:
type: string
docker_image:
type: string
docker_tag:
type: string
glueops_load_balancer:
$ref: '#/components/schemas/dto.LoadBalancerResponse'
id:
@@ -129,6 +133,10 @@ components:
properties:
cluster_provider:
type: string
docker_image:
type: string
docker_tag:
type: string
name:
type: string
region:
@@ -713,6 +721,10 @@ components:
properties:
cluster_provider:
type: string
docker_image:
type: string
docker_tag:
type: string
name:
type: string
region:

View File

@@ -189,6 +189,8 @@ func CreateCluster(db *gorm.DB) http.HandlerFunc {
LastError: "",
CertificateKey: certificateKey,
RandomToken: randomToken,
DockerImage: in.DockerImage,
DockerTag: in.DockerTag,
}
if err := db.Create(&c).Error; err != nil {
@@ -262,6 +264,14 @@ func UpdateCluster(db *gorm.DB) http.HandlerFunc {
cluster.Region = *in.Region
}
if in.DockerImage != nil {
cluster.DockerImage = *in.DockerImage
}
if in.DockerTag != nil {
cluster.DockerTag = *in.DockerTag
}
if err := db.Save(&cluster).Error; err != nil {
utils.WriteError(w, http.StatusInternalServerError, "db_error", "db error")
return
@@ -1547,6 +1557,8 @@ func clusterToDTO(c models.Cluster) dto.ClusterResponse {
RandomToken: c.RandomToken,
CertificateKey: c.CertificateKey,
NodePools: nps,
DockerImage: c.DockerImage,
DockerTag: c.DockerTag,
CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt,
}

View File

@@ -22,6 +22,8 @@ type ClusterResponse struct {
RandomToken string `json:"random_token"`
CertificateKey string `json:"certificate_key"`
NodePools []NodePoolResponse `json:"node_pools,omitempty"`
DockerImage string `json:"docker_image"`
DockerTag string `json:"docker_tag"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
@@ -30,12 +32,16 @@ type CreateClusterRequest struct {
Name string `json:"name"`
ClusterProvider string `json:"cluster_provider"`
Region string `json:"region"`
DockerImage string `json:"docker_image"`
DockerTag string `json:"docker_tag"`
}
type UpdateClusterRequest struct {
Name *string `json:"name,omitempty"`
ClusterProvider *string `json:"cluster_provider,omitempty"`
Region *string `json:"region,omitempty"`
DockerImage *string `json:"docker_image,omitempty"`
DockerTag *string `json:"docker_tag,omitempty"`
}
type AttachCaptainDomainRequest struct {

View File

@@ -40,6 +40,8 @@ type Cluster struct {
EncryptedKubeconfig string `gorm:"type:text" json:"-"`
KubeIV string `json:"-"`
KubeTag string `json:"-"`
DockerImage string `json:"docker_image"`
DockerTag string `json:"docker_tag"`
CreatedAt time.Time `json:"created_at,omitempty" gorm:"type:timestamptz;column:created_at;not null;default:now()"`
UpdatedAt time.Time `json:"updated_at,omitempty" gorm:"type:timestamptz;autoUpdateTime;column:updated_at;not null;default:now()"`
}

View File

@@ -12,6 +12,8 @@
| `control_plane_fqdn` | string |
| `control_plane_record_set` | [DtoRecordSetResponse](DtoRecordSetResponse.md) |
| `created_at` | string |
| `docker_image` | string |
| `docker_tag` | string |
| `glueops_load_balancer` | [DtoLoadBalancerResponse](DtoLoadBalancerResponse.md) |
| `id` | string |
| `last_error` | string |
@@ -37,6 +39,8 @@ const example = {
control_plane_fqdn: null,
control_plane_record_set: null,
created_at: null,
docker_image: null,
docker_tag: null,
glueops_load_balancer: null,
id: null,
last_error: null,

View File

@@ -5,6 +5,8 @@
| Name | Type |
| ------------------ | ------ |
| `cluster_provider` | string |
| `docker_image` | string |
| `docker_tag` | string |
| `name` | string |
| `region` | string |
@@ -16,6 +18,8 @@ import type { DtoCreateClusterRequest } from "@glueops/autoglue-sdk-go";
// TODO: Update the object below with actual values
const example = {
cluster_provider: null,
docker_image: null,
docker_tag: null,
name: null,
region: null,
} satisfies DtoCreateClusterRequest;

View File

@@ -5,6 +5,8 @@
| Name | Type |
| ------------------ | ------ |
| `cluster_provider` | string |
| `docker_image` | string |
| `docker_tag` | string |
| `name` | string |
| `region` | string |
@@ -16,6 +18,8 @@ import type { DtoUpdateClusterRequest } from "@glueops/autoglue-sdk-go";
// TODO: Update the object below with actual values
const example = {
cluster_provider: null,
docker_image: null,
docker_tag: null,
name: null,
region: null,
} satisfies DtoUpdateClusterRequest;

View File

@@ -16,6 +16,6 @@
"prepare": "npm run build"
},
"devDependencies": {
"typescript": "5.9.3"
"typescript": "^4.0 || ^5.0"
}
}

View File

@@ -13,10 +13,17 @@
*/
import * as runtime from "../runtime";
import type {DtoAnnotationResponse, DtoCreateAnnotationRequest, DtoUpdateAnnotationRequest,} from "../models/index";
import type {
DtoAnnotationResponse,
DtoCreateAnnotationRequest,
DtoUpdateAnnotationRequest,
} from "../models/index";
import {
DtoAnnotationResponseFromJSON,
DtoAnnotationResponseToJSON,
DtoCreateAnnotationRequestFromJSON,
DtoCreateAnnotationRequestToJSON,
DtoUpdateAnnotationRequestFromJSON,
DtoUpdateAnnotationRequestToJSON,
} from "../models/index";

View File

@@ -13,8 +13,22 @@
*/
import * as runtime from "../runtime";
import type {DtoEnqueueRequest, DtoJob, DtoPageJob, DtoQueueInfo,} from "../models/index";
import {DtoEnqueueRequestToJSON, DtoJobFromJSON, DtoPageJobFromJSON, DtoQueueInfoFromJSON,} from "../models/index";
import type {
DtoEnqueueRequest,
DtoJob,
DtoPageJob,
DtoQueueInfo,
} from "../models/index";
import {
DtoEnqueueRequestFromJSON,
DtoEnqueueRequestToJSON,
DtoJobFromJSON,
DtoJobToJSON,
DtoPageJobFromJSON,
DtoPageJobToJSON,
DtoQueueInfoFromJSON,
DtoQueueInfoToJSON,
} from "../models/index";
export interface AdminCancelArcherJobRequest {
id: string;

View File

@@ -13,13 +13,24 @@
*/
import * as runtime from "../runtime";
import type {DtoAuthStartResponse, DtoJWKS, DtoLogoutRequest, DtoRefreshRequest, DtoTokenPair,} from "../models/index";
import type {
DtoAuthStartResponse,
DtoJWKS,
DtoLogoutRequest,
DtoRefreshRequest,
DtoTokenPair,
} from "../models/index";
import {
DtoAuthStartResponseFromJSON,
DtoAuthStartResponseToJSON,
DtoJWKSFromJSON,
DtoJWKSToJSON,
DtoLogoutRequestFromJSON,
DtoLogoutRequestToJSON,
DtoRefreshRequestFromJSON,
DtoRefreshRequestToJSON,
DtoTokenPairFromJSON,
DtoTokenPairToJSON,
} from "../models/index";
export interface AuthCallbackRequest {

View File

@@ -25,14 +25,23 @@ import type {
DtoUpdateClusterRequest,
} from "../models/index";
import {
DtoAttachBastionRequestFromJSON,
DtoAttachBastionRequestToJSON,
DtoAttachCaptainDomainRequestFromJSON,
DtoAttachCaptainDomainRequestToJSON,
DtoAttachLoadBalancerRequestFromJSON,
DtoAttachLoadBalancerRequestToJSON,
DtoAttachNodePoolRequestFromJSON,
DtoAttachNodePoolRequestToJSON,
DtoAttachRecordSetRequestFromJSON,
DtoAttachRecordSetRequestToJSON,
DtoClusterResponseFromJSON,
DtoClusterResponseToJSON,
DtoCreateClusterRequestFromJSON,
DtoCreateClusterRequestToJSON,
DtoSetKubeconfigRequestFromJSON,
DtoSetKubeconfigRequestToJSON,
DtoUpdateClusterRequestFromJSON,
DtoUpdateClusterRequestToJSON,
} from "../models/index";

View File

@@ -13,10 +13,17 @@
*/
import * as runtime from "../runtime";
import type {DtoCreateCredentialRequest, DtoCredentialOut, DtoUpdateCredentialRequest,} from "../models/index";
import type {
DtoCreateCredentialRequest,
DtoCredentialOut,
DtoUpdateCredentialRequest,
} from "../models/index";
import {
DtoCreateCredentialRequestFromJSON,
DtoCreateCredentialRequestToJSON,
DtoCredentialOutFromJSON,
DtoCredentialOutToJSON,
DtoUpdateCredentialRequestFromJSON,
DtoUpdateCredentialRequestToJSON,
} from "../models/index";

View File

@@ -22,11 +22,17 @@ import type {
DtoUpdateRecordSetRequest,
} from "../models/index";
import {
DtoCreateDomainRequestFromJSON,
DtoCreateDomainRequestToJSON,
DtoCreateRecordSetRequestFromJSON,
DtoCreateRecordSetRequestToJSON,
DtoDomainResponseFromJSON,
DtoDomainResponseToJSON,
DtoRecordSetResponseFromJSON,
DtoRecordSetResponseToJSON,
DtoUpdateDomainRequestFromJSON,
DtoUpdateDomainRequestToJSON,
DtoUpdateRecordSetRequestFromJSON,
DtoUpdateRecordSetRequestToJSON,
} from "../models/index";

View File

@@ -13,8 +13,11 @@
*/
import * as runtime from "../runtime";
import type {HandlersHealthStatus} from "../models/index";
import {HandlersHealthStatusFromJSON,} from "../models/index";
import type { HandlersHealthStatus } from "../models/index";
import {
HandlersHealthStatusFromJSON,
HandlersHealthStatusToJSON,
} from "../models/index";
/**
*

View File

@@ -13,8 +13,19 @@
*/
import * as runtime from "../runtime";
import type {DtoCreateLabelRequest, DtoLabelResponse, DtoUpdateLabelRequest,} from "../models/index";
import {DtoCreateLabelRequestToJSON, DtoLabelResponseFromJSON, DtoUpdateLabelRequestToJSON,} from "../models/index";
import type {
DtoCreateLabelRequest,
DtoLabelResponse,
DtoUpdateLabelRequest,
} from "../models/index";
import {
DtoCreateLabelRequestFromJSON,
DtoCreateLabelRequestToJSON,
DtoLabelResponseFromJSON,
DtoLabelResponseToJSON,
DtoUpdateLabelRequestFromJSON,
DtoUpdateLabelRequestToJSON,
} from "../models/index";
export interface CreateLabelRequest {
dtoCreateLabelRequest: DtoCreateLabelRequest;

View File

@@ -19,8 +19,11 @@ import type {
DtoUpdateLoadBalancerRequest,
} from "../models/index";
import {
DtoCreateLoadBalancerRequestFromJSON,
DtoCreateLoadBalancerRequestToJSON,
DtoLoadBalancerResponseFromJSON,
DtoLoadBalancerResponseToJSON,
DtoUpdateLoadBalancerRequestFromJSON,
DtoUpdateLoadBalancerRequestToJSON,
} from "../models/index";

View File

@@ -13,8 +13,16 @@
*/
import * as runtime from "../runtime";
import type {HandlersCreateUserKeyRequest, HandlersUserAPIKeyOut,} from "../models/index";
import {HandlersCreateUserKeyRequestToJSON, HandlersUserAPIKeyOutFromJSON,} from "../models/index";
import type {
HandlersCreateUserKeyRequest,
HandlersUserAPIKeyOut,
} from "../models/index";
import {
HandlersCreateUserKeyRequestFromJSON,
HandlersCreateUserKeyRequestToJSON,
HandlersUserAPIKeyOutFromJSON,
HandlersUserAPIKeyOutToJSON,
} from "../models/index";
export interface CreateUserAPIKeyRequest {
handlersCreateUserKeyRequest: HandlersCreateUserKeyRequest;

View File

@@ -13,8 +13,19 @@
*/
import * as runtime from "../runtime";
import type {HandlersMeResponse, HandlersUpdateMeRequest, ModelsUser,} from "../models/index";
import {HandlersMeResponseFromJSON, HandlersUpdateMeRequestToJSON, ModelsUserFromJSON,} from "../models/index";
import type {
HandlersMeResponse,
HandlersUpdateMeRequest,
ModelsUser,
} from "../models/index";
import {
HandlersMeResponseFromJSON,
HandlersMeResponseToJSON,
HandlersUpdateMeRequestFromJSON,
HandlersUpdateMeRequestToJSON,
ModelsUserFromJSON,
ModelsUserToJSON,
} from "../models/index";
export interface UpdateMeRequest {
handlersUpdateMeRequest: HandlersUpdateMeRequest;

View File

@@ -13,8 +13,11 @@
*/
import * as runtime from "../runtime";
import type {HandlersVersionResponse} from "../models/index";
import {HandlersVersionResponseFromJSON,} from "../models/index";
import type { HandlersVersionResponse } from "../models/index";
import {
HandlersVersionResponseFromJSON,
HandlersVersionResponseToJSON,
} from "../models/index";
/**
*

View File

@@ -28,15 +28,26 @@ import type {
} from "../models/index";
import {
DtoAnnotationResponseFromJSON,
DtoAnnotationResponseToJSON,
DtoAttachAnnotationsRequestFromJSON,
DtoAttachAnnotationsRequestToJSON,
DtoAttachLabelsRequestFromJSON,
DtoAttachLabelsRequestToJSON,
DtoAttachServersRequestFromJSON,
DtoAttachServersRequestToJSON,
DtoAttachTaintsRequestFromJSON,
DtoAttachTaintsRequestToJSON,
DtoCreateNodePoolRequestFromJSON,
DtoCreateNodePoolRequestToJSON,
DtoLabelResponseFromJSON,
DtoLabelResponseToJSON,
DtoNodePoolResponseFromJSON,
DtoNodePoolResponseToJSON,
DtoServerResponseFromJSON,
DtoServerResponseToJSON,
DtoTaintResponseFromJSON,
DtoTaintResponseToJSON,
DtoUpdateNodePoolRequestFromJSON,
DtoUpdateNodePoolRequestToJSON,
} from "../models/index";

View File

@@ -22,16 +22,27 @@ import type {
HandlersOrgUpdateReq,
ModelsAPIKey,
ModelsOrganization,
UtilsErrorResponse,
} from "../models/index";
import {
HandlersMemberOutFromJSON,
HandlersMemberOutToJSON,
HandlersMemberUpsertReqFromJSON,
HandlersMemberUpsertReqToJSON,
HandlersOrgCreateReqFromJSON,
HandlersOrgCreateReqToJSON,
HandlersOrgKeyCreateReqFromJSON,
HandlersOrgKeyCreateReqToJSON,
HandlersOrgKeyCreateRespFromJSON,
HandlersOrgKeyCreateRespToJSON,
HandlersOrgUpdateReqFromJSON,
HandlersOrgUpdateReqToJSON,
ModelsAPIKeyFromJSON,
ModelsAPIKeyToJSON,
ModelsOrganizationFromJSON,
ModelsOrganizationToJSON,
UtilsErrorResponseFromJSON,
UtilsErrorResponseToJSON,
} from "../models/index";
export interface AddOrUpdateMemberRequest {

View File

@@ -13,8 +13,19 @@
*/
import * as runtime from "../runtime";
import type {DtoCreateServerRequest, DtoServerResponse, DtoUpdateServerRequest,} from "../models/index";
import {DtoCreateServerRequestToJSON, DtoServerResponseFromJSON, DtoUpdateServerRequestToJSON,} from "../models/index";
import type {
DtoCreateServerRequest,
DtoServerResponse,
DtoUpdateServerRequest,
} from "../models/index";
import {
DtoCreateServerRequestFromJSON,
DtoCreateServerRequestToJSON,
DtoServerResponseFromJSON,
DtoServerResponseToJSON,
DtoUpdateServerRequestFromJSON,
DtoUpdateServerRequestToJSON,
} from "../models/index";
export interface CreateServerRequest {
dtoCreateServerRequest: DtoCreateServerRequest;

View File

@@ -13,8 +13,19 @@
*/
import * as runtime from "../runtime";
import type {DtoCreateSSHRequest, DtoSshResponse, GetSSHKey200Response,} from "../models/index";
import {DtoCreateSSHRequestToJSON, DtoSshResponseFromJSON, GetSSHKey200ResponseFromJSON,} from "../models/index";
import type {
DtoCreateSSHRequest,
DtoSshResponse,
GetSSHKey200Response,
} from "../models/index";
import {
DtoCreateSSHRequestFromJSON,
DtoCreateSSHRequestToJSON,
DtoSshResponseFromJSON,
DtoSshResponseToJSON,
GetSSHKey200ResponseFromJSON,
GetSSHKey200ResponseToJSON,
} from "../models/index";
export interface CreateSSHKeyRequest {
dtoCreateSSHRequest: DtoCreateSSHRequest;

View File

@@ -13,8 +13,19 @@
*/
import * as runtime from "../runtime";
import type {DtoCreateTaintRequest, DtoTaintResponse, DtoUpdateTaintRequest,} from "../models/index";
import {DtoCreateTaintRequestToJSON, DtoTaintResponseFromJSON, DtoUpdateTaintRequestToJSON,} from "../models/index";
import type {
DtoCreateTaintRequest,
DtoTaintResponse,
DtoUpdateTaintRequest,
} from "../models/index";
import {
DtoCreateTaintRequestFromJSON,
DtoCreateTaintRequestToJSON,
DtoTaintResponseFromJSON,
DtoTaintResponseToJSON,
DtoUpdateTaintRequestFromJSON,
DtoUpdateTaintRequestToJSON,
} from "../models/index";
export interface CreateTaintRequest {
dtoCreateTaintRequest: DtoCreateTaintRequest;

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,16 +12,42 @@
* Do not edit the class manually.
*/
import type {DtoDomainResponse} from "./DtoDomainResponse";
import {DtoDomainResponseFromJSON, DtoDomainResponseToJSON,} from "./DtoDomainResponse";
import type {DtoLoadBalancerResponse} from "./DtoLoadBalancerResponse";
import {DtoLoadBalancerResponseFromJSON, DtoLoadBalancerResponseToJSON,} from "./DtoLoadBalancerResponse";
import type {DtoNodePoolResponse} from "./DtoNodePoolResponse";
import {DtoNodePoolResponseFromJSON, DtoNodePoolResponseToJSON,} from "./DtoNodePoolResponse";
import type {DtoServerResponse} from "./DtoServerResponse";
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse";
import type {DtoRecordSetResponse} from "./DtoRecordSetResponse";
import {DtoRecordSetResponseFromJSON, DtoRecordSetResponseToJSON,} from "./DtoRecordSetResponse";
import { mapValues } from "../runtime";
import type { DtoDomainResponse } from "./DtoDomainResponse";
import {
DtoDomainResponseFromJSON,
DtoDomainResponseFromJSONTyped,
DtoDomainResponseToJSON,
DtoDomainResponseToJSONTyped,
} from "./DtoDomainResponse";
import type { DtoLoadBalancerResponse } from "./DtoLoadBalancerResponse";
import {
DtoLoadBalancerResponseFromJSON,
DtoLoadBalancerResponseFromJSONTyped,
DtoLoadBalancerResponseToJSON,
DtoLoadBalancerResponseToJSONTyped,
} from "./DtoLoadBalancerResponse";
import type { DtoNodePoolResponse } from "./DtoNodePoolResponse";
import {
DtoNodePoolResponseFromJSON,
DtoNodePoolResponseFromJSONTyped,
DtoNodePoolResponseToJSON,
DtoNodePoolResponseToJSONTyped,
} from "./DtoNodePoolResponse";
import type { DtoServerResponse } from "./DtoServerResponse";
import {
DtoServerResponseFromJSON,
DtoServerResponseFromJSONTyped,
DtoServerResponseToJSON,
DtoServerResponseToJSONTyped,
} from "./DtoServerResponse";
import type { DtoRecordSetResponse } from "./DtoRecordSetResponse";
import {
DtoRecordSetResponseFromJSON,
DtoRecordSetResponseFromJSONTyped,
DtoRecordSetResponseToJSON,
DtoRecordSetResponseToJSONTyped,
} from "./DtoRecordSetResponse";
/**
*
@@ -77,6 +103,18 @@ export interface DtoClusterResponse {
* @memberof DtoClusterResponse
*/
created_at?: string;
/**
*
* @type {string}
* @memberof DtoClusterResponse
*/
docker_image?: string;
/**
*
* @type {string}
* @memberof DtoClusterResponse
*/
docker_tag?: string;
/**
*
* @type {DtoLoadBalancerResponse}
@@ -179,6 +217,9 @@ export function DtoClusterResponseFromJSONTyped(
? undefined
: DtoRecordSetResponseFromJSON(json["control_plane_record_set"]),
created_at: json["created_at"] == null ? undefined : json["created_at"],
docker_image:
json["docker_image"] == null ? undefined : json["docker_image"],
docker_tag: json["docker_tag"] == null ? undefined : json["docker_tag"],
glueops_load_balancer:
json["glueops_load_balancer"] == null
? undefined
@@ -223,6 +264,8 @@ export function DtoClusterResponseToJSONTyped(
value["control_plane_record_set"],
),
created_at: value["created_at"],
docker_image: value["docker_image"],
docker_tag: value["docker_tag"],
glueops_load_balancer: DtoLoadBalancerResponseToJSON(
value["glueops_load_balancer"],
),

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export
@@ -24,6 +25,18 @@ export interface DtoCreateClusterRequest {
* @memberof DtoCreateClusterRequest
*/
cluster_provider?: string;
/**
*
* @type {string}
* @memberof DtoCreateClusterRequest
*/
docker_image?: string;
/**
*
* @type {string}
* @memberof DtoCreateClusterRequest
*/
docker_tag?: string;
/**
*
* @type {string}
@@ -63,6 +76,9 @@ export function DtoCreateClusterRequestFromJSONTyped(
return {
cluster_provider:
json["cluster_provider"] == null ? undefined : json["cluster_provider"],
docker_image:
json["docker_image"] == null ? undefined : json["docker_image"],
docker_tag: json["docker_tag"] == null ? undefined : json["docker_tag"],
name: json["name"] == null ? undefined : json["name"],
region: json["region"] == null ? undefined : json["region"],
};
@@ -84,6 +100,8 @@ export function DtoCreateClusterRequestToJSONTyped(
return {
cluster_provider: value["cluster_provider"],
docker_image: value["docker_image"],
docker_tag: value["docker_tag"],
name: value["name"],
region: value["region"],
};

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually.
*/
import type {DtoJWK} from "./DtoJWK";
import {DtoJWKFromJSON, DtoJWKToJSON,} from "./DtoJWK";
import { mapValues } from "../runtime";
import type { DtoJWK } from "./DtoJWK";
import {
DtoJWKFromJSON,
DtoJWKFromJSONTyped,
DtoJWKToJSON,
DtoJWKToJSONTyped,
} from "./DtoJWK";
/**
*

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually.
*/
import type {DtoJobStatus} from "./DtoJobStatus";
import {DtoJobStatusFromJSON, DtoJobStatusToJSON,} from "./DtoJobStatus";
import { mapValues } from "../runtime";
import type { DtoJobStatus } from "./DtoJobStatus";
import {
DtoJobStatusFromJSON,
DtoJobStatusFromJSONTyped,
DtoJobStatusToJSON,
DtoJobStatusToJSONTyped,
} from "./DtoJobStatus";
/**
*

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,14 +12,35 @@
* Do not edit the class manually.
*/
import type {DtoTaintResponse} from "./DtoTaintResponse";
import {DtoTaintResponseFromJSON, DtoTaintResponseToJSON,} from "./DtoTaintResponse";
import type {DtoLabelResponse} from "./DtoLabelResponse";
import {DtoLabelResponseFromJSON, DtoLabelResponseToJSON,} from "./DtoLabelResponse";
import type {DtoServerResponse} from "./DtoServerResponse";
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse";
import type {DtoAnnotationResponse} from "./DtoAnnotationResponse";
import {DtoAnnotationResponseFromJSON, DtoAnnotationResponseToJSON,} from "./DtoAnnotationResponse";
import { mapValues } from "../runtime";
import type { DtoTaintResponse } from "./DtoTaintResponse";
import {
DtoTaintResponseFromJSON,
DtoTaintResponseFromJSONTyped,
DtoTaintResponseToJSON,
DtoTaintResponseToJSONTyped,
} from "./DtoTaintResponse";
import type { DtoLabelResponse } from "./DtoLabelResponse";
import {
DtoLabelResponseFromJSON,
DtoLabelResponseFromJSONTyped,
DtoLabelResponseToJSON,
DtoLabelResponseToJSONTyped,
} from "./DtoLabelResponse";
import type { DtoServerResponse } from "./DtoServerResponse";
import {
DtoServerResponseFromJSON,
DtoServerResponseFromJSONTyped,
DtoServerResponseToJSON,
DtoServerResponseToJSONTyped,
} from "./DtoServerResponse";
import type { DtoAnnotationResponse } from "./DtoAnnotationResponse";
import {
DtoAnnotationResponseFromJSON,
DtoAnnotationResponseFromJSONTyped,
DtoAnnotationResponseToJSON,
DtoAnnotationResponseToJSONTyped,
} from "./DtoAnnotationResponse";
/**
*

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually.
*/
import type {DtoJob} from "./DtoJob";
import {DtoJobFromJSON, DtoJobToJSON,} from "./DtoJob";
import { mapValues } from "../runtime";
import type { DtoJob } from "./DtoJob";
import {
DtoJobFromJSON,
DtoJobFromJSONTyped,
DtoJobToJSON,
DtoJobToJSONTyped,
} from "./DtoJob";
/**
*

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export
@@ -24,6 +25,18 @@ export interface DtoUpdateClusterRequest {
* @memberof DtoUpdateClusterRequest
*/
cluster_provider?: string;
/**
*
* @type {string}
* @memberof DtoUpdateClusterRequest
*/
docker_image?: string;
/**
*
* @type {string}
* @memberof DtoUpdateClusterRequest
*/
docker_tag?: string;
/**
*
* @type {string}
@@ -63,6 +76,9 @@ export function DtoUpdateClusterRequestFromJSONTyped(
return {
cluster_provider:
json["cluster_provider"] == null ? undefined : json["cluster_provider"],
docker_image:
json["docker_image"] == null ? undefined : json["docker_image"],
docker_tag: json["docker_tag"] == null ? undefined : json["docker_tag"],
name: json["name"] == null ? undefined : json["name"],
region: json["region"] == null ? undefined : json["region"],
};
@@ -84,6 +100,8 @@ export function DtoUpdateClusterRequestToJSONTyped(
return {
cluster_provider: value["cluster_provider"],
docker_image: value["docker_image"],
docker_tag: value["docker_tag"],
name: value["name"],
region: value["region"],
};

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,13 +12,19 @@
* Do not edit the class manually.
*/
import type {DtoSshResponse} from "./DtoSshResponse";
import {DtoSshResponseFromJSONTyped, DtoSshResponseToJSON, instanceOfDtoSshResponse,} from "./DtoSshResponse";
import type {DtoSshRevealResponse} from "./DtoSshRevealResponse";
import type { DtoSshResponse } from "./DtoSshResponse";
import {
instanceOfDtoSshResponse,
DtoSshResponseFromJSON,
DtoSshResponseFromJSONTyped,
DtoSshResponseToJSON,
} from "./DtoSshResponse";
import type { DtoSshRevealResponse } from "./DtoSshRevealResponse";
import {
instanceOfDtoSshRevealResponse,
DtoSshRevealResponseFromJSON,
DtoSshRevealResponseFromJSONTyped,
DtoSshRevealResponseToJSON,
instanceOfDtoSshRevealResponse,
} from "./DtoSshRevealResponse";
/**

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,10 +12,21 @@
* Do not edit the class manually.
*/
import type {ModelsUserEmail} from "./ModelsUserEmail";
import {ModelsUserEmailFromJSON, ModelsUserEmailToJSON,} from "./ModelsUserEmail";
import type {ModelsOrganization} from "./ModelsOrganization";
import {ModelsOrganizationFromJSON, ModelsOrganizationToJSON,} from "./ModelsOrganization";
import { mapValues } from "../runtime";
import type { ModelsUserEmail } from "./ModelsUserEmail";
import {
ModelsUserEmailFromJSON,
ModelsUserEmailFromJSONTyped,
ModelsUserEmailToJSON,
ModelsUserEmailToJSONTyped,
} from "./ModelsUserEmail";
import type { ModelsOrganization } from "./ModelsOrganization";
import {
ModelsOrganizationFromJSON,
ModelsOrganizationFromJSONTyped,
ModelsOrganizationToJSON,
ModelsOrganizationToJSONTyped,
} from "./ModelsOrganization";
/**
*

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually.
*/
import type {ModelsUser} from "./ModelsUser";
import {ModelsUserFromJSON, ModelsUserToJSON,} from "./ModelsUser";
import { mapValues } from "../runtime";
import type { ModelsUser } from "./ModelsUser";
import {
ModelsUserFromJSON,
ModelsUserFromJSONTyped,
ModelsUserToJSON,
ModelsUserToJSONTyped,
} from "./ModelsUser";
/**
*

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
/**
*
* @export

View File

@@ -1,36 +1,76 @@
;
// src/pages/ClustersPage.tsx
import { useEffect, useMemo, useState } from "react";
import { clustersApi } from "@/api/clusters";
import { dnsApi } from "@/api/dns";
import { loadBalancersApi } from "@/api/loadbalancers";
import { nodePoolsApi } from "@/api/node_pools";
import { serversApi } from "@/api/servers";
import type { DtoClusterResponse, DtoDomainResponse, DtoLoadBalancerResponse, DtoNodePoolResponse, DtoRecordSetResponse, DtoServerResponse } from "@/sdk";
import { zodResolver } from "@hookform/resolvers/zod";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { AlertCircle, CheckCircle2, CircleSlash2, FileCode2, Globe2, Loader2, MapPin, Pencil, Plus, Search, Server, Wrench } from "lucide-react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { z } from "zod";
import { truncateMiddle } from "@/lib/utils";
import { Badge } from "@/components/ui/badge.tsx";
import { Button } from "@/components/ui/button.tsx";
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog.tsx";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form.tsx";
import { Input } from "@/components/ui/input.tsx";
import { Label } from "@/components/ui/label.tsx";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select.tsx";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table.tsx";
import { Textarea } from "@/components/ui/textarea.tsx";
import { useEffect, useMemo, useState } from "react"
import { clustersApi } from "@/api/clusters"
import { dnsApi } from "@/api/dns"
import { loadBalancersApi } from "@/api/loadbalancers"
import { nodePoolsApi } from "@/api/node_pools"
import { serversApi } from "@/api/servers"
import type {
DtoClusterResponse,
DtoDomainResponse,
DtoLoadBalancerResponse,
DtoNodePoolResponse,
DtoRecordSetResponse,
DtoServerResponse,
} from "@/sdk"
import { zodResolver } from "@hookform/resolvers/zod"
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
import {
AlertCircle,
CheckCircle2,
CircleSlash2,
FileCode2,
Globe2,
Loader2,
MapPin,
Pencil,
Plus,
Search,
Server,
Wrench,
} from "lucide-react"
import { useForm } from "react-hook-form"
import { toast } from "sonner"
import { z } from "zod"
import { truncateMiddle } from "@/lib/utils"
import { Badge } from "@/components/ui/badge.tsx"
import { Button } from "@/components/ui/button.tsx"
import {
Dialog,
DialogContent,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog.tsx"
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from "@/components/ui/form.tsx"
import { Input } from "@/components/ui/input.tsx"
import { Label } from "@/components/ui/label.tsx"
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select.tsx"
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table.tsx"
import { Textarea } from "@/components/ui/textarea.tsx"
// --- Schemas ---
@@ -38,6 +78,8 @@ const createClusterSchema = z.object({
name: z.string().trim().min(1, "Name is required").max(120, "Max 120 chars"),
cluster_provider: z.string().trim().min(1, "Provider is required").max(120, "Max 120 chars"),
region: z.string().trim().min(1, "Region is required").max(120, "Max 120 chars"),
docker_image: z.string().trim().min(1, "Docker Image is required"),
docker_tag: z.string().trim().min(1, "Docker Tag is required"),
})
type CreateClusterInput = z.input<typeof createClusterSchema>
@@ -198,6 +240,8 @@ export const ClustersPage = () => {
name: "",
cluster_provider: "",
region: "",
docker_image: "",
docker_tag: "",
},
})
@@ -246,6 +290,8 @@ export const ClustersPage = () => {
name: cluster.name ?? "",
cluster_provider: cluster.cluster_provider ?? "",
region: cluster.region ?? "",
docker_image: cluster.docker_image ?? "",
docker_tag: cluster.docker_tag ?? "",
})
setUpdateOpen(true)
}
@@ -642,6 +688,34 @@ export const ClustersPage = () => {
)}
/>
<FormField
control={createForm.control}
name="docker_image"
render={({ field }) => (
<FormItem>
<FormLabel>Docker Image</FormLabel>
<FormControl>
<Input placeholder="ghcr.io/glueops/gluekube" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={createForm.control}
name="docker_tag"
render={({ field }) => (
<FormItem>
<FormLabel>Docker Tag</FormLabel>
<FormControl>
<Input placeholder="v1.33" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<DialogFooter className="gap-2">
<Button type="button" variant="outline" onClick={() => setCreateOpen(false)}>
Cancel
@@ -666,6 +740,7 @@ export const ClustersPage = () => {
<TableHead>Provider</TableHead>
<TableHead>Region</TableHead>
<TableHead>Status</TableHead>
<TableHead>Docker</TableHead>
<TableHead>Summary</TableHead>
<TableHead className="w-[320px] text-right">Actions</TableHead>
</TableRow>
@@ -684,6 +759,7 @@ export const ClustersPage = () => {
</div>
)}
</TableCell>
<TableCell>{c.docker_image + ":" + c.docker_tag}</TableCell>
<TableCell>
<ClusterSummary c={c} />
{c.id && (
@@ -782,6 +858,34 @@ export const ClustersPage = () => {
)}
/>
<FormField
control={updateForm.control}
name="docker_image"
render={({ field }) => (
<FormItem>
<FormLabel>Region</FormLabel>
<FormControl>
<Input placeholder="ghcr.io/glueops/gluekube" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={updateForm.control}
name="docker_tag"
render={({ field }) => (
<FormItem>
<FormLabel>Region</FormLabel>
<FormControl>
<Input placeholder="v1.33" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<DialogFooter className="gap-2">
<Button type="button" variant="outline" onClick={() => setUpdateOpen(false)}>
Cancel

View File

@@ -2,12 +2,20 @@ import { useMemo, useState } from "react"
import { credentialsApi } from "@/api/credentials"
import { zodResolver } from "@hookform/resolvers/zod"
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
import { AlertTriangle, Eye, Loader2, MoreHorizontal, Pencil, Plus, Search, Trash2 } from "lucide-react"
import {
AlertTriangle,
Eye,
Loader2,
MoreHorizontal,
Pencil,
Plus,
Search,
Trash2,
} from "lucide-react"
import { Controller, useForm } from "react-hook-form"
import { toast } from "sonner"
import { z } from "zod"
import {
AlertDialog,
AlertDialogAction,
@@ -17,19 +25,43 @@ import {
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger
AlertDialogTrigger,
} from "@/components/ui/alert-dialog"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"
import {
Dialog,
DialogContent,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from "@/components/ui/form"
import { Input } from "@/components/ui/input"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
import { Switch } from "@/components/ui/switch"
import { Textarea } from "@/components/ui/textarea"
// -------------------- Constants --------------------
const AWS_ALLOWED_SERVICES = ["route53", "s3", "ec2", "iam", "rds", "dynamodb"] as const

Some files were not shown because too many files have changed in this diff Show More