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.
Files changed (35) hide show
  1. package/dist/client/index.js +10 -1
  2. package/dist/externalVersion.js +14 -5
  3. package/dist/index.js +9 -0
  4. package/dist/server/actions/acl-cache.js +9 -0
  5. package/dist/server/actions/cache-monitor.js +9 -0
  6. package/dist/server/actions/cluster-nodes.js +9 -0
  7. package/dist/server/actions/event-queue-monitor.js +9 -0
  8. package/dist/server/actions/lock-monitor.js +9 -0
  9. package/dist/server/actions/orchestrator.js +9 -0
  10. package/dist/server/actions/package-manager.js +9 -0
  11. package/dist/server/actions/redis-monitor.js +9 -0
  12. package/dist/server/actions/tasks.js +9 -0
  13. package/dist/server/actions/workflow-executions.js +9 -0
  14. package/dist/server/adapters/redis-lock-adapter.js +9 -0
  15. package/dist/server/adapters/redis-node-registry.js +9 -0
  16. package/dist/server/adapters/redis-pubsub-adapter.js +9 -0
  17. package/dist/server/collections/orchestrator-settings.js +9 -0
  18. package/dist/server/collections/orchestrator-stacks.js +9 -0
  19. package/dist/server/collections/worker-packages-configs.js +9 -0
  20. package/dist/server/index.js +9 -0
  21. package/dist/server/orchestrator/PackageManager.js +10 -1
  22. package/dist/server/orchestrator/docker-adapter.js +58 -8
  23. package/dist/server/orchestrator/index.js +9 -0
  24. package/dist/server/orchestrator/k8s-adapter.js +9 -0
  25. package/dist/server/orchestrator/leader-election.js +9 -0
  26. package/dist/server/orchestrator/types.js +9 -0
  27. package/dist/server/plugin.js +9 -0
  28. package/dist/server/utils/node.js +9 -0
  29. package/dist/server/utils/redis.js +9 -0
  30. package/dist/shared/packages.js +9 -0
  31. package/package.json +4 -2
  32. package/src/client/ContainerOrchestrator.tsx +3 -3
  33. package/src/client/PackageInstaller.tsx +1 -1
  34. package/src/server/orchestrator/PackageManager.ts +2 -2
  35. 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: this.buildEnvArray(stack.envVars),
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: stack.volumes || [],
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 (stack.networkMode) {
135
- createOpts.HostConfig.NetworkMode = stack.networkMode;
136
- } else if (stack.networks && stack.networks.length > 0) {
137
- createOpts.HostConfig.NetworkMode = stack.networks[0];
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
  }