diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index bb1e7b099508c..a0af3349eeaaa 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -8745,6 +8745,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -8872,6 +8875,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -8947,6 +8953,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -9037,6 +9046,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -9172,6 +9184,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -10245,6 +10260,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -11525,6 +11543,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -12545,6 +12566,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -12638,6 +12662,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -12811,6 +12838,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -13797,6 +13827,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -15089,6 +15122,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16107,6 +16143,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16187,6 +16226,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16212,6 +16254,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16740,6 +16785,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16886,6 +16934,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17027,6 +17078,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17147,6 +17201,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17694,6 +17751,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17783,6 +17843,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18007,6 +18070,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18136,6 +18202,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18195,6 +18264,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18301,6 +18373,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18408,6 +18483,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18520,6 +18598,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18634,6 +18715,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18756,6 +18840,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18835,6 +18922,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18899,6 +18989,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18989,6 +19082,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19075,6 +19171,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19152,6 +19251,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19230,6 +19332,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19689,6 +19794,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20171,6 +20279,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20375,6 +20486,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20461,6 +20575,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20558,6 +20675,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20703,6 +20823,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20811,6 +20934,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20883,6 +21009,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21028,6 +21157,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21206,6 +21338,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21338,6 +21473,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21416,6 +21554,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21515,6 +21656,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21654,6 +21798,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21753,6 +21900,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21957,6 +22107,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -22071,6 +22224,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -22660,6 +22816,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -22842,6 +23001,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23115,6 +23277,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23344,6 +23509,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23403,6 +23571,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23477,6 +23648,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23644,6 +23818,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -24350,6 +24527,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -24567,6 +24747,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25257,6 +25440,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25388,6 +25574,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25458,6 +25647,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25615,6 +25807,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25672,6 +25867,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25779,6 +25977,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25924,6 +26125,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25999,6 +26203,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26098,6 +26305,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26242,6 +26452,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26333,6 +26546,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26358,6 +26574,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26439,6 +26658,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26511,6 +26733,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26536,6 +26761,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26603,6 +26831,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26679,6 +26910,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26704,6 +26938,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -27790,6 +28027,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -29894,6 +30134,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -29969,6 +30212,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -29994,6 +30240,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -31072,6 +31321,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -33160,6 +33412,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -33236,6 +33491,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -33946,6 +34204,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -35198,6 +35459,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -35223,6 +35487,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -35896,6 +36163,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -36106,6 +36376,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -36219,6 +36492,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -37405,6 +37681,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -37488,6 +37767,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -38130,6 +38412,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39401,6 +39686,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39426,6 +39714,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39547,6 +39838,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39720,6 +40014,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39795,6 +40092,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39908,6 +40208,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40084,6 +40387,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40172,6 +40478,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40289,6 +40598,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40480,6 +40792,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40586,6 +40901,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40742,6 +41060,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40838,6 +41159,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index 5a609f70b8277..f4ab4b08060ec 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -8745,6 +8745,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -8872,6 +8875,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -8947,6 +8953,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -9037,6 +9046,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -9172,6 +9184,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -10245,6 +10260,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -11525,6 +11543,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -12545,6 +12566,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -12638,6 +12662,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -12811,6 +12838,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -13797,6 +13827,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -15089,6 +15122,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16107,6 +16143,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16187,6 +16226,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16212,6 +16254,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16740,6 +16785,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -16886,6 +16934,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17027,6 +17078,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17147,6 +17201,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17694,6 +17751,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -17783,6 +17843,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18007,6 +18070,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18136,6 +18202,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18195,6 +18264,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18301,6 +18373,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18408,6 +18483,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18520,6 +18598,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18634,6 +18715,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18756,6 +18840,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18835,6 +18922,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18899,6 +18989,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -18989,6 +19082,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19075,6 +19171,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19152,6 +19251,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19230,6 +19332,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -19689,6 +19794,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20171,6 +20279,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20375,6 +20486,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20461,6 +20575,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20558,6 +20675,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20703,6 +20823,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20811,6 +20934,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -20883,6 +21009,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21028,6 +21157,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21206,6 +21338,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21338,6 +21473,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21416,6 +21554,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21515,6 +21656,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21654,6 +21798,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21753,6 +21900,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -21957,6 +22107,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -22071,6 +22224,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -22660,6 +22816,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -22842,6 +23001,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23115,6 +23277,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23344,6 +23509,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23403,6 +23571,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23477,6 +23648,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -23644,6 +23818,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -24350,6 +24527,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -24567,6 +24747,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25257,6 +25440,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25388,6 +25574,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25458,6 +25647,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25615,6 +25807,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25672,6 +25867,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25779,6 +25977,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25924,6 +26125,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -25999,6 +26203,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26098,6 +26305,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26242,6 +26452,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26333,6 +26546,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26358,6 +26574,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26439,6 +26658,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26511,6 +26733,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26536,6 +26761,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26603,6 +26831,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26679,6 +26910,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -26704,6 +26938,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -27790,6 +28027,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -29894,6 +30134,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -29969,6 +30212,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -29994,6 +30240,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -31072,6 +31321,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -33160,6 +33412,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -33236,6 +33491,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -33946,6 +34204,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -35198,6 +35459,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -35223,6 +35487,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -35896,6 +36163,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -36106,6 +36376,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -36219,6 +36492,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -37405,6 +37681,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -37488,6 +37767,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -38130,6 +38412,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39401,6 +39686,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39426,6 +39714,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39547,6 +39838,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39720,6 +40014,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39795,6 +40092,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -39908,6 +40208,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40084,6 +40387,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40172,6 +40478,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40289,6 +40598,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40480,6 +40792,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40586,6 +40901,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40742,6 +41060,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, @@ -40838,6 +41159,9 @@ "error": { "type": "string" }, + "errorType": { + "type": "string" + }, "message": { "type": "string" }, diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index df21419b51045..46dea3949f0f6 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -15079,6 +15079,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -15165,6 +15167,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -15213,6 +15217,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -15273,6 +15279,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -15364,6 +15372,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -16081,6 +16091,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -16944,6 +16956,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -17626,6 +17640,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -18285,6 +18301,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -19156,6 +19174,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -19836,6 +19856,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -19886,6 +19908,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -19902,6 +19926,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -20252,6 +20278,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -20348,6 +20376,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -20408,6 +20438,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -20522,6 +20554,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -20613,6 +20647,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -20688,6 +20724,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -21072,6 +21110,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -21129,6 +21169,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -21179,6 +21221,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -21504,6 +21548,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -21844,6 +21890,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -21980,6 +22028,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22035,6 +22085,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22097,6 +22149,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22191,6 +22245,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22264,6 +22320,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22422,6 +22480,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22508,6 +22568,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22546,6 +22608,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22612,6 +22676,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22678,6 +22744,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22749,6 +22817,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22820,6 +22890,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22897,6 +22969,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22948,6 +23022,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22988,6 +23064,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23049,6 +23127,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23106,6 +23186,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23155,6 +23237,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23201,6 +23285,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23298,6 +23384,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23422,6 +23510,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23511,6 +23601,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23561,6 +23653,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23628,6 +23722,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23719,6 +23815,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23783,6 +23881,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23920,6 +24020,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23995,6 +24097,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24395,6 +24499,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24516,6 +24622,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24693,6 +24801,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24803,6 +24913,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25281,6 +25393,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25425,6 +25539,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25893,6 +26009,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25937,6 +26055,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26021,6 +26141,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26068,6 +26190,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26214,6 +26338,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26252,6 +26378,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26352,6 +26480,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26389,6 +26519,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26462,6 +26594,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26560,6 +26694,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26608,6 +26744,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26674,6 +26812,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26770,6 +26910,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26828,6 +26970,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26844,6 +26988,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26895,6 +27041,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26940,6 +27088,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26956,6 +27106,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26999,6 +27151,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -27048,6 +27202,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -27064,6 +27220,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -27790,6 +27948,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29195,6 +29355,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29243,6 +29405,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29259,6 +29423,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29978,6 +30144,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -31367,6 +31535,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -31417,6 +31587,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -31882,6 +32054,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -32707,6 +32881,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -32723,6 +32899,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -33164,6 +33342,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -33228,6 +33408,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -33649,6 +33831,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -34484,6 +34668,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -34500,6 +34686,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -34629,6 +34817,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -34702,6 +34892,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35495,6 +35687,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35574,6 +35768,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35684,6 +35880,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35732,6 +35930,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35804,6 +36004,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35916,6 +36118,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35973,6 +36177,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36051,6 +36257,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36177,6 +36385,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36246,6 +36456,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36350,6 +36562,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36413,6 +36627,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index b7156d24c9ac8..4723b3387a3c7 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -17319,6 +17319,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -17405,6 +17407,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -17453,6 +17457,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -17513,6 +17519,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -17604,6 +17612,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -18321,6 +18331,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -19184,6 +19196,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -19866,6 +19880,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -20525,6 +20541,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -21396,6 +21414,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22076,6 +22096,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22126,6 +22148,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22142,6 +22166,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22492,6 +22518,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22588,6 +22616,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22648,6 +22678,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22762,6 +22794,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22853,6 +22887,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -22928,6 +22964,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23312,6 +23350,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23369,6 +23409,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23419,6 +23461,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -23744,6 +23788,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24084,6 +24130,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24220,6 +24268,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24275,6 +24325,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24337,6 +24389,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24431,6 +24485,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24504,6 +24560,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24662,6 +24720,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24748,6 +24808,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24786,6 +24848,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24852,6 +24916,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24918,6 +24984,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -24989,6 +25057,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25060,6 +25130,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25137,6 +25209,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25188,6 +25262,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25228,6 +25304,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25289,6 +25367,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25346,6 +25426,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25395,6 +25477,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25441,6 +25525,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25538,6 +25624,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25662,6 +25750,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25751,6 +25841,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25801,6 +25893,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25868,6 +25962,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -25959,6 +26055,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26023,6 +26121,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26160,6 +26260,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26235,6 +26337,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26635,6 +26739,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26756,6 +26862,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -26933,6 +27041,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -27043,6 +27153,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -27521,6 +27633,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -27665,6 +27779,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28133,6 +28249,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28177,6 +28295,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28261,6 +28381,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28308,6 +28430,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28454,6 +28578,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28492,6 +28618,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28592,6 +28720,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28629,6 +28759,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28702,6 +28834,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28800,6 +28934,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28848,6 +28984,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -28914,6 +29052,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29010,6 +29150,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29068,6 +29210,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29084,6 +29228,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29135,6 +29281,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29180,6 +29328,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29196,6 +29346,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29239,6 +29391,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29288,6 +29442,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -29304,6 +29460,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -30030,6 +30188,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -31435,6 +31595,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -31483,6 +31645,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -31499,6 +31663,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -32218,6 +32384,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -33607,6 +33775,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -33657,6 +33827,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -34122,6 +34294,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -34947,6 +35121,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -34963,6 +35139,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35404,6 +35582,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35468,6 +35648,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -35889,6 +36071,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36724,6 +36908,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36740,6 +36926,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36869,6 +37057,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -36942,6 +37132,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -37735,6 +37927,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -37814,6 +38008,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -37924,6 +38120,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -37972,6 +38170,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38044,6 +38244,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38156,6 +38358,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38213,6 +38417,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38291,6 +38497,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38417,6 +38625,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38486,6 +38696,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38590,6 +38802,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: @@ -38653,6 +38867,8 @@ paths: properties: error: type: string + errorType: + type: string message: type: string statusCode: diff --git a/x-pack/platform/plugins/shared/fleet/common/errors.ts b/x-pack/platform/plugins/shared/fleet/common/errors.ts index 9750fdbaf0d3b..903f76063933e 100644 --- a/x-pack/platform/plugins/shared/fleet/common/errors.ts +++ b/x-pack/platform/plugins/shared/fleet/common/errors.ts @@ -26,3 +26,4 @@ export class FleetActionsClientError extends FleetError {} export class UninstallTokenError extends FleetError {} export class AgentRequestInvalidError extends FleetError {} +export class OutputInvalidError extends FleetError {} diff --git a/x-pack/platform/plugins/shared/fleet/common/services/agent_policies_helpers.ts b/x-pack/platform/plugins/shared/fleet/common/services/agent_policies_helpers.ts index 5729947feea31..62c87fc2a85f6 100644 --- a/x-pack/platform/plugins/shared/fleet/common/services/agent_policies_helpers.ts +++ b/x-pack/platform/plugins/shared/fleet/common/services/agent_policies_helpers.ts @@ -24,9 +24,6 @@ export function getDefaultFleetServerpolicyId(spaceId?: string) { export function policyHasFleetServer( agentPolicy: Pick ) { - if (!agentPolicy.package_policies) { - return false; - } return ( agentPolicy.package_policies?.some((p) => p.package?.name === FLEET_SERVER_PACKAGE) || !!agentPolicy.has_fleet_server diff --git a/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.test.ts b/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.test.ts index 7394742d209a4..1086de1a7625d 100644 --- a/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.test.ts +++ b/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.test.ts @@ -53,6 +53,14 @@ describe('getAllowedOutputTypesForAgentPolicy', () => { expect(res).toEqual(['elasticsearch']); }); + it('should return only elasticsearch for an agent policy with Fleet Server not yet installed', () => { + const res = getAllowedOutputTypesForAgentPolicy({ + has_fleet_server: true, + } as any); + + expect(res).toEqual(['elasticsearch']); + }); + it('should return only elasticsearch for an agentless agent policy', () => { const res = getAllowedOutputTypesForAgentPolicy({ supports_agentless: true } as any); diff --git a/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.ts b/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.ts index e664495d327f3..43f67ac348332 100644 --- a/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.ts +++ b/x-pack/platform/plugins/shared/fleet/common/services/output_helpers.ts @@ -32,10 +32,11 @@ const sameClusterRestrictedPackages = [ */ export function getAllowedOutputTypesForAgentPolicy(agentPolicy: Partial): string[] { const isRestrictedToSameClusterES = - agentPolicy.package_policies && - agentPolicy.package_policies.some( - (p) => p.package?.name && sameClusterRestrictedPackages.includes(p.package?.name) - ); + agentPolicy.has_fleet_server || + (agentPolicy.package_policies && + agentPolicy.package_policies.some( + (p) => p.package?.name && sameClusterRestrictedPackages.includes(p.package?.name) + )); if (isRestrictedToSameClusterES) { return [outputType.Elasticsearch]; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_quick_start_form.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_quick_start_form.ts index 559fcad522351..c4c1cdcf29493 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_quick_start_form.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_quick_start_form.ts @@ -8,10 +8,11 @@ import { useState, useCallback, useEffect, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; +import { OutputInvalidError } from '../../../../../../common/errors'; import { getDefaultFleetServerpolicyId } from '../../../../../../common/services/agent_policies_helpers'; import type { useComboInput, useInput, useSwitchInput } from '../../../hooks'; import { - sendCreateAgentPolicy, + sendCreateAgentPolicyForRq, sendGetOneAgentPolicy, useFleetStatus, useStartServices, @@ -115,23 +116,40 @@ export const useQuickStartCreateForm = (): QuickStartCreateForm => { if (existingPolicy.data?.item) { setFleetServerPolicyId(existingPolicy.data?.item.id); } else { - const createPolicyResponse = await sendCreateAgentPolicy( + const createPolicyResponse = await sendCreateAgentPolicyForRq( quickStartFleetServerPolicyFields, { withSysMonitoring: true, } ); - setFleetServerPolicyId(createPolicyResponse.data?.item.id); + setFleetServerPolicyId(createPolicyResponse.item.id); } - setStatus('success'); } } catch (err) { - notifications.toasts.addError(err, { - title: i18n.translate('xpack.fleet.fleetServerSetup.errorAddingFleetServerHostTitle', { - defaultMessage: 'Error adding Fleet Server host', - }), - }); + if (err?.attributes?.type === OutputInvalidError.name) { + notifications.toasts.addError(err, { + title: i18n.translate( + 'xpack.fleet.fleetServerSetup.errorCreatingFleetServerPolicyTitle', + { + defaultMessage: 'Error creating a Fleet Server policy', + } + ), + toastMessage: i18n.translate( + 'xpack.fleet.fleetServerSetup.errorCreatingFleetServerPolicyMessage', + { + defaultMessage: + 'Fleet Server policy creation failed as your default output is not an elasticsearch output. Use the advanced section to use an elasticsearch output to create that policy.', + } + ), + }); + } else { + notifications.toasts.addError(err, { + title: i18n.translate('xpack.fleet.fleetServerSetup.errorAddingFleetServerHostTitle', { + defaultMessage: 'Error adding Fleet Server host', + }), + }); + } setStatus('error'); setError(err.message); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx index 5e851be571565..9b3adbe6c825b 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx @@ -69,6 +69,7 @@ export function useOutputOptions(agentPolicy: Partial getAllowedOutputTypesForAgentPolicy(agentPolicy as AgentPolicy), [agentPolicy] @@ -146,13 +147,21 @@ export function useOutputOptions(agentPolicy: Partial ({ dataOutputOptions, monitoringOutputOptions, + dataOutputValueOfSelected, isLoading: outputsRequest.isLoading, }), - [dataOutputOptions, monitoringOutputOptions, outputsRequest.isLoading] + [ + dataOutputOptions, + dataOutputValueOfSelected, + monitoringOutputOptions, + outputsRequest.isLoading, + ] ); } diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx index 8af4ef58576ad..09fdceb802327 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx @@ -97,6 +97,7 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = const { dataOutputOptions, + dataOutputValueOfSelected, monitoringOutputOptions, isLoading: isLoadingOptions, } = useOutputOptions(agentPolicy); @@ -657,7 +658,7 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = > { diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_create_inline.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_create_inline.tsx index 96e1056f736cd..6680503ea81fc 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_create_inline.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_create_inline.tsx @@ -24,7 +24,7 @@ import { i18n } from '@kbn/i18n'; import { useSpaceSettingsContext } from '../../../../../hooks/use_space_settings_context'; import type { AgentPolicy, NewAgentPolicy } from '../../../types'; -import { sendCreateAgentPolicy, useStartServices, useAuthz } from '../../../hooks'; +import { useStartServices, useAuthz, sendCreateAgentPolicyForRq } from '../../../hooks'; import { generateNewAgentPolicyWithDefaults } from '../../../../../../common/services/generate_new_agent_policy'; import { agentPolicyFormValidation } from '.'; @@ -48,7 +48,7 @@ export const AgentPolicyCreateInlineForm: React.FunctionComponent = ({ isFleetServerPolicy, agentPolicyName, }) => { - const { docLinks } = useStartServices(); + const { docLinks, notifications } = useStartServices(); const authz = useAuthz(); const [touchedFields, setTouchedFields] = useState<{ [key: string]: boolean }>({}); @@ -83,17 +83,20 @@ export const AgentPolicyCreateInlineForm: React.FunctionComponent = ({ const createAgentPolicy = useCallback(async () => { try { setIsLoading(true); - const resp = await sendCreateAgentPolicy(newAgentPolicy, { withSysMonitoring }); - if (resp.error) throw resp.error; - if (resp.data) { - updateAgentPolicy(resp.data.item); - } + const data = await sendCreateAgentPolicyForRq(newAgentPolicy, { withSysMonitoring }); + + updateAgentPolicy(data.item); } catch (e) { + notifications.toasts.addError(e, { + title: i18n.translate('xpack.fleet.agentPolicyCreateInline.errorTitle', { + defaultMessage: 'Error creating agent policy', + }), + }); updateAgentPolicy(null, mapError(e)); } finally { setIsLoading(false); } - }, [newAgentPolicy, withSysMonitoring, updateAgentPolicy]); + }, [newAgentPolicy, withSysMonitoring, updateAgentPolicy, notifications.toasts]); function mapError(e: { statusCode: number }): JSX.Element | undefined { switch (e.statusCode) { diff --git a/x-pack/platform/plugins/shared/fleet/public/hooks/use_request/agent_policy.ts b/x-pack/platform/plugins/shared/fleet/public/hooks/use_request/agent_policy.ts index 5d699a841326e..65731333ab42b 100644 --- a/x-pack/platform/plugins/shared/fleet/public/hooks/use_request/agent_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/public/hooks/use_request/agent_policy.ts @@ -143,6 +143,22 @@ export const sendGetOneAgentPolicy = (agentPolicyId: string) => { }); }; +export const sendCreateAgentPolicyForRq = ( + body: CreateAgentPolicyRequest['body'], + { withSysMonitoring }: { withSysMonitoring: boolean } = { withSysMonitoring: false } +) => { + return sendRequestForRq({ + path: agentPolicyRouteService.getCreatePath(), + method: 'post', + body: JSON.stringify(body), + query: withSysMonitoring ? { sys_monitoring: true } : {}, + version: API_VERSIONS.public.v1, + }); +}; + +/** + * @deprecated use sendCreateAgentPolicyForRq instead + */ export const sendCreateAgentPolicy = ( body: CreateAgentPolicyRequest['body'], { withSysMonitoring }: { withSysMonitoring: boolean } = { withSysMonitoring: false } diff --git a/x-pack/platform/plugins/shared/fleet/server/errors/handlers.ts b/x-pack/platform/plugins/shared/fleet/server/errors/handlers.ts index 2bdd118e7fb40..7ebc33187c560 100644 --- a/x-pack/platform/plugins/shared/fleet/server/errors/handlers.ts +++ b/x-pack/platform/plugins/shared/fleet/server/errors/handlers.ts @@ -47,6 +47,7 @@ import { AgentlessPolicyExistsRequestError, PackageInvalidDeploymentMode, PackagePolicyContentPackageError, + OutputInvalidError, } from '.'; type IngestErrorHandler = ( @@ -154,6 +155,13 @@ const getHTTPResponseCode = (error: FleetError): number => { return 400; // Bad Request }; +function shouldRespondWithErrorType(error: FleetError) { + if (error instanceof OutputInvalidError) { + return true; + } + return false; +} + export function fleetErrorToResponseOptions(error: IngestErrorHandlerParams['error']) { const logger = appContextService.getLogger(); // our "expected" errors @@ -164,6 +172,7 @@ export function fleetErrorToResponseOptions(error: IngestErrorHandlerParams['err statusCode: getHTTPResponseCode(error), body: { message: error.message, + ...(shouldRespondWithErrorType(error) ? { attributes: { type: error.name } } : {}), ...(error.attributes && { attributes: error.attributes }), }, }; diff --git a/x-pack/platform/plugins/shared/fleet/server/errors/index.ts b/x-pack/platform/plugins/shared/fleet/server/errors/index.ts index af0770b61f180..44b34bdfd25e8 100644 --- a/x-pack/platform/plugins/shared/fleet/server/errors/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/errors/index.ts @@ -17,7 +17,10 @@ export { } from './handlers'; export { isESClientError } from './utils'; -export { FleetError as FleetError } from '../../common/errors'; +export { + FleetError as FleetError, + OutputInvalidError as OutputInvalidError, +} from '../../common/errors'; export class RegistryError extends FleetError {} export class RegistryConnectionError extends RegistryError {} @@ -109,7 +112,6 @@ export class FleetNotFoundError extends FleetError {} export class FleetTooManyRequestsError extends FleetError {} export class OutputUnauthorizedError extends FleetError {} -export class OutputInvalidError extends FleetError {} export class OutputLicenceError extends FleetError {} export class DownloadSourceError extends FleetError {} export class DeleteUnenrolledAgentsPreconfiguredError extends FleetError {} diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/schema/errors.ts b/x-pack/platform/plugins/shared/fleet/server/routes/schema/errors.ts index 09dc90d55ff45..96f59a07824f1 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/schema/errors.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/schema/errors.ts @@ -12,6 +12,7 @@ export const genericErrorResponse = () => { statusCode: schema.maybe(schema.number()), error: schema.maybe(schema.string()), + errorType: schema.maybe(schema.string()), message: schema.string(), }, { diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/outputs_helpers.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/outputs_helpers.ts index f2176604edf5e..37e8e567fdb03 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/outputs_helpers.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/outputs_helpers.ts @@ -54,6 +54,7 @@ export async function validateOutputForPolicy( allowedOutputTypeForPolicy: string[] = Object.values(outputType) ) { if ( + Object.keys(existingData).length !== 0 && newData.data_output_id === existingData.data_output_id && newData.monitoring_output_id === existingData.monitoring_output_id ) { @@ -66,7 +67,15 @@ export async function validateOutputForPolicy( allowedOutputTypeForPolicy.length !== Object.values(outputType).length; if (isOutputTypeRestricted) { - const dataOutput = await getDataOutputForAgentPolicy(soClient, data); + const dataOutput = await getDataOutputForAgentPolicy(soClient, data).catch((err) => { + if (err instanceof OutputNotFoundError) { + return; + } + throw err; + }); + if (!dataOutput) { + return; + } if (!allowedOutputTypeForPolicy.includes(dataOutput.type)) { throw new OutputInvalidError( `Output of type "${dataOutput.type}" is not usable with policy "${data.name}".` @@ -116,7 +125,15 @@ export async function validateAgentPolicyOutputForIntegration( allowedOutputTypeForPolicy.length !== Object.values(outputType).length; if (isOutputTypeRestricted) { - const dataOutput = await getDataOutputForAgentPolicy(soClient, agentPolicy); + const dataOutput = await getDataOutputForAgentPolicy(soClient, agentPolicy).catch((err) => { + if (err instanceof OutputNotFoundError) { + return; + } + throw err; + }); + if (!dataOutput) { + return; + } if (!allowedOutputTypeForPolicy.includes(dataOutput.type)) { if (isNewPackagePolicy) { throw new OutputInvalidError( diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts index cd0e52bc32a33..282276ec0506c 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts @@ -380,6 +380,7 @@ class AgentPolicyService { user?: AuthenticatedUser; authorizationHeader?: HTTPAuthorizationHeader | null; skipDeploy?: boolean; + hasFleetServer?: boolean; } = {} ): Promise { const savedObjectType = await getAgentPolicySavedObjectType(); @@ -412,12 +413,17 @@ class AgentPolicyService { spaceId: soClient.getCurrentNamespace(), namespace: agentPolicy.namespace, }); + const policyForOutputValidation = { + ...agentPolicy, + has_fleet_server: options?.hasFleetServer, + }; await validateOutputForPolicy( soClient, - agentPolicy, + policyForOutputValidation, {}, - getAllowedOutputTypesForAgentPolicy(agentPolicy) + getAllowedOutputTypesForAgentPolicy(policyForOutputValidation) ); + validateRequiredVersions(agentPolicy.name, agentPolicy.required_versions); const newSo = await soClient.create( diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_create.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_create.ts index 3902548581595..c9fa5b591010f 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_create.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_create.ts @@ -149,6 +149,7 @@ export async function createAgentPolicyWithPackages({ user, id: agentPolicyId, authorizationHeader, + hasFleetServer, skipDeploy: true, // skip deploying the policy until package policies are added }); diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts index 731901644fd5c..82b994ed9d693 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts @@ -1994,5 +1994,355 @@ export default function (providerContext: FtrProviderContext) { expect(items.length).equal(1); }); }); + + describe('fleet server policies validate output', () => { + let esOutputId: string; + let logstashOutputId: string; + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await fleetAndAgents.setup(); + + const { body: esApiResponse } = await supertest + .post(`/api/fleet/outputs`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Elastic output', + type: 'elasticsearch', + hosts: ['http://localhost'], + }) + .expect(200); + esOutputId = esApiResponse.item.id; + + const { body: logstashApiResponse } = await supertest + .post(`/api/fleet/outputs`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Default logstash', + type: 'logstash', + hosts: ['logstash'], + ssl: { certificate: 'CERTIFICATE', key: 'KEY', certificate_authorities: [] }, + is_default: true, + is_default_monitoring: true, + }) + .expect(200); + + logstashOutputId = logstashApiResponse.item.id; + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + }); + + async function assertPolicyDoNotExists(id: string) { + await supertest.get(`/api/fleet/agent_policies/${id}`).expect(404); + } + + it('should not allow to create a fleet server policies if default output is not an ES output', async () => { + const policyId = `fleet-server-${Date.now()}`; + const { statusCode } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'kibana') + .send({ + id: policyId, + name: 'Fleet Server policy ' + Date.now(), + namespace: 'default', + has_fleet_server: true, + }); + + expect(statusCode).to.eql(400); + + await assertPolicyDoNotExists(policyId); + }); + + it('should not allow to create a fleet server policies if provided output is not an ES output', async () => { + const policyId = `fleet-server-${Date.now()}`; + const { statusCode, body } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'kibana') + .send({ + id: policyId, + name: 'Fleet Server policy ' + Date.now(), + namespace: 'default', + has_fleet_server: true, + data_output_id: logstashOutputId, + }); + + expect(statusCode).to.eql(400); + expect(body.message).to.match(/Output of type "logstash" is not usable with policy/); + + await assertPolicyDoNotExists(policyId); + }); + + it('should allow to create a fleet server policies if provided output is an ES output', async () => { + const policyId = `fleet-server-${Date.now()}`; + await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'kibana') + .send({ + id: policyId, + name: 'Fleet Server policy ' + Date.now(), + namespace: 'default', + has_fleet_server: true, + data_output_id: esOutputId, + }) + .expect(200); + }); + }); + + // FLAKY: https://github.com/elastic/kibana/issues/213370 + describe.skip('POST /internal/fleet/agent_and_package_policies', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await kibanaServer.savedObjects.cleanStandardList(); + await fleetAndAgents.setup(); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + }); + + afterEach(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + }); + + it('should create agent and package policy successfully when not given ids', async () => { + const requestBody = { + name: 'Test Agent Policy', + namespace: 'default', + description: 'Test description', + package_policies: [ + { + name: 'Test Package Policy', + namespace: 'default', + policy_ids: [], + enabled: true, + inputs: [ + { + enabled: true, + streams: [], + type: 'single_input', + }, + ], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }, + ], + }; + + const { + body: { item: createdPolicy }, + } = await supertest + .post('/internal/fleet/agent_and_package_policies') + .set('kbn-xsrf', 'xxxx') + .send(requestBody) + .expect(200); + + expect(createdPolicy.name).to.eql('Test Agent Policy'); + expect(createdPolicy.package_policies[0].name).to.eql('Test Package Policy'); + expect(createdPolicy.package_policies[0].policy_ids).to.eql([createdPolicy.id]); + }); + + it('should create agent and package policy successfully when given ids', async () => { + const requestBody = { + id: 'test-agent-policy-with-id', + name: 'Test Agent Policy', + namespace: 'default', + description: 'Test description', + package_policies: [ + { + id: 'test-package-policy-with-id', + name: 'Test Package Policy', + namespace: 'default', + policy_ids: ['test-agent-policy-with-id'], + enabled: true, + inputs: [ + { + enabled: true, + streams: [], + type: 'single_input', + }, + ], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }, + { + id: 'test-package-policy-with-id-2', + name: 'Test Package Policy 2', + namespace: 'default', + policy_ids: ['test-agent-policy-with-id'], + enabled: true, + inputs: [ + { + enabled: true, + streams: [], + type: 'single_input', + }, + ], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }, + ], + }; + + const { + body: { item: createdPolicy }, + } = await supertest + .post('/internal/fleet/agent_and_package_policies') + .set('kbn-xsrf', 'xxxx') + .send(requestBody) + .expect(200); + + expect(createdPolicy.id).to.eql(requestBody.id); + expect(createdPolicy.package_policies[0].id).to.eql(requestBody.package_policies[0].id); + expect(createdPolicy.package_policies[0].policy_ids).to.eql( + requestBody.package_policies[0].policy_ids + ); + expect(createdPolicy.package_policies[1].id).to.eql(requestBody.package_policies[1].id); + expect(createdPolicy.package_policies[1].policy_ids).to.eql( + requestBody.package_policies[1].policy_ids + ); + }); + + it('should create agent and package policy with consistent ids when given a mix', async () => { + const requestBody = { + name: 'Test Agent Policy', + namespace: 'default', + description: 'Test description', + package_policies: [ + { + id: 'test-package-policy-mixed-id', + name: 'Test Package Policy', + namespace: 'default', + policy_id: 'some-invalid-id', + enabled: true, + inputs: [ + { + enabled: true, + streams: [], + type: 'single_input', + }, + ], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }, + ], + }; + + const { + body: { item: createdPolicy }, + } = await supertest + .post('/internal/fleet/agent_and_package_policies') + .set('kbn-xsrf', 'xxxx') + .send(requestBody) + .expect(200); + + expect(createdPolicy.name).to.eql('Test Agent Policy'); + expect(createdPolicy.package_policies[0].id).to.eql(requestBody.package_policies[0].id); + expect(createdPolicy.package_policies[0].policy_id).to.be(createdPolicy.id); + expect(createdPolicy.package_policies[0].policy_ids).to.eql([createdPolicy.id]); + }); + + it('should delete created agent policy and package policies if create package policy fails', async () => { + const requestBody = { + id: 'test-agent-policy-for-rollback', + name: 'Test Agent Policy', + namespace: 'default', + description: 'Test description', + package_policies: [ + { + id: 'test-package-policy-for-rollback-1', + name: 'Test Package Policy', + namespace: 'default', + policy_ids: ['test-agent-policy-for-rollback'], + enabled: true, + inputs: [ + { + enabled: true, + streams: [], + type: 'single_input', + }, + ], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }, + { + id: 'test-package-policy-for-rollback-2', + name: 'Test Package Policy 2', + namespace: 'default', + policy_ids: ['test-agent-policy-for-rollback'], + enabled: true, + inputs: [ + { + enabled: true, + streams: [], + type: 'single_input', + }, + ], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }, + { + id: 'test-package-policy-for-rollback-3', + name: 'Test Package Policy 3', + namespace: 'default', + policy_ids: ['test-agent-policy-for-rollback'], + enabled: true, + inputs: [ + { + enabled: true, + streams: [], + type: 'single_input', + }, + ], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0-badversion', // to trigger error + }, + }, + ], + }; + + const response = await supertest + .post('/internal/fleet/agent_and_package_policies') + .set('kbn-xsrf', 'xxxx') + .send(requestBody); + + expect(response.status).to.not.be(200); + expect(response.body.error).to.not.be.empty(); + + // Verify that the valid created policies were deleted + await supertest + .get(`/api/fleet/package_policies/${requestBody.package_policies[0].id}`) + .set('kbn-xsrf', 'xxxx') + .expect(404); + await supertest + .get(`/api/fleet/package_policies/${requestBody.package_policies[1].id}`) + .set('kbn-xsrf', 'xxxx') + .expect(404); + await supertest + .get(`/api/fleet/agent_policies/${requestBody.id}`) + .set('kbn-xsrf', 'xxxx') + .expect(404); + }); + }); }); } diff --git a/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts b/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts index e316731602fea..37f2bdf4e76ee 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts @@ -67,6 +67,7 @@ export default function (providerContext: FtrProviderContext) { id: 'fleet-server-policy', namespace: 'default', has_fleet_server: true, + force: true, }); await kibanaServer.savedObjects.create({ @@ -687,6 +688,7 @@ export default function (providerContext: FtrProviderContext) { id: 'fleet-server-policy', namespace: 'default', has_fleet_server: true, + force: true, }); await kibanaServer.savedObjects.create({