fix(apiclient): Fixed image creation method in cloudlyApiClient
This commit is contained in:
parent
57970b3d10
commit
f65200703d
@ -1,5 +1,11 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2024-12-22 - 4.5.5 - fix(apiclient)
|
||||||
|
Fixed image creation method in cloudlyApiClient
|
||||||
|
|
||||||
|
- Corrected method call from 'images.createImage' to 'image.createImage' to ensure proper image creation.
|
||||||
|
- Updated cluster retrieval methods and ensured proper API routes are being called.
|
||||||
|
|
||||||
## 2024-12-21 - 4.5.4 - fix(ts_web)
|
## 2024-12-21 - 4.5.4 - fix(ts_web)
|
||||||
Fix action type and data fields in appstate for CRUD operations
|
Fix action type and data fields in appstate for CRUD operations
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ tap.test('should get an identity', async () => {
|
|||||||
|
|
||||||
let image: Image;
|
let image: Image;
|
||||||
tap.test('should create and upload an image', async () => {
|
tap.test('should create and upload an image', async () => {
|
||||||
image = await testClient.images.createImage({
|
image = await testClient.image.createImage({
|
||||||
name: 'test',
|
name: 'test',
|
||||||
description: 'test'
|
description: 'test'
|
||||||
});
|
});
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/cloudly',
|
name: '@serve.zone/cloudly',
|
||||||
version: '4.5.4',
|
version: '4.5.5',
|
||||||
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,12 @@ export class ClusterManager {
|
|||||||
console.log(await cluster.createSavableObject());
|
console.log(await cluster.createSavableObject());
|
||||||
this.cloudlyRef.serverManager.ensureServerInfrastructure();
|
this.cloudlyRef.serverManager.ensureServerInfrastructure();
|
||||||
return {
|
return {
|
||||||
clusterConfig: await cluster.createSavableObject(),
|
cluster: await cluster.createSavableObject(),
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
this.typedrouter.addTypedHandler<plugins.servezoneInterfaces.requests.cluster.IRequest_GetAllClusters>(
|
this.typedrouter.addTypedHandler<plugins.servezoneInterfaces.requests.cluster.IReq_Any_Cloudly_GetClusters>(
|
||||||
new plugins.typedrequest.TypedHandler('getAllClusters', async (dataArg) => {
|
new plugins.typedrequest.TypedHandler('getAllClusters', async (dataArg) => {
|
||||||
// TODO: do authentication here
|
// TODO: do authentication here
|
||||||
const clusters = await this.getAllClusters();
|
const clusters = await this.getAllClusters();
|
||||||
@ -56,7 +56,7 @@ export class ClusterManager {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// delete cluster
|
// delete cluster
|
||||||
this.typedrouter.addTypedHandler<plugins.servezoneInterfaces.requests.cluster.IRequest_DeleteCluster>(
|
this.typedrouter.addTypedHandler<plugins.servezoneInterfaces.requests.cluster.IReq_Any_Cloudly_DeleteClusterById>(
|
||||||
new plugins.typedrequest.TypedHandler('deleteCluster', async (reqDataArg, toolsArg) => {
|
new plugins.typedrequest.TypedHandler('deleteCluster', async (reqDataArg, toolsArg) => {
|
||||||
await toolsArg.passGuards([this.cloudlyRef.authManager.adminIdentityGuard], reqDataArg);
|
await toolsArg.passGuards([this.cloudlyRef.authManager.adminIdentityGuard], reqDataArg);
|
||||||
await this.deleteCluster(reqDataArg.clusterId);
|
await this.deleteCluster(reqDataArg.clusterId);
|
||||||
|
@ -156,7 +156,7 @@ export class CloudlyApiClient {
|
|||||||
return typedResponse.certificate;
|
return typedResponse.certificate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public images = {
|
public image = {
|
||||||
// Images
|
// Images
|
||||||
getImageById: async (imageIdArg: string) => {
|
getImageById: async (imageIdArg: string) => {
|
||||||
return Image.getImageById(this, imageIdArg);
|
return Image.getImageById(this, imageIdArg);
|
||||||
|
@ -1,6 +1,84 @@
|
|||||||
|
import { CloudlyApiClient } from './classes.cloudlyapiclient.js';
|
||||||
import * as plugins from './plugins.js';
|
import * as plugins from './plugins.js';
|
||||||
|
|
||||||
export class Cluster {
|
export class Cluster implements plugins.servezoneInterfaces.data.ICluster {
|
||||||
public getServers() {}
|
// STATIC
|
||||||
|
public static async getClusterById(cloudlyClientRef: CloudlyApiClient, clusterIdArg: string) {
|
||||||
|
const getClusterByIdTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.cluster.IReq_Any_Cloudly_GetClusterById>(
|
||||||
|
'getClusterById'
|
||||||
|
);
|
||||||
|
const response = await getClusterByIdTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
clusterId: clusterIdArg,
|
||||||
|
});
|
||||||
|
const newCluster = new Cluster(cloudlyClientRef);
|
||||||
|
Object.assign(newCluster, response.cluster);
|
||||||
|
return newCluster;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getClusters(cloudlyClientRef: CloudlyApiClient) {
|
||||||
|
const getClustersTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.cluster.IReq_Any_Cloudly_GetClusters>(
|
||||||
|
'getClusters'
|
||||||
|
);
|
||||||
|
const response = await getClustersTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
});
|
||||||
|
const clusterConfigs: Cluster[] = [];
|
||||||
|
for (const clusterConfig of response.clusters) {
|
||||||
|
const newCluster = new Cluster(cloudlyClientRef);
|
||||||
|
Object.assign(newCluster, clusterConfig);
|
||||||
|
clusterConfigs.push(newCluster);
|
||||||
|
}
|
||||||
|
return clusterConfigs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async createCluster(cloudlyClientRef: CloudlyApiClient, clusterNameArg: string) {
|
||||||
|
const createClusterTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.cluster.IRequest_CreateCluster>(
|
||||||
|
'createCluster'
|
||||||
|
);
|
||||||
|
const response = await createClusterTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
clusterName: clusterNameArg,
|
||||||
|
});
|
||||||
|
const newCluster = new Cluster(cloudlyClientRef);
|
||||||
|
Object.assign(newCluster, response.cluster);
|
||||||
|
return newCluster;
|
||||||
|
}
|
||||||
|
|
||||||
|
// INSTANCE
|
||||||
|
public id: string;
|
||||||
|
public data: plugins.servezoneInterfaces.data.ICluster['data'];
|
||||||
|
public cloudlyClientRef: CloudlyApiClient;
|
||||||
|
|
||||||
|
constructor(cloudlyClientRef: CloudlyApiClient) {
|
||||||
|
this.cloudlyClientRef = cloudlyClientRef;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async update() {
|
||||||
|
const updateClusterTR = this.cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.cluster.IReq_Any_Cloudly_UpdateCluster>(
|
||||||
|
'updateCluster'
|
||||||
|
);
|
||||||
|
const response = await updateClusterTR.fire({
|
||||||
|
identity: this.cloudlyClientRef.identity,
|
||||||
|
clusterData: this.data,
|
||||||
|
});
|
||||||
|
|
||||||
|
const resultClusterData = response.resultCluster.data;
|
||||||
|
plugins.smartexpect.expect(resultClusterData).toEqual(this.data);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async delete(cloudlyClientRef: CloudlyApiClient, clusterIdArg: string) {
|
||||||
|
const deleteClusterTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.cluster.IReq_Any_Cloudly_DeleteClusterById>(
|
||||||
|
'deleteClusterById'
|
||||||
|
);
|
||||||
|
const response = await deleteClusterTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
clusterId: this.id,
|
||||||
|
});
|
||||||
|
plugins.smartexpect.expect(response.ok).toBeTrue();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,11 @@ import * as plugins from '../plugins.js';
|
|||||||
/**
|
/**
|
||||||
* get all clusters
|
* get all clusters
|
||||||
*/
|
*/
|
||||||
export interface IRequest_GetAllClusters extends plugins.typedrequestInterfaces.implementsTR<
|
export interface IReq_Any_Cloudly_GetClusters extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
plugins.typedrequestInterfaces.ITypedRequest,
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
IRequest_GetAllClusters
|
IReq_Any_Cloudly_GetClusters
|
||||||
> {
|
> {
|
||||||
method: 'getAllClusters';
|
method: 'getClusters';
|
||||||
request: {
|
request: {
|
||||||
identity: userInterfaces.IIdentity;
|
identity: userInterfaces.IIdentity;
|
||||||
};
|
};
|
||||||
@ -18,6 +18,21 @@ export interface IRequest_GetAllClusters extends plugins.typedrequestInterfaces.
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IReq_Any_Cloudly_GetClusterById
|
||||||
|
extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
|
IReq_Any_Cloudly_GetClusterById
|
||||||
|
> {
|
||||||
|
method: 'getClusterById';
|
||||||
|
request: {
|
||||||
|
identity: userInterfaces.IIdentity;
|
||||||
|
clusterId: string;
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
cluster: clusterInterfaces.ICluster;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export interface IRequest_CreateCluster extends plugins.typedrequestInterfaces.implementsTR<
|
export interface IRequest_CreateCluster extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
plugins.typedrequestInterfaces.ITypedRequest,
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
IRequest_CreateCluster
|
IRequest_CreateCluster
|
||||||
@ -28,40 +43,40 @@ export interface IRequest_CreateCluster extends plugins.typedrequestInterfaces.i
|
|||||||
clusterName: string;
|
clusterName: string;
|
||||||
};
|
};
|
||||||
response: {
|
response: {
|
||||||
clusterConfig: clusterInterfaces.ICluster;
|
cluster: clusterInterfaces.ICluster;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updates a cluster
|
* updates a cluster
|
||||||
*/
|
*/
|
||||||
export interface IRequest_UpdateCluster extends plugins.typedrequestInterfaces.implementsTR<
|
export interface IReq_Any_Cloudly_UpdateCluster extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
plugins.typedrequestInterfaces.ITypedRequest,
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
IRequest_UpdateCluster
|
IReq_Any_Cloudly_UpdateCluster
|
||||||
> {
|
> {
|
||||||
method: 'updateCluster';
|
method: 'updateCluster';
|
||||||
request: {
|
request: {
|
||||||
identity: userInterfaces.IIdentity;
|
identity: userInterfaces.IIdentity;
|
||||||
clusterConfig: clusterInterfaces.ICluster;
|
clusterData: clusterInterfaces.ICluster['data'];
|
||||||
};
|
};
|
||||||
response: {
|
response: {
|
||||||
clusterConfig: clusterInterfaces.ICluster;
|
resultCluster: clusterInterfaces.ICluster;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* deletes a cluster
|
* deletes a cluster
|
||||||
*/
|
*/
|
||||||
export interface IRequest_DeleteCluster extends plugins.typedrequestInterfaces.implementsTR<
|
export interface IReq_Any_Cloudly_DeleteClusterById extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
plugins.typedrequestInterfaces.ITypedRequest,
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
IRequest_DeleteCluster
|
IReq_Any_Cloudly_DeleteClusterById
|
||||||
> {
|
> {
|
||||||
method: 'deleteCluster';
|
method: 'deleteClusterById';
|
||||||
request: {
|
request: {
|
||||||
identity: userInterfaces.IIdentity;
|
identity: userInterfaces.IIdentity;
|
||||||
clusterId: string;
|
clusterId: string;
|
||||||
};
|
};
|
||||||
response: {
|
response: {
|
||||||
success: boolean;
|
ok: boolean;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/cloudly',
|
name: '@serve.zone/cloudly',
|
||||||
version: '4.5.4',
|
version: '4.5.5',
|
||||||
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
||||||
}
|
}
|
||||||
|
@ -123,9 +123,9 @@ export const getAllDataAction = dataState.createAction(async (statePartArg) => {
|
|||||||
|
|
||||||
// Clusters
|
// Clusters
|
||||||
const trGetClusters =
|
const trGetClusters =
|
||||||
new domtools.plugins.typedrequest.TypedRequest<plugins.interfaces.requests.cluster.IRequest_GetAllClusters>(
|
new domtools.plugins.typedrequest.TypedRequest<plugins.interfaces.requests.cluster.IReq_Any_Cloudly_GetClusters>(
|
||||||
'/typedrequest',
|
'/typedrequest',
|
||||||
'getAllClusters'
|
'getClusters'
|
||||||
);
|
);
|
||||||
const responseClusters = await trGetClusters.fire({
|
const responseClusters = await trGetClusters.fire({
|
||||||
identity: loginStatePart.getState().identity,
|
identity: loginStatePart.getState().identity,
|
||||||
@ -260,7 +260,7 @@ export const addClusterAction = dataState.createAction(
|
|||||||
currentState = {
|
currentState = {
|
||||||
...currentState,
|
...currentState,
|
||||||
...{
|
...{
|
||||||
clusters: [...currentState.clusters, response.clusterConfig],
|
clusters: [...currentState.clusters, response.cluster],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return currentState;
|
return currentState;
|
||||||
|
Loading…
Reference in New Issue
Block a user