plugin-cluster-manager 1.1.0 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -5
- package/dist/client/index.js +1 -1
- package/dist/externalVersion.js +5 -5
- package/dist/locale/en-US.json +28 -4
- package/dist/locale/vi-VN.json +28 -4
- package/dist/locale/zh-CN.json +28 -4
- package/dist/server/actions/event-queue-monitor.js +123 -1
- package/dist/server/actions/orchestrator.js +20 -1
- package/dist/server/actions/plugin-operations.js +171 -0
- package/dist/server/collections/app.js +38 -0
- package/dist/server/collections/cluster-manager-acl-cache.js +44 -0
- package/dist/server/collections/cluster-manager-cache-mgr.js +44 -0
- package/dist/server/collections/cluster-manager-cluster.js +44 -0
- package/dist/server/collections/cluster-manager-lock.js +44 -0
- package/dist/server/collections/cluster-manager-plugins.js +44 -0
- package/dist/server/collections/cluster-manager-queue.js +44 -0
- package/dist/server/collections/cluster-manager-redis.js +44 -0
- package/dist/server/collections/cluster-manager-workflow.js +44 -0
- package/dist/server/collections/cluster-manager.js +44 -0
- package/dist/server/collections/worker-orchestrator.js +44 -0
- package/dist/server/collections/worker-packages.js +44 -0
- package/dist/server/orchestrator/docker-adapter.js +19 -6
- package/dist/server/plugin.js +9 -3
- package/package.json +9 -4
- package/src/client/ClusterManagerLayout.tsx +16 -10
- package/src/client/ContainerOrchestrator.tsx +38 -3
- package/src/client/EventQueueMonitor.tsx +349 -202
- package/src/client/PluginOperations.tsx +226 -0
- package/src/locale/en-US.json +28 -4
- package/src/locale/vi-VN.json +28 -4
- package/src/locale/zh-CN.json +28 -4
- package/src/server/actions/event-queue-monitor.ts +234 -95
- package/src/server/actions/orchestrator.ts +21 -1
- package/src/server/actions/plugin-operations.ts +151 -0
- package/src/server/collections/app.ts +7 -0
- package/src/server/collections/cluster-manager-acl-cache.ts +23 -0
- package/src/server/collections/cluster-manager-cache-mgr.ts +23 -0
- package/src/server/collections/cluster-manager-cluster.ts +23 -0
- package/src/server/collections/cluster-manager-lock.ts +23 -0
- package/src/server/collections/cluster-manager-plugins.ts +19 -0
- package/src/server/collections/cluster-manager-queue.ts +23 -0
- package/src/server/collections/cluster-manager-redis.ts +23 -0
- package/src/server/collections/cluster-manager-workflow.ts +23 -0
- package/src/server/collections/cluster-manager.ts +23 -0
- package/src/server/collections/worker-orchestrator.ts +23 -0
- package/src/server/collections/worker-packages.ts +23 -0
- package/src/server/orchestrator/docker-adapter.ts +25 -9
- package/src/server/orchestrator/types.ts +3 -0
- package/src/server/plugin.ts +29 -21
- package/dist/client/AclCacheManager.d.ts +0 -2
- package/dist/client/CacheMonitor.d.ts +0 -2
- package/dist/client/ClusterManagerLayout.d.ts +0 -2
- package/dist/client/ClusterNodes.d.ts +0 -2
- package/dist/client/ContainerOrchestrator.d.ts +0 -2
- package/dist/client/EventQueueMonitor.d.ts +0 -2
- package/dist/client/LockMonitor.d.ts +0 -2
- package/dist/client/PackageInstaller.d.ts +0 -2
- package/dist/client/RedisMonitor.d.ts +0 -2
- package/dist/client/TaskManager.d.ts +0 -2
- package/dist/client/WorkflowExecutions.d.ts +0 -2
- package/dist/client/index.d.ts +0 -5
- package/dist/client/utils.d.ts +0 -12
- package/dist/index.d.ts +0 -2
- package/dist/server/actions/acl-cache.d.ts +0 -53
- package/dist/server/actions/cache-monitor.d.ts +0 -23
- package/dist/server/actions/cluster-nodes.d.ts +0 -49
- package/dist/server/actions/event-queue-monitor.d.ts +0 -13
- package/dist/server/actions/lock-monitor.d.ts +0 -19
- package/dist/server/actions/orchestrator.d.ts +0 -53
- package/dist/server/actions/package-manager.d.ts +0 -6
- package/dist/server/actions/redis-monitor.d.ts +0 -12
- package/dist/server/actions/tasks.d.ts +0 -7
- package/dist/server/actions/workflow-executions.d.ts +0 -7
- package/dist/server/adapters/redis-lock-adapter.d.ts +0 -15
- package/dist/server/adapters/redis-node-registry.d.ts +0 -12
- package/dist/server/adapters/redis-pubsub-adapter.d.ts +0 -16
- package/dist/server/collections/orchestrator-settings.d.ts +0 -59
- package/dist/server/collections/orchestrator-stacks.d.ts +0 -102
- package/dist/server/collections/worker-packages-configs.d.ts +0 -3
- package/dist/server/index.d.ts +0 -1
- package/dist/server/orchestrator/PackageManager.d.ts +0 -37
- package/dist/server/orchestrator/docker-adapter.d.ts +0 -37
- package/dist/server/orchestrator/index.d.ts +0 -4
- package/dist/server/orchestrator/k8s-adapter.d.ts +0 -50
- package/dist/server/orchestrator/leader-election.d.ts +0 -48
- package/dist/server/orchestrator/types.d.ts +0 -79
- package/dist/server/plugin.d.ts +0 -26
- package/dist/server/utils/node.d.ts +0 -6
- package/dist/server/utils/redis.d.ts +0 -29
- package/dist/shared/packages.d.ts +0 -23
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var cluster_manager_lock_exports = {};
|
|
28
|
+
__export(cluster_manager_lock_exports, {
|
|
29
|
+
default: () => cluster_manager_lock_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(cluster_manager_lock_exports);
|
|
32
|
+
var cluster_manager_lock_default = {
|
|
33
|
+
name: "clusterManagerLock",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var cluster_manager_plugins_exports = {};
|
|
28
|
+
__export(cluster_manager_plugins_exports, {
|
|
29
|
+
default: () => cluster_manager_plugins_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(cluster_manager_plugins_exports);
|
|
32
|
+
var cluster_manager_plugins_default = {
|
|
33
|
+
name: "clusterManagerPlugins",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var cluster_manager_queue_exports = {};
|
|
28
|
+
__export(cluster_manager_queue_exports, {
|
|
29
|
+
default: () => cluster_manager_queue_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(cluster_manager_queue_exports);
|
|
32
|
+
var cluster_manager_queue_default = {
|
|
33
|
+
name: "clusterManagerQueue",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var cluster_manager_redis_exports = {};
|
|
28
|
+
__export(cluster_manager_redis_exports, {
|
|
29
|
+
default: () => cluster_manager_redis_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(cluster_manager_redis_exports);
|
|
32
|
+
var cluster_manager_redis_default = {
|
|
33
|
+
name: "clusterManagerRedis",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var cluster_manager_workflow_exports = {};
|
|
28
|
+
__export(cluster_manager_workflow_exports, {
|
|
29
|
+
default: () => cluster_manager_workflow_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(cluster_manager_workflow_exports);
|
|
32
|
+
var cluster_manager_workflow_default = {
|
|
33
|
+
name: "clusterManagerWorkflow",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var cluster_manager_exports = {};
|
|
28
|
+
__export(cluster_manager_exports, {
|
|
29
|
+
default: () => cluster_manager_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(cluster_manager_exports);
|
|
32
|
+
var cluster_manager_default = {
|
|
33
|
+
name: "clusterManager",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var worker_orchestrator_exports = {};
|
|
28
|
+
__export(worker_orchestrator_exports, {
|
|
29
|
+
default: () => worker_orchestrator_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(worker_orchestrator_exports);
|
|
32
|
+
var worker_orchestrator_default = {
|
|
33
|
+
name: "workerOrchestrator",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var worker_packages_exports = {};
|
|
28
|
+
__export(worker_packages_exports, {
|
|
29
|
+
default: () => worker_packages_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(worker_packages_exports);
|
|
32
|
+
var worker_packages_default = {
|
|
33
|
+
name: "workerPackages",
|
|
34
|
+
dumpRules: "skip",
|
|
35
|
+
autoGenId: true,
|
|
36
|
+
createdAt: false,
|
|
37
|
+
updatedAt: false,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: "name",
|
|
41
|
+
type: "string"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
};
|
|
@@ -120,10 +120,10 @@ class DockerAdapter {
|
|
|
120
120
|
const myContainerId = os.hostname();
|
|
121
121
|
const myContainer = this.docker.getContainer(myContainerId);
|
|
122
122
|
const myInfo = await myContainer.inspect();
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
if ((_a = myInfo == null ? void 0 : myInfo.NetworkSettings) == null ? void 0 : _a.Networks) {
|
|
124
|
+
const inheritedNetworks = Object.keys(myInfo.NetworkSettings.Networks);
|
|
125
|
+
targetNetworks = Array.from(/* @__PURE__ */ new Set([...inheritedNetworks, ...targetNetworks]));
|
|
126
|
+
console.log("[DockerAdapter] Inherited networks:", targetNetworks);
|
|
127
127
|
}
|
|
128
128
|
if ((_b = myInfo == null ? void 0 : myInfo.Config) == null ? void 0 : _b.Env) {
|
|
129
129
|
const envDict = {};
|
|
@@ -141,6 +141,11 @@ class DockerAdapter {
|
|
|
141
141
|
targetVolumes = Array.from(/* @__PURE__ */ new Set([...inheritedBinds, ...targetVolumes]));
|
|
142
142
|
}
|
|
143
143
|
} catch (e) {
|
|
144
|
+
console.error("[DockerAdapter] Failed to inherit container config:", e.message);
|
|
145
|
+
}
|
|
146
|
+
const hasLoggerBase = targetEnvVars.some((e) => e.startsWith("LOGGER_BASE_PATH="));
|
|
147
|
+
if (!hasLoggerBase) {
|
|
148
|
+
targetEnvVars.push(`LOGGER_BASE_PATH=/app/nocobase/storage/logs/${stack.name}`);
|
|
144
149
|
}
|
|
145
150
|
for (let i = 0; i < diff; i++) {
|
|
146
151
|
const suffix = `${Date.now()}-${Math.random().toString(36).substring(2, 6)}`;
|
|
@@ -172,8 +177,9 @@ class DockerAdapter {
|
|
|
172
177
|
}
|
|
173
178
|
createOpts.HostConfig.SecurityOpt = ["no-new-privileges:true"];
|
|
174
179
|
const container = await this.docker.createContainer(createOpts);
|
|
175
|
-
if (
|
|
176
|
-
|
|
180
|
+
if (targetNetworks.length > 0) {
|
|
181
|
+
const startIndex = targetNetworkMode ? 0 : 1;
|
|
182
|
+
for (let i2 = startIndex; i2 < targetNetworks.length; i2++) {
|
|
177
183
|
try {
|
|
178
184
|
const net = this.docker.getNetwork(targetNetworks[i2]);
|
|
179
185
|
await net.connect({ Container: container.id });
|
|
@@ -254,6 +260,13 @@ class DockerAdapter {
|
|
|
254
260
|
});
|
|
255
261
|
return this.demuxDockerLogs(logBuffer);
|
|
256
262
|
}
|
|
263
|
+
async listNetworks() {
|
|
264
|
+
const networks = await this.docker.listNetworks();
|
|
265
|
+
return networks.map((n) => ({
|
|
266
|
+
id: n.Id,
|
|
267
|
+
name: n.Name
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
257
270
|
// ─── Private helpers ───
|
|
258
271
|
mapState(state) {
|
|
259
272
|
switch (state) {
|
package/dist/server/plugin.js
CHANGED
|
@@ -57,6 +57,7 @@ var import_redis_pubsub_adapter = require("./adapters/redis-pubsub-adapter");
|
|
|
57
57
|
var import_redis_node_registry = require("./adapters/redis-node-registry");
|
|
58
58
|
var import_redis_lock_adapter = require("./adapters/redis-lock-adapter");
|
|
59
59
|
var import_orchestrator = require("./actions/orchestrator");
|
|
60
|
+
var import_plugin_operations = require("./actions/plugin-operations");
|
|
60
61
|
var import_docker_adapter = require("./orchestrator/docker-adapter");
|
|
61
62
|
var import_k8s_adapter = require("./orchestrator/k8s-adapter");
|
|
62
63
|
var import_leader_election = require("./orchestrator/leader-election");
|
|
@@ -67,7 +68,7 @@ class PluginClusterManagerServer extends import_server.Plugin {
|
|
|
67
68
|
orchestrator = null;
|
|
68
69
|
leaderElection = null;
|
|
69
70
|
async beforeLoad() {
|
|
70
|
-
this.db.import({ directory: import_path.default.resolve(__dirname, "collections") });
|
|
71
|
+
await this.db.import({ directory: import_path.default.resolve(__dirname, "collections") });
|
|
71
72
|
}
|
|
72
73
|
async load() {
|
|
73
74
|
this.nodeRegistry = new import_redis_node_registry.RedisNodeRegistry(this.app);
|
|
@@ -247,6 +248,10 @@ class PluginClusterManagerServer extends import_server.Plugin {
|
|
|
247
248
|
name: "workerPackages",
|
|
248
249
|
actions: import_package_manager.packageManagerActions
|
|
249
250
|
});
|
|
251
|
+
this.app.resourcer.define({
|
|
252
|
+
name: "clusterManagerPlugins",
|
|
253
|
+
actions: import_plugin_operations.pluginOperationsActions
|
|
254
|
+
});
|
|
250
255
|
const aclCacheMiddleware = (0, import_acl_cache.createAclCacheMiddleware)(this.app);
|
|
251
256
|
this.app.acl.use(aclCacheMiddleware, {
|
|
252
257
|
tag: "aclCache",
|
|
@@ -277,7 +282,8 @@ class PluginClusterManagerServer extends import_server.Plugin {
|
|
|
277
282
|
"clusterManagerCacheMgr:*",
|
|
278
283
|
"workerOrchestrator:*",
|
|
279
284
|
"orchestratorStacks:*",
|
|
280
|
-
"workerPackages:*"
|
|
285
|
+
"workerPackages:*",
|
|
286
|
+
"clusterManagerPlugins:*"
|
|
281
287
|
]
|
|
282
288
|
});
|
|
283
289
|
await this.initOrchestrator();
|
|
@@ -354,7 +360,7 @@ class PluginClusterManagerServer extends import_server.Plugin {
|
|
|
354
360
|
k8sNamespace: "nocobase"
|
|
355
361
|
});
|
|
356
362
|
} else {
|
|
357
|
-
this.app.logger.info("[Orchestrator] No adapter configured \u2014 configurable via
|
|
363
|
+
this.app.logger.info("[Orchestrator] No adapter configured \u2014 configurable via Cluster Manager UI");
|
|
358
364
|
}
|
|
359
365
|
}
|
|
360
366
|
} catch (err) {
|
package/package.json
CHANGED
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
"displayName": "Cluster Manager",
|
|
4
4
|
"displayName.zh-CN": "Cluster Manager",
|
|
5
5
|
"description": "Cluster node tracking, task orchestration, worker management, and package distribution",
|
|
6
|
-
"version": "1.1.
|
|
6
|
+
"version": "1.1.6",
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
8
|
"main": "./dist/server/index.js",
|
|
9
|
-
"keywords": [
|
|
9
|
+
"keywords": [
|
|
10
|
+
"Monitoring",
|
|
11
|
+
"DevOps"
|
|
12
|
+
],
|
|
10
13
|
"files": [
|
|
11
14
|
"dist",
|
|
12
15
|
"src",
|
|
@@ -31,7 +34,9 @@
|
|
|
31
34
|
"uuid": "^9.0.1"
|
|
32
35
|
},
|
|
33
36
|
"nocobase": {
|
|
34
|
-
"supportedVersions": [
|
|
37
|
+
"supportedVersions": [
|
|
38
|
+
"2.x"
|
|
39
|
+
],
|
|
35
40
|
"editionLevel": 0
|
|
36
41
|
}
|
|
37
|
-
}
|
|
42
|
+
}
|
|
@@ -4,9 +4,10 @@ import { TaskManager } from './TaskManager';
|
|
|
4
4
|
import { WorkflowExecutions } from './WorkflowExecutions';
|
|
5
5
|
import { ClusterNodes } from './ClusterNodes';
|
|
6
6
|
import { CacheMonitor } from './CacheMonitor';
|
|
7
|
-
import { ContainerOrchestrator } from './ContainerOrchestrator';
|
|
8
|
-
import { PackageInstaller } from './PackageInstaller';
|
|
9
|
-
import {
|
|
7
|
+
import { ContainerOrchestrator } from './ContainerOrchestrator';
|
|
8
|
+
import { PackageInstaller } from './PackageInstaller';
|
|
9
|
+
import { PluginOperations } from './PluginOperations';
|
|
10
|
+
import { useT } from './utils';
|
|
10
11
|
|
|
11
12
|
export function ClusterManagerLayout() {
|
|
12
13
|
const t = useT();
|
|
@@ -40,13 +41,18 @@ export function ClusterManagerLayout() {
|
|
|
40
41
|
label: t('Container Orchestrator'),
|
|
41
42
|
children: <ContainerOrchestrator />,
|
|
42
43
|
},
|
|
43
|
-
{
|
|
44
|
-
key: 'packages',
|
|
45
|
-
label: t('Packages'),
|
|
46
|
-
children: <PackageInstaller />,
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
{
|
|
45
|
+
key: 'packages',
|
|
46
|
+
label: t('Packages'),
|
|
47
|
+
children: <PackageInstaller />,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: 'plugins',
|
|
51
|
+
label: t('Plugins'),
|
|
52
|
+
children: <PluginOperations />,
|
|
53
|
+
},
|
|
54
|
+
]}
|
|
55
|
+
/>
|
|
50
56
|
</div>
|
|
51
57
|
);
|
|
52
58
|
}
|
|
@@ -146,6 +146,7 @@ function stackToFormValues(stack?: StackInfo | null) {
|
|
|
146
146
|
k8sEnvFrom: jsonText(DEFAULT_K8S_ENV_FROM, []),
|
|
147
147
|
k8sVolumeMounts: jsonText(DEFAULT_K8S_VOLUME_MOUNTS, []),
|
|
148
148
|
k8sVolumes: jsonText(DEFAULT_K8S_VOLUMES, []),
|
|
149
|
+
networkMode: '',
|
|
149
150
|
};
|
|
150
151
|
}
|
|
151
152
|
|
|
@@ -196,6 +197,19 @@ export function ContainerOrchestrator() {
|
|
|
196
197
|
});
|
|
197
198
|
const [settingsForm] = Form.useForm();
|
|
198
199
|
const [stackForm] = Form.useForm();
|
|
200
|
+
const [dockerNetworks, setDockerNetworks] = useState<{id: string, name: string}[]>([]);
|
|
201
|
+
|
|
202
|
+
// Fetch Docker networks
|
|
203
|
+
const fetchNetworks = useCallback(async () => {
|
|
204
|
+
try {
|
|
205
|
+
const res = await api.request({ url: '/workerOrchestrator:networks' });
|
|
206
|
+
let networks = res.data?.data || res.data;
|
|
207
|
+
if (!Array.isArray(networks)) networks = [];
|
|
208
|
+
setDockerNetworks(networks);
|
|
209
|
+
} catch {
|
|
210
|
+
setDockerNetworks([]);
|
|
211
|
+
}
|
|
212
|
+
}, [api]);
|
|
199
213
|
|
|
200
214
|
// Ping the orchestrator adapter
|
|
201
215
|
const fetchPing = useCallback(async () => {
|
|
@@ -268,6 +282,7 @@ export function ContainerOrchestrator() {
|
|
|
268
282
|
const openStackModal = (stack?: StackInfo) => {
|
|
269
283
|
setStackModal({ visible: true, stack: stack || null });
|
|
270
284
|
stackForm.setFieldsValue(stackToFormValues(stack));
|
|
285
|
+
fetchNetworks();
|
|
271
286
|
};
|
|
272
287
|
|
|
273
288
|
const closeStackModal = () => {
|
|
@@ -774,18 +789,38 @@ export function ContainerOrchestrator() {
|
|
|
774
789
|
</Col>
|
|
775
790
|
</Row>
|
|
776
791
|
|
|
777
|
-
{/* Row 4: Container name | Namespace */}
|
|
792
|
+
{/* Row 4: Container name | Namespace | Network Mode */}
|
|
778
793
|
<Row gutter={12}>
|
|
779
|
-
<Col span={
|
|
794
|
+
<Col span={8}>
|
|
780
795
|
<Form.Item name="k8sContainerName" label={t('Container name')}>
|
|
781
796
|
<Input placeholder="worker" />
|
|
782
797
|
</Form.Item>
|
|
783
798
|
</Col>
|
|
784
|
-
<Col span={
|
|
799
|
+
<Col span={8}>
|
|
785
800
|
<Form.Item name="namespace" label={t('Namespace')}>
|
|
786
801
|
<Input placeholder="nocobase" />
|
|
787
802
|
</Form.Item>
|
|
788
803
|
</Col>
|
|
804
|
+
<Col span={8}>
|
|
805
|
+
<Form.Item noStyle shouldUpdate={(prev, curr) => prev.adapter !== curr.adapter}>
|
|
806
|
+
{() => {
|
|
807
|
+
if (stackForm.getFieldValue('adapter') === 'docker') {
|
|
808
|
+
return (
|
|
809
|
+
<Form.Item name="networkMode" label={t('Docker Network')} extra={t('Main network. Workers also inherit app networks.')}>
|
|
810
|
+
<Select allowClear placeholder={t('Default (bridge)')}>
|
|
811
|
+
<Select.Option value="bridge">bridge</Select.Option>
|
|
812
|
+
<Select.Option value="host">host</Select.Option>
|
|
813
|
+
{(Array.isArray(dockerNetworks) ? dockerNetworks : []).map(n => (
|
|
814
|
+
<Select.Option key={n.id} value={n.name}>{n.name}</Select.Option>
|
|
815
|
+
))}
|
|
816
|
+
</Select>
|
|
817
|
+
</Form.Item>
|
|
818
|
+
);
|
|
819
|
+
}
|
|
820
|
+
return null;
|
|
821
|
+
}}
|
|
822
|
+
</Form.Item>
|
|
823
|
+
</Col>
|
|
789
824
|
</Row>
|
|
790
825
|
|
|
791
826
|
<Form.Item name="command" label={t('Command')}>
|