Compare commits

...

2 Commits

Author SHA1 Message Date
allanice001
fee4c64551 fix: fix background jobs
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-09 15:49:31 +00:00
allanice001
4d37a6363f feat: add docker_image and docker_tag to cluster api
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-08 17:04:10 +00:00
102 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

@@ -500,7 +500,9 @@ func runMakeOnBastion(
defer sess.Close()
clusterDir := fmt.Sprintf("$HOME/autoglue/clusters/%s", c.ID.String())
cmd := fmt.Sprintf("cd %s && make %s", clusterDir, target)
sshDir := fmt.Sprintf("$HOME/.ssh/autoglue")
cmd := fmt.Sprintf("cd %s && docker run -it -v %s:/root/.ssh -v ./payload.json:/opt/gluekube/platform.json %s:%s make %s", clusterDir, sshDir, c.DockerImage, c.DockerTag, target)
out, runErr := sess.CombinedOutput(cmd)
if runErr != nil {

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

@@ -14,7 +14,10 @@
import * as runtime from "../runtime";
import type { HandlersHealthStatus } from "../models/index";
import {HandlersHealthStatusFromJSON,} 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

@@ -14,7 +14,10 @@
import * as runtime from "../runtime";
import type { HandlersVersionResponse } from "../models/index";
import {HandlersVersionResponseFromJSON,} 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 { mapValues } from "../runtime";
import type { DtoDomainResponse } from "./DtoDomainResponse";
import {DtoDomainResponseFromJSON, DtoDomainResponseToJSON,} from "./DtoDomainResponse";
import {
DtoDomainResponseFromJSON,
DtoDomainResponseFromJSONTyped,
DtoDomainResponseToJSON,
DtoDomainResponseToJSONTyped,
} from "./DtoDomainResponse";
import type { DtoLoadBalancerResponse } from "./DtoLoadBalancerResponse";
import {DtoLoadBalancerResponseFromJSON, DtoLoadBalancerResponseToJSON,} from "./DtoLoadBalancerResponse";
import {
DtoLoadBalancerResponseFromJSON,
DtoLoadBalancerResponseFromJSONTyped,
DtoLoadBalancerResponseToJSON,
DtoLoadBalancerResponseToJSONTyped,
} from "./DtoLoadBalancerResponse";
import type { DtoNodePoolResponse } from "./DtoNodePoolResponse";
import {DtoNodePoolResponseFromJSON, DtoNodePoolResponseToJSON,} from "./DtoNodePoolResponse";
import {
DtoNodePoolResponseFromJSON,
DtoNodePoolResponseFromJSONTyped,
DtoNodePoolResponseToJSON,
DtoNodePoolResponseToJSONTyped,
} from "./DtoNodePoolResponse";
import type { DtoServerResponse } from "./DtoServerResponse";
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse";
import {
DtoServerResponseFromJSON,
DtoServerResponseFromJSONTyped,
DtoServerResponseToJSON,
DtoServerResponseToJSONTyped,
} from "./DtoServerResponse";
import type { DtoRecordSetResponse } from "./DtoRecordSetResponse";
import {DtoRecordSetResponseFromJSON, DtoRecordSetResponseToJSON,} 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 { mapValues } from "../runtime";
import type { DtoJWK } from "./DtoJWK";
import {DtoJWKFromJSON, DtoJWKToJSON,} from "./DtoJWK";
import {
DtoJWKFromJSON,
DtoJWKFromJSONTyped,
DtoJWKToJSON,
DtoJWKToJSONTyped,
} from "./DtoJWK";
/**
*

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
import type { DtoJobStatus } from "./DtoJobStatus";
import {DtoJobStatusFromJSON, DtoJobStatusToJSON,} 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 { mapValues } from "../runtime";
import type { DtoTaintResponse } from "./DtoTaintResponse";
import {DtoTaintResponseFromJSON, DtoTaintResponseToJSON,} from "./DtoTaintResponse";
import {
DtoTaintResponseFromJSON,
DtoTaintResponseFromJSONTyped,
DtoTaintResponseToJSON,
DtoTaintResponseToJSONTyped,
} from "./DtoTaintResponse";
import type { DtoLabelResponse } from "./DtoLabelResponse";
import {DtoLabelResponseFromJSON, DtoLabelResponseToJSON,} from "./DtoLabelResponse";
import {
DtoLabelResponseFromJSON,
DtoLabelResponseFromJSONTyped,
DtoLabelResponseToJSON,
DtoLabelResponseToJSONTyped,
} from "./DtoLabelResponse";
import type { DtoServerResponse } from "./DtoServerResponse";
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse";
import {
DtoServerResponseFromJSON,
DtoServerResponseFromJSONTyped,
DtoServerResponseToJSON,
DtoServerResponseToJSONTyped,
} from "./DtoServerResponse";
import type { DtoAnnotationResponse } from "./DtoAnnotationResponse";
import {DtoAnnotationResponseFromJSON, DtoAnnotationResponseToJSON,} from "./DtoAnnotationResponse";
import {
DtoAnnotationResponseFromJSON,
DtoAnnotationResponseFromJSONTyped,
DtoAnnotationResponseToJSON,
DtoAnnotationResponseToJSONTyped,
} from "./DtoAnnotationResponse";
/**
*

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually.
*/
import { mapValues } from "../runtime";
import type { DtoJob } from "./DtoJob";
import {DtoJobFromJSON, DtoJobToJSON,} 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

@@ -13,12 +13,18 @@
*/
import type { DtoSshResponse } from "./DtoSshResponse";
import {DtoSshResponseFromJSONTyped, DtoSshResponseToJSON, instanceOfDtoSshResponse,} 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 { mapValues } from "../runtime";
import type { ModelsUserEmail } from "./ModelsUserEmail";
import {ModelsUserEmailFromJSON, ModelsUserEmailToJSON,} from "./ModelsUserEmail";
import {
ModelsUserEmailFromJSON,
ModelsUserEmailFromJSONTyped,
ModelsUserEmailToJSON,
ModelsUserEmailToJSONTyped,
} from "./ModelsUserEmail";
import type { ModelsOrganization } from "./ModelsOrganization";
import {ModelsOrganizationFromJSON, ModelsOrganizationToJSON,} 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 { mapValues } from "../runtime";
import type { ModelsUser } from "./ModelsUser";
import {ModelsUserFromJSON, ModelsUserToJSON,} 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

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