Skip to content

Commit

Permalink
feat(config): Verify server tags when Butler SOS starts
Browse files Browse the repository at this point in the history
Implements #815
  • Loading branch information
Göran Sander committed Jun 4, 2024
1 parent 2384b6c commit a30c34b
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions src/lib/config-file-verify.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,61 @@ async function verifyConfigFile() {
}
}

// Verify that server tags are correctly defined
// In the config file section `Butler-SOS.serversToMonitor.serverTagsDefinition` it's possible to define zero or more tags that can be set for each server that is to be monitored.
// When Butler SOS is started, do the following checks:
// 1. All tags present in `Butler-SOS.serversToMonitor.serverTagsDefinition` must be set for each server in `SOS.serversToMonitor.servers[]`
// 2. The tags specified for each server in `SOS.serversToMonitor.servers[].serverTags` must be present in `Butler-SOS.serversToMonitor.serverTagsDefinition`
// If either of the conditions above is false, an error should be logged and Butler SOS should not start.
try {

// Loop over all defined server tags
const serverTagsDefinition = config.get(
'Butler-SOS.serversToMonitor.serverTagsDefinition'
);
// eslint-disable-next-line no-restricted-syntax
for (const tag of serverTagsDefinition) {
// Check that all servers have this tag
const servers = config.get('Butler-SOS.serversToMonitor.servers');
// eslint-disable-next-line no-restricted-syntax
for (const server of servers) {
// Check if server.serverTags.tag is defined
if (server?.serverTags === null || !server?.serverTags[tag]) {
logger.error(
`VERIFY CONFIG FILE: Server tag "${tag}" is not defined for server "${server.serverName}". Exiting.`
);
process.exit(1);
} else {
logger.verbose(
`VERIFY CONFIG FILE: Server tag "${tag}" is defined for server "${server.serverName}".`
);
}
}
}

// Now ensure that the tags defined for each server are valid and that there are no extra tags there
const servers = config.get('Butler-SOS.serversToMonitor.servers');
// eslint-disable-next-line no-restricted-syntax
for (const server of servers) {
// eslint-disable-next-line no-restricted-syntax
for (const tag in server.serverTags) {
if (!serverTagsDefinition.includes(tag)) {
logger.error(
`VERIFY CONFIG FILE: Server tag "${tag}" for server "${server.serverName}" is not defined in Butler-SOS.serversToMonitor.serverTagsDefinition. Exiting.`
);
process.exit(1);
} else {
logger.verbose(
`VERIFY CONFIG FILE: Server tag "${tag}" is defined in Butler-SOS.serversToMonitor.serverTagsDefinition.`
);
}
}
}
} catch (err) {
logger.error(`VERIFY CONFIG FILE: Server tags verification failed. ${err}`);
process.exit(1);
}

logger.info(`VERIFY CONFIG FILE: Your config file at ${configFile} is valid, good work!`);

return 'boolean';
Expand Down

0 comments on commit a30c34b

Please sign in to comment.