[APM] Fleet support for merging input.config values with other nested properties in the policy input (#101690) (#101955)

* [APM] Improvments in the APM fleet integration (#95501)

* added unit test and line comment

* fixes eslint issues

Co-authored-by: Oliver Gupte <ogupte@users.noreply.github.com>
This commit is contained in:
Kibana Machine 2021-06-10 19:14:28 -04:00 committed by GitHub
parent f84b9d022e
commit a6bd1ec036
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 4 deletions

View file

@ -115,6 +115,7 @@ export function getPackagePolicyWithAgentConfigurations(
{
...firstInput,
config: {
...firstInput.config,
[APM_SERVER]: {
value: {
...apmServerValue,

View file

@ -218,4 +218,81 @@ describe('Fleet - storedPackagePoliciesToAgentInputs', () => {
},
]);
});
it('returns agent inputs with deeply merged config values', () => {
expect(
storedPackagePoliciesToAgentInputs([
{
...mockPackagePolicy,
inputs: [
{
...mockInput,
compiled_input: {
agent_input_template_group1_vars: {
inputVar: 'input-value',
},
agent_input_template_group2_vars: {
inputVar3: {
testFieldGroup: {
subField1: 'subfield1',
},
testField: 'test',
},
},
},
config: {
agent_input_template_group1_vars: {
value: {
inputVar2: {},
},
},
agent_input_template_group2_vars: {
value: {
inputVar3: {
testFieldGroup: {
subField2: 'subfield2',
},
},
inputVar4: '',
},
},
},
},
],
},
])
).toEqual([
{
id: 'some-uuid',
revision: 1,
name: 'mock-package-policy',
type: 'test-logs',
data_stream: { namespace: 'default' },
use_output: 'default',
agent_input_template_group1_vars: {
inputVar: 'input-value',
inputVar2: {},
},
agent_input_template_group2_vars: {
inputVar3: {
testField: 'test',
testFieldGroup: {
subField1: 'subfield1',
subField2: 'subfield2',
},
},
inputVar4: '',
},
streams: [
{
id: 'test-logs-foo',
data_stream: { dataset: 'foo', type: 'logs' },
fooKey: 'fooValue1',
fooKey2: ['fooValue2'],
},
{ id: 'test-logs-bar', data_stream: { dataset: 'bar', type: 'logs' } },
],
},
]);
});
});

View file

@ -5,6 +5,8 @@
* 2.0.
*/
import { merge } from 'lodash';
import type { PackagePolicy, FullAgentPolicyInput, FullAgentPolicyInputStream } from '../types';
import { DEFAULT_OUTPUT } from '../constants';
@ -31,10 +33,6 @@ export const storedPackagePoliciesToAgentInputs = (
namespace: packagePolicy.namespace || 'default',
},
use_output: DEFAULT_OUTPUT.name,
...Object.entries(input.config || {}).reduce((acc, [key, { value }]) => {
acc[key] = value;
return acc;
}, {} as { [k: string]: any }),
...(input.compiled_input || {}),
...(input.streams.length
? {
@ -56,6 +54,15 @@ export const storedPackagePoliciesToAgentInputs = (
: {}),
};
// deeply merge the input.config values with the full policy input
merge(
fullInput,
Object.entries(input.config || {}).reduce(
(acc, [key, { value }]) => ({ ...acc, [key]: value }),
{}
)
);
if (packagePolicy.package) {
fullInput.meta = {
package: {