plugin-cluster-manager 1.0.12 → 1.1.0
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/dist/client/index.js +10 -1
- package/dist/externalVersion.js +14 -5
- package/dist/index.js +9 -0
- package/dist/server/actions/acl-cache.js +9 -0
- package/dist/server/actions/cache-monitor.js +9 -0
- package/dist/server/actions/cluster-nodes.js +9 -0
- package/dist/server/actions/event-queue-monitor.js +9 -0
- package/dist/server/actions/lock-monitor.js +9 -0
- package/dist/server/actions/orchestrator.js +9 -0
- package/dist/server/actions/package-manager.js +9 -0
- package/dist/server/actions/redis-monitor.js +9 -0
- package/dist/server/actions/tasks.js +9 -0
- package/dist/server/actions/workflow-executions.js +9 -0
- package/dist/server/adapters/redis-lock-adapter.js +9 -0
- package/dist/server/adapters/redis-node-registry.js +9 -0
- package/dist/server/adapters/redis-pubsub-adapter.js +9 -0
- package/dist/server/collections/orchestrator-settings.js +9 -0
- package/dist/server/collections/orchestrator-stacks.js +9 -0
- package/dist/server/collections/worker-packages-configs.js +9 -0
- package/dist/server/index.js +9 -0
- package/dist/server/orchestrator/PackageManager.js +10 -1
- package/dist/server/orchestrator/docker-adapter.js +58 -8
- package/dist/server/orchestrator/index.js +9 -0
- package/dist/server/orchestrator/k8s-adapter.js +9 -0
- package/dist/server/orchestrator/leader-election.js +9 -0
- package/dist/server/orchestrator/types.js +9 -0
- package/dist/server/plugin.js +9 -0
- package/dist/server/utils/node.js +9 -0
- package/dist/server/utils/redis.js +9 -0
- package/dist/shared/packages.js +9 -0
- package/package.json +4 -2
- package/src/client/ContainerOrchestrator.tsx +3 -3
- package/src/client/PackageInstaller.tsx +1 -1
- package/src/server/orchestrator/PackageManager.ts +2 -2
- package/src/server/orchestrator/docker-adapter.ts +61 -6
|
@@ -104,6 +104,48 @@ export class DockerAdapter implements IOrchestratorAdapter {
|
|
|
104
104
|
|
|
105
105
|
if (diff > 0) {
|
|
106
106
|
// Scale UP
|
|
107
|
+
let targetNetworks = stack.networks && stack.networks.length > 0 ? stack.networks : [];
|
|
108
|
+
let targetNetworkMode = stack.networkMode;
|
|
109
|
+
let targetEnvVars = this.buildEnvArray(stack.envVars);
|
|
110
|
+
let targetVolumes = stack.volumes || [];
|
|
111
|
+
|
|
112
|
+
// Auto-detect current container's configuration to inherit networks and env vars
|
|
113
|
+
try {
|
|
114
|
+
const os = require('os');
|
|
115
|
+
const myContainerId = os.hostname();
|
|
116
|
+
const myContainer = this.docker.getContainer(myContainerId);
|
|
117
|
+
const myInfo = await myContainer.inspect();
|
|
118
|
+
|
|
119
|
+
// Inherit Networks if none specified
|
|
120
|
+
if (!targetNetworkMode && targetNetworks.length === 0) {
|
|
121
|
+
if (myInfo?.NetworkSettings?.Networks) {
|
|
122
|
+
targetNetworks = Object.keys(myInfo.NetworkSettings.Networks);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Inherit Environment Variables and merge with stack.envVars
|
|
127
|
+
if (myInfo?.Config?.Env) {
|
|
128
|
+
const envDict: Record<string, string> = {};
|
|
129
|
+
myInfo.Config.Env.forEach((e: string) => {
|
|
130
|
+
const idx = e.indexOf('=');
|
|
131
|
+
if (idx !== -1) {
|
|
132
|
+
envDict[e.substring(0, idx)] = e.substring(idx + 1);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
// Overwrite with explicitly defined env vars
|
|
136
|
+
Object.assign(envDict, stack.envVars || {});
|
|
137
|
+
targetEnvVars = Object.entries(envDict).map(([k, v]) => `${k}=${v}`);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Inherit Volumes (Binds)
|
|
141
|
+
if (myInfo?.HostConfig?.Binds) {
|
|
142
|
+
const inheritedBinds = myInfo.HostConfig.Binds as string[];
|
|
143
|
+
targetVolumes = Array.from(new Set([...inheritedBinds, ...targetVolumes]));
|
|
144
|
+
}
|
|
145
|
+
} catch (e) {
|
|
146
|
+
// Ignore error if not running in a container or cannot inspect
|
|
147
|
+
}
|
|
148
|
+
|
|
107
149
|
for (let i = 0; i < diff; i++) {
|
|
108
150
|
const suffix = `${Date.now()}-${Math.random().toString(36).substring(2, 6)}`;
|
|
109
151
|
const containerName = `${stack.name}-${suffix}`;
|
|
@@ -111,14 +153,14 @@ export class DockerAdapter implements IOrchestratorAdapter {
|
|
|
111
153
|
const createOpts: any = {
|
|
112
154
|
Image: stack.image,
|
|
113
155
|
name: containerName,
|
|
114
|
-
Env:
|
|
156
|
+
Env: targetEnvVars,
|
|
115
157
|
Labels: {
|
|
116
158
|
[LABEL_STACK]: stack.name,
|
|
117
159
|
[LABEL_MANAGED]: 'true',
|
|
118
160
|
...this.workerLabels,
|
|
119
161
|
},
|
|
120
162
|
HostConfig: {
|
|
121
|
-
Binds:
|
|
163
|
+
Binds: targetVolumes,
|
|
122
164
|
RestartPolicy: { Name: stack.restartPolicy || 'unless-stopped' },
|
|
123
165
|
},
|
|
124
166
|
};
|
|
@@ -131,16 +173,29 @@ export class DockerAdapter implements IOrchestratorAdapter {
|
|
|
131
173
|
createOpts.HostConfig.Memory = this.parseMemory(stack.resourceLimits.memory);
|
|
132
174
|
}
|
|
133
175
|
|
|
134
|
-
if (
|
|
135
|
-
createOpts.HostConfig.NetworkMode =
|
|
136
|
-
} else if (
|
|
137
|
-
createOpts.HostConfig.NetworkMode =
|
|
176
|
+
if (targetNetworkMode) {
|
|
177
|
+
createOpts.HostConfig.NetworkMode = targetNetworkMode;
|
|
178
|
+
} else if (targetNetworks.length > 0) {
|
|
179
|
+
createOpts.HostConfig.NetworkMode = targetNetworks[0];
|
|
138
180
|
}
|
|
139
181
|
|
|
140
182
|
// Security hardening
|
|
141
183
|
createOpts.HostConfig.SecurityOpt = ['no-new-privileges:true'];
|
|
142
184
|
|
|
143
185
|
const container = await this.docker.createContainer(createOpts);
|
|
186
|
+
|
|
187
|
+
// Connect to additional networks before starting
|
|
188
|
+
if (!targetNetworkMode && targetNetworks.length > 1) {
|
|
189
|
+
for (let i = 1; i < targetNetworks.length; i++) {
|
|
190
|
+
try {
|
|
191
|
+
const net = this.docker.getNetwork(targetNetworks[i]);
|
|
192
|
+
await net.connect({ Container: container.id });
|
|
193
|
+
} catch (err: any) {
|
|
194
|
+
console.warn(`[DockerAdapter] Failed to connect container ${container.id} to network ${targetNetworks[i]}: ${err.message}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
144
199
|
await container.start();
|
|
145
200
|
result.containersCreated!.push(container.id.substring(0, 12));
|
|
146
201
|
}
|