classes/plugins/RedisPlugin.js
const nunjucks = require('nunjucks');
const cleanupBuilder = require('../phase/cleanup');
const dependencycheckBuilder = require('../phase/dependencycheck');
const optionsBuilder = require('../phase/options');
const BaseConfigFile = require('../core/configFile/BaseConfigFile');
const Strings = require('../core/Strings');
const CEnvVars = require('../core/CEnvVars');
const sourceTypeBuilder = require('../core/SourceType');
const BasePlugin = require('./BasePlugin');
class RedisPlugin extends BasePlugin {
static instance() {
return new RedisPlugin();
}
exec(softwareComponentName, userConfig, runtimeConfiguration) {
super.exec(softwareComponentName, userConfig, runtimeConfiguration);
const { Name: systemName } = userConfig.config;
const { EnvVars = [], DockerImage = 'redis', ExposedPort = '6379', DockerMemory } = userConfig.software[softwareComponentName];
const defaultVersion = ((userConfig.versions || {})[softwareComponentName] || {}).Docker || 'latest';
dependencycheckBuilder.add('docker --version 1>/dev/null');
optionsBuilder.addDetails(softwareComponentName, 'docker:' + defaultVersion, [
`${softwareComponentName}:local #reuse a local, running Redis installation, does not start/stop this Redis`,
`${softwareComponentName}:docker:[3|4] #start docker, default tag ${defaultVersion}, uses image ${Strings.dockerLink(DockerImage)}`
]);
const configFiles = runtimeConfiguration.getConfigFiles(softwareComponentName);
sourceTypeBuilder.add(this, {
componentName: softwareComponentName,
defaultType: 'docker',
availableTypes: [
{ typeName: 'docker', defaultVersion },
{ typeName: 'local', defaultVersion: '' }
]
});
cleanupBuilder.add({
pluginName: 'redis',
componentName: softwareComponentName,
sourceTypes: [{
name: 'docker',
stopCode: 'docker rm -f $dockerContainerID' + softwareComponentName
}]
});
const typeSourceVarName = `TYPE_SOURCE_${softwareComponentName.toUpperCase()}`;
const pidFile = `.${softwareComponentName}Pid`;
const dcId = `dockerContainerID${softwareComponentName}`;
const envVars = new CEnvVars(softwareComponentName, EnvVars);
const mountToDocker = configFiles.map(f => f.mountToDocker(envVars)).join(' ');
this.build = () => nunjucks.render('classes/plugins/RedisPlugin.tmpl', {
...this.nunjucksObj(),
typeSourceVarName,
softwareComponentName,
systemName,
pidFile,
dcId,
DockerImage,
ExposedPort,
DockerMemory,
AllEnvVarsDocker: envVars.toDocker(),
writeConfigFiles: configFiles.map(f => f.createFile()).join('\n'),
writeDockerConnectionLogic: BaseConfigFile.writeDockerConnectionLogic(configFiles, envVars),
mountToDocker
});
}
}
module.exports = RedisPlugin;