From a0e381ddb7af9f22f93da06c99a3a47c2ecf5fa9 Mon Sep 17 00:00:00 2001 From: Tyler Smalley Date: Mon, 5 Aug 2019 17:22:10 -0700 Subject: [PATCH] [kbn-es] Support for passing regex value to ES We test each value to determine if it's a file, in which case we move it to the config directory. This is required to support things like SSL certificates which are required to be within the ES directory. path.isAbsolute evalues to true for a regular expression. In order to resolve this, we also verify that the file exists. Signed-off-by: Tyler Smalley --- .../kbn-es/src/utils/extract_config_files.js | 2 +- .../src/utils/extract_config_files.test.js | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/kbn-es/src/utils/extract_config_files.js b/packages/kbn-es/src/utils/extract_config_files.js index 1ee4ee887fd31..7ad75dcbbf340 100644 --- a/packages/kbn-es/src/utils/extract_config_files.js +++ b/packages/kbn-es/src/utils/extract_config_files.js @@ -55,7 +55,7 @@ exports.extractConfigFiles = function extractConfigFiles(config, dest, options = }; function isFile(dest = '') { - return path.isAbsolute(dest) && path.extname(dest).length > 0; + return path.isAbsolute(dest) && path.extname(dest).length > 0 && fs.existsSync(dest); } function copyFileSync(src, dest) { diff --git a/packages/kbn-es/src/utils/extract_config_files.test.js b/packages/kbn-es/src/utils/extract_config_files.test.js index 0c417536878db..4d47f08cb1345 100644 --- a/packages/kbn-es/src/utils/extract_config_files.test.js +++ b/packages/kbn-es/src/utils/extract_config_files.test.js @@ -47,13 +47,29 @@ test('copies file', () => { expect(fs.writeFileSync.mock.calls[0][0]).toEqual('/es/config/foo.yml'); }); +test('ignores file which does not exist', () => { + fs.existsSync = () => false; + extractConfigFiles(['path=/data/foo.yml'], '/es'); + + expect(fs.readFileSync).not.toHaveBeenCalled(); + expect(fs.writeFileSync).not.toHaveBeenCalled(); +}); + test('ignores non-paths', () => { const config = extractConfigFiles(['foo=bar', 'foo.bar=baz'], '/es'); expect(config).toEqual(['foo=bar', 'foo.bar=baz']); }); +test('keeps regular expressions intact', () => { + fs.existsSync = () => false; + const config = extractConfigFiles(['foo=bar', 'foo.bar=/https?://127.0.0.1(:[0-9]+)?/'], '/es'); + + expect(config).toEqual(['foo=bar', 'foo.bar=/https?://127.0.0.1(:[0-9]+)?/']); +}); + test('ignores directories', () => { + fs.existsSync = () => true; const config = extractConfigFiles(['path=/data/foo.yml', 'foo.bar=/data/bar'], '/es'); expect(config).toEqual(['path=foo.yml', 'foo.bar=/data/bar']);