Prevent overwriting ilm config the ui does not know about (#28370) (#28577)

* using original ES ilm policy as basis for new one to prevent overwriting config the ui does not know about

* fixing issues with disabling actions

* removing unused parameter
This commit is contained in:
Bill McConaghy 2019-01-11 09:59:12 -05:00 committed by GitHub
parent 931bf9b98c
commit 244835c074
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 10 deletions

View file

@ -34,6 +34,7 @@ import {
getSelectedOriginalPolicyName,
getPolicies
} from '.';
import { getPolicyByName } from './policies';
export const numberRequiredMessage = i18n.translate('xpack.indexLifecycleMgmt.editPolicy.numberRequiredError', {
defaultMessage: 'A number is required.'
});
@ -204,15 +205,17 @@ export const validateLifecycle = state => {
};
export const getLifecycle = state => {
const policyName = getSelectedPolicyName(state);
const phases = Object.entries(getPhases(state)).reduce(
(accum, [phaseName, phase]) => {
// Hot is ALWAYS enabled
if (phaseName === PHASE_HOT) {
phase[PHASE_ENABLED] = true;
}
const esPolicy = getPolicyByName(state, policyName).policy || {};
const esPhase = esPolicy.phases ? esPolicy.phases[phaseName] : {};
if (phase[PHASE_ENABLED]) {
accum[phaseName] = phaseToES(state, phase);
accum[phaseName] = phaseToES(phase, esPhase);
// These seem to be constants
if (phaseName === PHASE_DELETE) {

View file

@ -41,6 +41,7 @@ import { filterItems, sortTable } from '../../services';
export const getPolicies = state => state.policies.policies;
export const getPolicyByName = (state, name) => getPolicies(state).find((policy) => policy.name === name) || {};
export const getIsNewPolicy = state => state.policies.selectedPolicy.isNew;
export const getSelectedPolicy = state => state.policies.selectedPolicy;
export const getIsSelectedPolicySet = state => state.policies.selectedPolicySet;
@ -212,17 +213,17 @@ export const policyFromES = (policy) => {
};
};
export const phaseToES = (state, phase) => {
const esPhase = {};
export const phaseToES = (phase, originalEsPhase) => {
const esPhase = { ...originalEsPhase };
if (!phase[PHASE_ENABLED]) {
return esPhase;
return {};
}
if (isNumber(phase[PHASE_ROLLOVER_MINIMUM_AGE])) {
esPhase.min_age = `${phase[PHASE_ROLLOVER_MINIMUM_AGE]}${phase[PHASE_ROLLOVER_MINIMUM_AGE_UNITS]}`;
}
esPhase.actions = {};
esPhase.actions = esPhase.actions || {};
if (phase[PHASE_ROLLOVER_ENABLED]) {
esPhase.actions.rollover = {};
@ -241,30 +242,39 @@ export const phaseToES = (state, phase) => {
}`;
}
}
} else {
delete esPhase.actions.rollover;
}
if (phase[PHASE_NODE_ATTRS]) {
const [ name, value, ] = phase[PHASE_NODE_ATTRS].split(':');
esPhase.actions.allocate = {
require: {
[name]: value
}
esPhase.actions.allocate = esPhase.actions.allocate || {};
esPhase.actions.allocate.require = {
[name]: value
};
}
if (isNumber(phase[PHASE_REPLICA_COUNT])) {
esPhase.actions.allocate = esPhase.actions.allocate || {};
esPhase.actions.allocate.number_of_replicas = phase[PHASE_REPLICA_COUNT];
} else {
if (esPhase.actions.allocate) {
delete esPhase.actions.allocate.require;
}
}
if (phase[PHASE_FORCE_MERGE_ENABLED]) {
esPhase.actions.forcemerge = {
max_num_segments: phase[PHASE_FORCE_MERGE_SEGMENTS]
};
} else {
delete esPhase.actions.forcemerge;
}
if (phase[PHASE_SHRINK_ENABLED] && isNumber(phase[PHASE_PRIMARY_SHARD_COUNT])) {
esPhase.actions.shrink = {
number_of_shards: phase[PHASE_PRIMARY_SHARD_COUNT]
};
} else {
delete esPhase.actions.shrink;
}
return esPhase;
};