Skip to content

Commit

Permalink
Improve config overrides handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
azasypkin committed Jul 20, 2018
1 parent a1b2be2 commit 66930dd
Showing 1 changed file with 67 additions and 47 deletions.
114 changes: 67 additions & 47 deletions src/core/cli/override_config_with_argv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,99 +35,119 @@ export function overrideConfigWithArgv(
argv: { [key: string]: any },
installationFeatures: InstallationFeatures
) {
const configOverrides = [
...getServerConfigOverrides(argv),
...getDevConfigOverrides(argv),
...getLoggingConfigOverrides(argv),
...getPluginsConfigOverrides(config, argv, installationFeatures),
...getUnknownArgsOverrides(argv, installationFeatures),
...getKeystoreOverrides(config),
];

for (const [key, value] of configOverrides) {
config.set(key, value);
}

return config;
}

function* getServerConfigOverrides(argv: { [key: string]: any }) {
if (argv.port != null) {
config.set(['server', 'port'], argv.port);
yield [['server', 'port'], argv.port];
}

if (argv.host != null) {
config.set(['server', 'host'], argv.host);
yield [['server', 'host'], argv.host];
}

if (argv.dev) {
config.set('env', 'development');
config.set(['optimize', 'watch'], true);

if (argv['elasticsearch.username'] == null) {
config.set(['elasticsearch', 'username'], 'elastic');
}
if (argv.elasticsearch != null) {
yield [['elasticsearch', 'url'], argv.elasticsearch];
}
}

if (argv['elasticsearch.password'] == null) {
config.set(['elasticsearch', 'password'], 'changeme');
}
function* getDevConfigOverrides(argv: { [key: string]: any }) {
if (!argv.dev) {
return;
}

if (argv.ssl) {
config.set(['server', 'ssl', 'enabled'], true);
yield ['env', 'development'];
yield [['optimize', 'watch'], true];

if (argv['server.ssl.certificate'] == null && argv['server.ssl.key'] == null) {
config.set(['server', 'certificate', 'enabled'], DEV_SSL_CERT_PATH);
config.set(['server', 'ssl', 'key'], DEV_SSL_KEY_PATH);
}
}
if (argv['elasticsearch.username'] == null) {
yield [['elasticsearch', 'username'], 'elastic'];
}

if (argv.elasticsearch != null) {
config.set(['elasticsearch', 'url'], argv.elasticsearch);
if (argv['elasticsearch.password'] == null) {
yield [['elasticsearch', 'password'], 'changeme'];
}

if (argv.port != null) {
config.set(['server', 'port'], argv.port);
}
if (argv.ssl) {
yield [['server', 'ssl', 'enabled'], true];

if (argv.host != null) {
config.set(['server', 'host'], argv.host);
if (argv['server.ssl.certificate'] == null && argv['server.ssl.key'] == null) {
yield [['server', 'certificate', 'enabled'], DEV_SSL_CERT_PATH];
yield [['server', 'ssl', 'key'], DEV_SSL_KEY_PATH];
}
}
}

function* getLoggingConfigOverrides(argv: { [key: string]: any }) {
if (argv.quiet != null) {
config.set(['logging', 'quiet'], argv.quiet);
yield [['logging', 'quiet'], argv.quiet];
}

if (argv.silent != null) {
config.set(['logging', 'silent'], argv.silent);
yield [['logging', 'silent'], argv.silent];
}

if (argv.verbose != null) {
config.set(['logging', 'verbose'], argv.verbose);
yield [['logging', 'verbose'], argv.verbose];
}

if (argv.logFile != null) {
config.set(['logging', 'dest'], argv.logFile);
yield [['logging', 'dest'], argv.logFile];
}
}

config.set(
function* getPluginsConfigOverrides(
config: RawConfig,
argv: { [key: string]: any },
installationFeatures: InstallationFeatures
) {
yield [
['plugins', 'scanDirs'],
[...new Set([].concat(config.get(['plugins', 'scanDirs']), argv.pluginDir).filter(Boolean))]
);
[...new Set([].concat(config.get(['plugins', 'scanDirs']), argv.pluginDir).filter(Boolean))],
];

const xPackPluginPaths: string[] =
installationFeatures.isXPackInstalled && (!installationFeatures.isOssModeSupported || !argv.oss)
? [XPACK_INSTALLED_PATH]
: [];

config.set(
yield [
['plugins', 'paths'],
[
...new Set(
xPackPluginPaths.concat(config.get(['plugins', 'paths']), argv.pluginPath).filter(Boolean)
),
]
);
],
];
}

function* getUnknownArgsOverrides(
argv: { [key: string]: any },
installationFeatures: InstallationFeatures
) {
// Merge unknown CLI args into config.
for (const unknownArgKey of args.getUnknownOptions(argv, installationFeatures)) {
let unknownArgValue = argv[unknownArgKey];
try {
unknownArgValue = JSON.parse(unknownArgValue);
yield [unknownArgKey, JSON.parse(argv[unknownArgKey])];
} catch (e) {
// noop
yield [unknownArgKey, argv[unknownArgKey]];
}

config.set(unknownArgKey, unknownArgValue);
}

// Merge keystore content into config.
for (const [key, value] of Object.entries(readKeystore(config.get(['path', 'data'])))) {
config.set(key, value);
}
}

return config;
function* getKeystoreOverrides(config: RawConfig) {
yield* Object.entries(readKeystore(config.get(['path', 'data'])));
}

0 comments on commit 66930dd

Please sign in to comment.