Skip to content

Commit

Permalink
Merge pull request #429 from pelias/check_version
Browse files Browse the repository at this point in the history
add check_version.js script
  • Loading branch information
orangejulius authored Jan 10, 2020
2 parents bc32629 + ac43c24 commit 2cad502
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 19 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
"elasticsearch": "^16.0.0",
"lodash": "^4.17.15",
"pelias-config": "^4.5.0",
"pelias-logger": "^1.3.0"
"pelias-logger": "^1.3.0",
"semver": "^7.1.1"
},
"devDependencies": {
"difflet": "^1.0.1",
Expand Down
23 changes: 8 additions & 15 deletions scripts/check_plugins.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,13 @@ const config = require('pelias-config').generate();
const es = require('elasticsearch');
const client = new es.Client(config.esclient);
const cli = require('./cli');
const schema = require('../schema');

// mandatory plugins
const plugins = [ 'analysis-icu' ];
const required = ['analysis-icu'];

// list of failures
let failures = [];

// helper strings for output
const success = colors.green('✔');
const failure = colors.red('✖');

// returns the appropriate plugin name for the configured Elasticsearch version
function elasticsearchPluginUtility() {
if (config.esclient.apiVersion === '2.4') {
Expand All @@ -25,7 +20,7 @@ function elasticsearchPluginUtility() {
}

cli.header("checking elasticsearch plugins");
client.nodes.info( null, function( err, res ){
client.nodes.info(null, (err, res) => {

if( err ){
console.error(err);
Expand Down Expand Up @@ -53,16 +48,14 @@ client.nodes.info( null, function( err, res ){
// per node failures
let node_failures = [];

// iterate over all installed plugins on this node
plugins.forEach( function( plugin ){
// iterate over all required plugins
required.forEach(plugin => {

// bool, is the plugin currently installed?
const isInstalled = !!node.plugins.filter( function( installedPlugin ){
return installedPlugin.name == plugin;
}).length;
const isInstalled = node.plugins.some(installed => installed.name === plugin);

// output status to terminal
console.log( ` checking plugin '${plugin}': ${isInstalled ? success : failure}` );
console.log( ` checking plugin '${plugin}': ${isInstalled ? cli.status.success : cli.status.failure}` );

// record this plugin as not installed yet
if( !isInstalled ){
Expand All @@ -80,9 +73,9 @@ client.nodes.info( null, function( err, res ){
if( failures.length ){
console.error( colors.red(`${failures.length} required plugin(s) are not installed on the node(s) shown above.` ) );
console.error( "you must install the plugins before continuing with the installation.");
failures.forEach( function( failure ){
failures.forEach(failure => {
console.error( `\nyou can install the missing packages on '${failure.node.name}' [${failure.node.ip}] with the following command(s):\n` );
failure.plugins.forEach( function( plugin ){
failure.plugins.forEach(plugin => {
console.error( colors.green( `sudo ${failure.node.settings.path.home}/bin/${elasticsearchPluginUtility()} install ${plugin}`) );
});
});
Expand Down
33 changes: 33 additions & 0 deletions scripts/check_version.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const _ = require('lodash');
const semver = require('semver');
const es = require('elasticsearch');
const config = require('pelias-config').generate();
const client = new es.Client(config.esclient);
const cli = require('./cli');

// pass target elastic version semver as the first CLI arg
const targetVersion = process.argv[2];
if(!targetVersion){
console.error('you must pass a target elasticsearch version semver as the first argument');
process.exit(1);
}

cli.header(`checking elasticsearch server version matches "${targetVersion}"`);
client.info(null, (err, res) => {

if (err) {
console.error(err);
process.exit(1);
}

const version = _.get(res, 'version.number', '0.0.0');

// pretty print error message
if (!semver.satisfies(version, targetVersion)) {
console.log(`${cli.status.failure} ${version}\n`);
process.exit(1)
}

console.log(`${cli.status.success} ${version}\n`);
console.log();
});
8 changes: 7 additions & 1 deletion scripts/cli.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@

var util = require('util');
const util = require('util');
const colors = require('colors/safe');

module.exports.header = function( text ){
var rule = new Array( text.length + 3 ).join("-");
console.log( util.format("\n\033[0;33m%s\n %s \n%s\033[0m\n", rule, text, rule ) );
}

module.exports.status = {
success: colors.green('✔'),
failure: colors.red('✖')
}
13 changes: 11 additions & 2 deletions scripts/create_index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
const child_process = require('child_process');
const config = require('pelias-config').generate();
const es = require('elasticsearch');
const SUPPORTED_ES_VERSIONS = '>=6.5.4 || >=7.4.2';

const cli = require('./cli');
const schema = require('../schema');

cli.header("create index");

const client = new es.Client(config.esclient);

// check minimum elasticsearch versions before continuing
try {
child_process.execSync(`node ${__dirname}/check_version.js "${SUPPORTED_ES_VERSIONS}"`);
} catch (e) {
console.error(`unsupported elasticsearch version. try: ${SUPPORTED_ES_VERSIONS}\n`);
process.exit(1);
}

// check mandatory plugins are installed before continuing
try {
child_process.execSync(`node ${__dirname}/check_plugins.js`);
Expand All @@ -15,8 +26,6 @@ try {
process.exit(1);
}

cli.header("create index");

const indexName = config.schema.indexName;
const req = {
index: indexName,
Expand Down

0 comments on commit 2cad502

Please sign in to comment.