Merge pull request #7457 from jbudz/issues/7157

[build] Add data directory for plugins
This commit is contained in:
Jonathan Budzenski 2016-06-21 07:45:25 -05:00 committed by GitHub
commit 62f258b83c
12 changed files with 71 additions and 22 deletions

View file

@ -3,6 +3,7 @@ import { statSync } from 'fs';
import { isWorker } from 'cluster';
import { resolve } from 'path';
import { fromRoot } from '../../utils';
import { getConfig } from '../../server/path';
import readYamlConfig from './read_yaml_config';
let canCluster;
@ -77,7 +78,7 @@ module.exports = function (program) {
'Path to the config file, can be changed with the CONFIG_PATH environment variable as well. ' +
'Use mulitple --config args to include multiple config files.',
configPathCollector,
[ process.env.CONFIG_PATH || fromRoot('config/kibana.yml') ]
[ getConfig() ]
)
.option('-p, --port <port>', 'The port to bind to', parseInt)
.option('-q, --quiet', 'Prevent all logging except errors')

View file

@ -3,6 +3,7 @@ import fs from 'fs';
import install from './install';
import Logger from '../lib/logger';
import pkg from '../../utils/package_json';
import { getConfig } from '../../server/path';
import { parse, parseMilliseconds } from './settings';
import { find } from 'lodash';
@ -20,24 +21,6 @@ function processCommand(command, options) {
install(settings, logger);
}
function getDefaultConfigPath() {
const paths = [
fromRoot('config/kibana.yml'),
'/etc/kibana/kibana.yml'
];
const availablePath = find(paths, configPath => {
try {
fs.accessSync(configPath, fs.R_OK);
return true;
} catch (e) {
//Check the next path
}
});
return availablePath || paths[0];
}
export default function pluginInstall(program) {
program
.command('install <plugin/url>')
@ -46,7 +29,7 @@ export default function pluginInstall(program) {
.option(
'-c, --config <path>',
'path to the config file',
getDefaultConfigPath()
getConfig()
)
.option(
'-t, --timeout <duration>',

View file

@ -2,6 +2,7 @@ import { fromRoot } from '../../utils';
import remove from './remove';
import Logger from '../lib/logger';
import { parse } from './settings';
import { getConfig } from '../../server/path';
function processCommand(command, options) {
let settings;
@ -25,7 +26,7 @@ export default function pluginRemove(program) {
.option(
'-c, --config <path>',
'path to the config file',
fromRoot('config/kibana.yml')
getConfig()
)
.option(
'-d, --plugin-dir <path>',

View file

@ -6,6 +6,7 @@ import { randomBytes } from 'crypto';
import os from 'os';
import { fromRoot } from '../../utils';
import { getData } from '../path';
module.exports = () => Joi.object({
pkg: Joi.object({
@ -95,6 +96,10 @@ module.exports = () => Joi.object({
initialize: Joi.boolean().default(true)
}).default(),
path: Joi.object({
data: Joi.string().default(getData())
}).default(),
optimize: Joi.object({
enabled: Joi.boolean().default(true),
bundleFilter: Joi.string().default('!tests'),

View file

@ -0,0 +1,15 @@
import expect from 'expect.js';
import path from '../';
import { accessSync, R_OK} from 'fs';
describe('Default path finder', function () {
it('should find a kibana.yml', () => {
const configPath = path.getConfig();
expect(() => accessSync(configPath, R_OK)).to.not.throwError();
});
it('should find a data directory', () => {
const dataPath = path.getData();
expect(() => accessSync(dataPath, R_OK)).to.not.throwError();
});
});

32
src/server/path/index.js Normal file
View file

@ -0,0 +1,32 @@
import { accessSync, R_OK} from 'fs';
import { find } from 'lodash';
import { fromRoot } from '../../utils';
const CONFIG_PATHS = [
process.env.CONFIG_PATH,
fromRoot('config/kibana.yml'),
'/etc/kibana/kibana.yml'
].filter(Boolean);
const DATA_PATHS = [
process.env.DATA_PATH,
fromRoot('installedPlugins/.data'),
'/var/lib/kibana'
].filter(Boolean);
function findFile(paths) {
const availablePath = find(paths, configPath => {
try {
accessSync(configPath, R_OK);
return true;
} catch (e) {
//Check the next path
}
});
return availablePath || paths[0];
}
export default {
getConfig: () => findFile(CONFIG_PATHS),
getData: () => findFile(DATA_PATHS)
};

View file

@ -1,5 +1,6 @@
module.exports = function (grunt) {
grunt.registerTask('_build:installedPlugins', function () {
grunt.file.mkdir('build/kibana/installedPlugins');
grunt.file.mkdir('build/kibana/installedPlugins/.data');
});
};

View file

@ -41,9 +41,11 @@ export default (grunt) => {
'--template-value', `optimizeDir=${packages.path.home}/optimize`,
'--template-value', `configDir=${packages.path.conf}`,
'--template-value', `pluginsDir=${packages.path.plugins}`,
'--template-value', `dataDir=${packages.path.data}`,
//config folder is moved to path.conf, exclude {path.home}/config
//uses relative path to --prefix, strip the leading /
'--exclude', `${packages.path.home.slice(1)}/config`
'--exclude', `${packages.path.home.slice(1)}/config`,
'--exclude', `${packages.path.home.slice(1)}/installedPlugins/.data`
];
const debOptions = [
'-t', 'deb',
@ -58,6 +60,7 @@ export default (grunt) => {
const args = [
`${buildDir}/=${packages.path.home}/`,
`${buildDir}/config/=${packages.path.conf}/`,
`${buildDir}/installedPlugins/.data/=${packages.path.data}/`,
`${servicesByName.sysv.outputDir}/etc/=/etc/`,
`${servicesByName.systemd.outputDir}/lib/=/lib/`
];

View file

@ -15,3 +15,5 @@ if ! user_check "<%= user %>" ; then
user_create "<%= user %>"
fi
chown -R <%= user %>:<%= group %> <%= optimizeDir %>
chown <%= user %>:<%= group %> <%= dataDir %>
chown <%= user %>:<%= group %> <%= pluginsDir %>

View file

@ -59,4 +59,8 @@ if [ "$REMOVE_DIRS" = "true" ]; then
if [ -d "<%= configDir %>" ]; then
rmdir --ignore-fail-on-non-empty "<%= configDir %>"
fi
if [ -d "<%= dataDir %>" ]; then
rmdir --ignore-fail-on-non-empty "<%= dataDir %>"
fi
fi

View file

@ -14,6 +14,7 @@ export default (grunt) => {
const FOLDER_CONFIG = '/etc/kibana';
const FOLDER_HOME = '/usr/share/kibana';
const FOLDER_DATA = '/var/lib/kibana';
const FOLDER_PLUGINS = `${FOLDER_HOME}/installedPlugins`;
const FILE_KIBANA_CONF = `${FOLDER_CONFIG}/kibana.yml`;
@ -43,6 +44,7 @@ export default (grunt) => {
version: VERSION,
path: {
conf: FOLDER_CONFIG,
data: FOLDER_DATA,
plugins: FOLDER_PLUGINS,
home: FOLDER_HOME,
kibanaBin: FILE_KIBANA_BINARY,