diff --git a/CHANGELOG.md b/CHANGELOG.md index 60f80bb9..3ded288a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ Version 2.0.0 Clusterio core. Previously this was handled by the playerManager plugin. - Added stripping of long paths in the Factorio server log. - Added option to configure maximum number of commands to send in parallel. +- Added option to auto start instances on slave startup. ### Changes diff --git a/packages/lib/config/definitions.js b/packages/lib/config/definitions.js index 1cedf4fc..d15406ce 100644 --- a/packages/lib/config/definitions.js +++ b/packages/lib/config/definitions.js @@ -196,6 +196,12 @@ InstanceGroup.define({ type: "number", optional: true, }); +InstanceGroup.define({ + name: "auto_start", + description: "Automatically start this instance when the slave hosting it is started up", + type: "boolean", + initial_value: false, +}); InstanceGroup.finalize(); /** diff --git a/packages/slave/slave.js b/packages/slave/slave.js index ad3283bb..dfaff915 100755 --- a/packages/slave/slave.js +++ b/packages/slave/slave.js @@ -924,6 +924,7 @@ class Slave extends libLink.Link { this.serverPlugins = new Map(Object.entries(data.plugins)); }); + this._startup = true; this._disconnecting = false; this._shuttingDown = false; @@ -1296,6 +1297,26 @@ class Slave extends libLink.Link { }); } await libLink.messages.updateInstances.send(this, { instances: list }); + + // Handle configured auto startup instances + if (this._startup) { + this._startup = false; + + for (let [instanceId, instanceInfo] of this.instanceInfos) { + if (instanceInfo.config.get("instance.auto_start")) { + try { + let instanceConnection = await this._connectInstance(instanceId); + await libLink.messages.startInstance.send(instanceConnection, { + instance_id: instanceId, + save: null, + }); + } catch (err) { + console.error(`Error during auto startup for ${instanceInfo.config.get("instance.name")}:`); + console.error(err); + } + } + } + } } async prepareDisconnectRequestHandler(message, request) {