diff --git a/docs/docs/gen/api/delete-node-certificate-ca.api.mdx b/docs/docs/gen/api/delete-node-certificate-ca.api.mdx
index 04db7df43..d1bde0865 100644
--- a/docs/docs/gen/api/delete-node-certificate-ca.api.mdx
+++ b/docs/docs/gen/api/delete-node-certificate-ca.api.mdx
@@ -5,7 +5,7 @@ description: "Delete a CA certificate from the target node."
sidebar_label: "Delete a CA certificate"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLQQ8JupLlVE4bAT2oiYO6SIogdRCgriqMuCNxbXKX3R06VgT+92KWkkw9iqRpAvSQk0hxnt+8V2AoZsFWbL2DETyjgpgUqqdjlVFgO7cZMql58KXinBRjWBAr5w31/3CggXERYXQFT++ppy/R4YJKcjwdv7qYdgRNfUUBRVmEiYbt24XZKv/VG+oIe4qgIVJWB8tLGF2t4CfCQGFccy56O8JH74Jlgkkz0VBhwJKYQkw8DkuCEeQ+cnrUYMXdCjkHDYH+qm0gAyMONek9TC5bl3FBjtVGglaBIoVbMir4mq1bqFssalIPpuiWWk2xKB5q5YMqcEaFilRQxj6oBze0HCXShy2Adz2Ple1l3tCCXI/uOGCvRXUFt1hYgyy2b4zUpXU/nur0ZdqGAxoNMcupROHhZSX0kYN1C9BQWveC3ELgOm0avQXjXwPRiYoS5r56WUdWmXeM1inviqXCosrR1SUFm6ksx4CZBEGr2hkKMfOBolbojMqXVU4u/hcQPt5vSQhmCuLGn1fYez/u/T7oPZn2Jt9+A40kTKBYeRcpaXw0GMjPnvu7JWFStpo+aBAEyLGwYFUV8t16d3IdhW91aKKfXVPGoKEKUgFsW63Xfja15pgrcx9KZBhBXVsDBwmak7r2M3XxTNWRjGKvquAzilFxbqMS0CiyWEp3WFaFyD47G9APw8GgR4+ezHrDUzPs4fenj3vD4ePHZ2fD4WAwGAi+gWJdcOxYhSHgUhKHqYzHvNq17nUSoPz8sKtkgZBJq7oy6deHNapq2xjU3AflHaXC6x9Ati3oI6DtmvHzmlIMkUbWljPnyBuwBDmBa6u7n/KLket4TD65upQO5G8kQmgLktDEG1tVZKS7HUapFbYxYdfJpLv1stHwcU4dVKSwZjm6BXXzaOZ9QegO2N/mxDmFPWNKb+zcklFxGZnKZHQrmULw4cNWnQuZKilGXJCyXbxbmPrQNN1mc9VtzGvAJxrYckrV7jQYv6w5mXnuOCyh2Re0SdcPsb9el7tIaDQMB6eHBf/GYc25D/Y9GdVT41cX6oaWaqvusxX+R+I6Vp33TRIl3jaPfZbVIbQt6b7QnyfIpSkE4mDpdpOGKaSGGG1xNL/3lBtj5RELteZROPM13xtxVK2pSVQ74nc+3Ci2Jfm6TXFp9h291jEtKBztbq2TwrCj5GwwkOBtAp3y7iCw3x0G9rkPM2sMOdVTFy7W87nNrKRnRaG0Mab15Gt0///RPTs2p9v2kwaJrGW7M+czjuuvcf1CcW00lMS5l5ug3QdAtxvqCE7k8jhZbeZFc9KJ7UmGJ6v0bzoZwm27/U/u74ffJLRt9LpXxNabnLmC9U6ZBmciAr1+eL5Zw355e5lGmHVzn9jXvozTkLs/f2RmgAYxpIXltD/op7Wq8pFLTPm2Xsf/4fTaR3Z1n76fcq21fjLd8UlVoHViSx0KkdsifAVCDRpGnZm8a08mJ9kofZroNLqFbbWaYaQ3oWga+fuvmsKyRf8Wg8WZAHS1AmOjPBsYzbGI+zdG17sHr9eD9qH6wifYUVQ2266TXTdRwwhAww0tu5ekHFSf5NMXvKY+wZ/Wl0mjISc0FFKs2k/jLKOKO0wHTVPup23FPjt/cX55Dhpwt7b2aikpOGrTatVSXPobck2zNZHlXWxsmr8BLcLKWw==
+api: eJztWG2P00YQ/iurUT+AusnlaI6WSP0Q4FCvggrRQ0i9ptHEO4mXs3fd3fFxIfJ/r2ad5JyXCkqLRCU+xS87b88zM57JCgzFLNiKrXcwgqdUEJNC9WSsMgps5zZDJjUPvlSck2IMC2LlvKH+7w40MC4ijK7gyd3p6Qt0uKCSHE/HLy+mHUVTX1FAMRZhomF7d2G2xn/xhjrKniBoiJTVwfISRlcreEwYKIxrzsVuR/noXbBMMGkmGioMWBJTiEnGYUkwgtxHTpcarIRbIeegIdCftQ1kYMShJr2HyWUbMi7Isdpo0CpQpHBDRgVfs3ULdYNFTereFN1SqykWxX2tfFAFzqhQkQrK2Ad175qWo3T0fgvgbc9jZXuZN7Qg16NbDthrUV3BDRbWIIvvGyd1ad2Ppzq9mbZ0QKMhZjmVKDK8rOR85GDdAjSU1j0ntxC4TptGb8H4x0B0WFEi3Fcv6sgq847ROuVdsVRYVDm6uqRgM5XlGDATErSqnaEQMx8oaoXOqHxZ5eTivwHh4+OWhGCmIGH8cYW99+Peb4Peo2lv8u030EjCBIqVd5GSxQeDgfzshb9bEiZlq+mDBkGAHIsIVlUh7613J2+jyK0OXfSzt5QxaKiCVADb1upbP5tacyyUuQ8lMoygrq2BgwTNSb31M3XxVNWRjGKvquAzilFxbqMS0CiyeEq3WFaF6D47G9APw8GgRw8ezXrDUzPs4fenD3vD4cOHZ2fD4WAwGAi+gWJdcOx4hSHgUhKHqYzHotr17lVSoPz8sKtkgZBJq7oy6deHNapq2xjU3AflHaXC6x9Ati3oI6DtuvHT+qQ4Io2sLWfOkTdgCXIC19Z2P+UXI9fxmH5ydSkdyF8LQ2gLEmrita0qMtLdDllqlW1c2A0y2W6jbDR8XFAHFSmiWY5uQd08mnlfELoD8Tc5cU5hz5nSGzu3ZFRcRqYyOd1qphB8+LBX53JMlRQjLkjZLt4tTH1omm6zueo25jXgEw1sOaVq92swflFzcvPccVhCs69ok64fEn+1LnfR0GgYHiv4x2g2taN6at2FBKGEw39Y+B+J61h17jdJlGTbPPZZVofQtqS7Qn+WIJemEIiDpZtNGiZKDTHa4mh+7xk3xsolFmoto3Dma75z4qhZU5OYdsTvfLhWbEvydZvi0uw7dq1jWlA42t3aIEVgx8jZYCDkbYhOeXdA7Okhsa8d1pz7YN+TUT01fnmhrmmptnn0ldj/A7HfHRL7zIeZNYac6qkLF+v53GZW+k5FobQxprnzK7tfPrtnx/px+11JE4LM27vDxNd2/OXz2mgoiXMvy1476IFuV48RnMhKebLaDALNSYfbkwxPVulp2gXDTbvWTe4Ww1+F2pa97nq4jSZnrmC9LKSJKB0Cvb54tpmvf35zmWYT6+Y+ia9jGafp5W6vlW8GaBBHWlhO+4N+mpcrH7nElG/rPetvdup9ZFd36fspa3gbJ9Mtn1QFWie+1KEQvS3CVyCnQcOoM2zt+pPJrj1KryY6zWQitlrNMNLrUDSNPP6zprBs0b/BYHEmAF2twNgo1wZGcyzi/vLYje7eq/WH9r76zLv1UVQ2a4yTJSadhhGAhmtadv8ikE35k2L6jGvyJ8TTxjJpNOSEhkLiqn01zjKquCN00DRlMd5W7NPz5+eX56ABd2trr5aSgaM+rVbtiUt/Ta5pti6y3IuPTfMXq4NvGQ==
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Delete a CA certificate from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-group.api.mdx b/docs/docs/gen/api/delete-node-group.api.mdx
index 0264b9f6e..f90f69fe3 100644
--- a/docs/docs/gen/api/delete-node-group.api.mdx
+++ b/docs/docs/gen/api/delete-node-group.api.mdx
@@ -5,7 +5,7 @@ description: "Delete a group from the target node."
sidebar_label: "Delete a group"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe0oB2lE6J9sE7CFD0y1DOxRdgj5khkGLZ4uxRKrkKY1n6H8fjrQdxfa2pmuBDeiTJet+fPfdHXm3Ao2h8KYh4yzk8AIrJBRKzL1rGzHzrhZUoiDl50jCOo3D3y1IIDUPkN/AdUA/UVZPfmKFyWtl1RxrtDQ5f3M5iVYmrkGv2EGAsYTt26XeOvzVaYwGQELAovWGlpDfrOBHVB79eUslO2sD+vyDN4Qw7sYSGuVVjYQ+RGGraoQcShcoPkowHFOjqAQJHt+3xqOGnHyLcifwqxSgmqMlsbEghceA/g618K4lY+fiTlUtiqOJskspJqqqnknhvKjUFCsRsMKCnBdHC1zmUfRZout+4FRjBoXTOEc7wHvyapA4XMGdqoxWxNg3IGVt7A8nMn6ZJPKhkxCKEmvFOrRsWD6QN3YOEmpjX6GdM08nXSe3ZDyZiJgGwWr/BvlTwI4ZUmicDRiNPs8y/jkES8dq0UOQUDhLaIklVdNUpog1dXwbWHy179xNb7EgkNB4rkAyydmtm06MPgRy5nytCHJoW6Nhr15KFLduKi5fiDagFuRE412BIQgqTRBMBwZipHiv6qZi26enGX43yrIBPv9+Ohid6NFAfXtyNhiNzs5OT0ejLMsyZs5jaCsKPVTKe7XkPBLW4VBUj9G9jQaEm207ufCoCKVoGx1/nV+TKbb9KGbOC2cxlv9wj6ltWx3g6rH3n9eS7J8Pj9RUVCracMSEMUtb38NYMKSoDYfso21rPgDcghOjTIWckbAwTYOaD5X95CRjGwiPg4y+U5SdhI8LqtcXrFSUys6xXzhT5ypUdk/xXYlUot+BUTttZga1CMtAWEe4yTJ67/w/47lgMVFjCGqOwvSZTgQNoev6zX7TPxjXVI8lkKFYmzG+1y1FeKl+oNu1sCnMv9GLfcyanYRRdrLfyddWtVQ6b/5ALQbi/M2lWOBSbN18ttb+SCLPRe99Uy9RN5WsK4rW+3ToPLTyy8gxt71H8gbvNhUXc6iRlKkOlvKOc60NP6pKrHWEmrqWHkAcdKtbZNcW6YPzC0GmRtemauaDuufXWMI5+oPnVwqSFR45Oc0yTt4mwbHQ9hL7zX5iXzo/NVqjFQNxaUM7m5nCcD026GsTQhwAvmb3/5Dd0V9dwNaRmLnWfs4r+Gsmv1gmTw+NUunmiLc/T7RxPviazv9+OjsJNVLpeG1KsxtzzzN9Dse8mR2vNjd8dxyzeryKL3Gp8ndpTRo/bFi/cUZT0vp71jaIkiguZFGMJ5woBHL98HIzIP/y7irOGsbOXFRfh3Aep5GHlZDvepDAQBIbJ8NsGAfexgWqVSyz9d7yeBHd5XH1UKxPWFlTVIT3dNxUylj23PqKzSUab4ClQULeG5U2APL4PpZxjGLZ1WqqAl77quv47/ct+mUi+E55o6bMwc0KtAn8rCGfqSrs7lv9SI7ermegZ+ILr6MHqdisGpYXjSgNOYCEBS77WzUvl58U0+5m+QkgEoBxJ6FEpdFHgtOn86LAhnpKe2cYL5rbBnpx8eri6gIkqMc1v1Pj0cFBTKtVkrhyC7Rdt4VI/M4Yu+5P0akB5g==
+api: eJztWN9v2zYQ/leIe0oB2nE6p9sE7CFFky1DOxRdij5khkGLZ4uxRKrkKY1n6H8fjrQcxfa2tmuBFciTJft+fPfdHX3HNWgMuTc1GWchgxdYIqFQYuFdU4u5d5WgAgUpv0AS1mkc/mFBAqlFgOwa3gb0U2X19GdWmL5SVi2wQkvTs9eX02hl6mr0ih0EmEjYvl3qrcPfnMZoACQEzBtvaAXZ9Rqeo/Lozxoq2FkT0GcfvCGESTuRUCuvKiT0IQpbVSFkULhA8VGC4ZhqRQVI8Pi+MR41ZOQblDuBX6UA1QItic6CFB4D+lvUwruGjF2IW1U2KI6myq6kmKqyfCKF86JUMyxFwBJzcl4cLXGVRdEnia67gVO1GeRO4wLtAO/Iq0HicA23qjRaEWPvQMrK2J9OZPxlmsiHVkLIC6wU69CqZvlA3tgFSKiMfYl2wTydtK3ckvHJRMQ0CFb7L8g/BeyEIYXa2YDR6NPRiD8OwdKxWvQQJOTOElpiSVXXpcljTR3fBBZf7zt3sxvMCSTUniuQTHJ242ZTow+BnDtfKYIMmsZo2KuXAsWNm4nLF6IJqAU5UXuXYwiCChME04GBGCneqaou2fbp6Qh/GI9GA3z642wwPtHjgfr+5NlgPH727PR0PB6NRiNmzmNoSgo9VMp7teI8ElbhUFQP0b2JBoSbbzs596gIpWhqHT+d35Aptv0o5s4LZzGW/3CPqW1bHeDqofdfNpLsnw+P1FRUKOo4YsKYpa3vYSwYUtSEQ/bRNhUfAG7JiVGmRM5IWJq6Rs2Hyn5ykrEOwsMgo+8UZSvh44Lq9QUr5YWyC+wXzsy5EpXdU3xXIBXod2BUTpu5QS3CKhBWEW6yjN47/+94zllMVBiCWqAwfaYTQUNo236zX/cPxg3VEwlkKNZmjO9VQxFeqh9ody10hfkPerGPWbOVMD7Uyc+V7rpDDMTmBGFKYuBfsLU/ksgz0Xvv6iXqppJ1ed54nw6d+1a+iBxz23skb/C2q7iYQ42kTHmwlHeca234UZVioyPUzDV0D+KgW90gu7ZIH5xfCjIVuiZVMx/UPb/GEi7QHzy/UpCs8MDJ6WjEyesSHAttL7En+4l9a1VDhfPmT9RiIM5eX4olrsS2fh4T+y0k9rv9xF44PzNaoxUDcWlDM5+b3PBBU6OvTAhxsnvM7reQ3fHfTVbWkZi7xn7J2eoxk18tk6eH/lnTSBDHOl5V4uD3mM7/fzpbCRVS4XgfTkM5c8/LWgbHvHIfr7vRrT2OWT1ex5e4LfvbtP9O7lfn3zmjKWn9BXobREEUN+0oxqNrFAK5ebjoNp9f313FIdLYuYvqmxDO4ph5v+vzfz1IYCCJjZPhaBg3mdoFqlQss81C+vCGYZfH9X2xfsJdRIqK8I6O61IZy54bX7K5ROM1sDRIyHozcAcgi+8TGedjll2vZyrgW1+2LX/9vkG/SgTfKm/UjDm4XoM2gZ81ZHNVht1Fuh/J0ZvNDPREfOV7hoNUdDuk5Q0ySkMGIGGJq/51Cd8afFZMu1cGnwEiAZi0EgpUGn0kOP10ludYU09p7wzjG4RtA704f3l+dQ4S1MOa36nx6OAgpvU6SVy5Jdq23UIkfmeMbfsXt1WmlQ==
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Delete a group from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-ntp.api.mdx b/docs/docs/gen/api/delete-node-ntp.api.mdx
index 066d9c110..f88a15985 100644
--- a/docs/docs/gen/api/delete-node-ntp.api.mdx
+++ b/docs/docs/gen/api/delete-node-ntp.api.mdx
@@ -5,7 +5,7 @@ description: "Remove the managed NTP server configuration from the target node."
sidebar_label: "Delete NTP configuration"
hide_title: true
hide_table_of_contents: true
-api: eJztV01v4zYQ/SvEnDYA7ShbJ20F9JAiCZpiNwjSLPaQGgYtji3GEqklR9l4Df33Ykjb8RfQPWSBFsjJkjXDmXnvkZxZgMZQeNOQcRZyuMPaPaGgEkWtrJqiFjf3tyKgf0IvCmcnZtp6xdZi4l0dLUn5KZKwTmP/bwsSSE0D5A9wc387+hiXqdHS6Pz2emSpGbkG0xIBhhLWb9cacrjACglvnMYbakBCwKL1huaQPyzgd1Qe/XlLJa9uqcm/ekMIw24ooVFe1UjoQ7S1qkbIoXSB4qMEwwU2ikqQ4PFLazxqyMm3KHdQuE8FqSlaEqsVpPAYcdDCu5aMnYonVbUo3o2UnUsxUlV1JIXzolJjrETACgtyXryb4TyPpkcJnueeU43pFU7jFG0Pn8mrXsJsAU+qMloR575KUtbG/nYi45dRAhs6CaEosVbsQ/OG7QN5Y6cgoTb2A9opw3TSMTYeQ+NswBjhfZbxz3bJzPI2vToyofsgoXCW0BJ7qaapTBEtjh8Duy72E3HjRywIJDSe2SWTAj+68cjoQwlPnK8VQQ5tazTs0VGieHRjcX0h2oBakBONdwWGIKg0QTBOGIgzxWdVNxWvfXqa4S+DLOvh+1/HvcGJHvTUzydnvcHg7Oz0dDDIsixjFD2GtqKwkZXyXs1ZL4R1OFTV7pbhBYSbCGXjZik8KkIp2kbHX+eXWIq11MXEeeEsRnH194Bai/YAVNvB/1hacnjeikmyVCpaQcR4MUjr2P2oHVLUhkPro21r3l1uxrwoUyETEmamaVDzft3nJi22SmG7yBg7VdlJKEplp7gpgbFzFSq7V9jnEqlEv7Ni7bSZGNQizANhHSNjXBm9d/7f8bpkM1FjCGqKwmyClmrtQ9dtHg8PmyfIErWhBDIUVXZDzceWYnJJB9Dt+q8Etu2Vzrm75b5kr07CIDvZ35mfrGqpdN58Qy164vz2WsxwLtYhXm17fieE52LjfUV69E26c0XRep8OjpfteBXR5a3rkbzBp5VsInsaSZnqoB53gmtt+FFVYukj1Ni19JLEwbC6RQ5tkb46PxNkanTtUpJOb+4zYwmn6A+eQalIdtgKcpplTN6K3CixPWJ/2if2yvmx0Rqt6IlrG9rJxBSGldigr00I8YJ8Y/f/wO7gey5U60hMXGtf80p9Y/WHsXp6qE1K90e8zrkB3CP5jdr/PrWdhBqpdDxupMaMsee5IIdjHmKOF6s7vzu2yymE5x8eLIYvI8lfTGTianMwWedeUvKNZtzqRCOQy4erVc/75+f72HQYO3HRfZn5eWxLXuYnvvpBAieSQDjpZ/3YwzYuUK2iupZjT2ov9vW5C+TiRa2vNful4gmf6biplLGcYOsrjpVAfgC2Bgn5RmvFOA9lbLbYYrEYq4CffNV1/PeXFv08of+kvFFjBuhhAdoEftaQT1QVdue4zeLe3S37pSPxg6e7gwCsRgvLg0W0hhxAwgznm0NqN+wklKg0+lhf+nxeFNjQhuPescIz3lrTF5cfLu8vQYLa1uOO/mKAg3ktFsni3s3Qdt06TeJ3zrHr/gGkJqA1
+api: eJztWN9vGzcM/lcEPiWA7Didk20H7MFFEixDGwRZij5khiGfaJ/iO+kq8dK4xv3vAyXb8S9gfUiBFciT72JSJL/vo0xmARpD7k1NxlnI4A4r94SCChSVsmqKWtzc34qA/gm9yJ2dmGnjFVuLiXdVtCTlp0jCOo3dfyxIIDUNkD3Azf3t6GM8pkJLo8Ht9chSPXI1piMCDCWs3641ZHCBJRLeOI03VIOEgHnjDc0he1jAe1Qe/aChgk+3VGdfvSGEYTuUUCuvKiT0IdpaVSFkULhA8VGC4QJrRQVI8PilMR41ZOQblDso3KeC1BQtidUJUniMOGjhXUPGTsWTKhsURyNl51KMVFkeS+G8KNUYSxGwxJycF0cznGfR9DjB89xxqjad3Gmcou3gM3nVSZgt4EmVRivi3FdJysrYP05l/GaUwIZWQsgLrBT70Lxm+0De2ClIqIz9gHbKMJ22jI3HUDsbMEZ41+vxx3bJzPI2vToyobsgIXeW0BJ7qbouTR4tTh4Duy72E3HjR8wJJNSe2SWTAj+68cjoQwlPnK8UQQZNYzTs0VGgeHRjcX0hmoBakBO1dzmGIKgwQTBOGIgzxWdV1SWffXbWw9/6vV4H3/0+7vRPdb+jfj097/T75+dnZ/1+r9frMYoeQ1NS2MhKea/mrBfCKhyqardl+ADhJkLZ2Cy5R0UoRVPr+On8EkuxlrqYOC+cxSiu7h5Qa9EegGo7+J9LSw7PrZgkS4WiFUSMF4O0jt2N2iFFTTh0Ptqm4u5yM+ZFmRKZkDAzdY2a+3Wfm3TYKoXtImPsVGUrIS+UneKmBMbOlajsXmGfC6QC/c6JldNmYlCLMA+EVYyM8WT03vn/xuuSzUSFIagpCrMJWqq1C227eT08bN4gS9SGEshQVNkN1R8bisklHUC7678S2LZXuufuln3JXq2E/qHOfK/0SuGiI5bXA4MRS37F9vxOCAdi431FevRNunN53nifLo6XdryK6HLreiRv8Gklm8ieRlKmPKjHneBaG35UpVj6CDV2Db0kcTCsbpBDW6Svzs8EmQpds5Sk05t9ZizhFP3BOygVyQ5bQc56PSZvRW6U2B6xp/vEfrKqocJ58w216IjB7bWY4VystfNG7M9A7C/7xF45PzZaoxUdcW1DM5mY3PAVU6OvTAhx8nlj92dgt/89k5J1JCausa85K72x+sNYPTv0K5sGgzin8WS/R/Ibtf9/alsJFVLheI9MEzdjzwtfBie8nZ4sVsNce2KX6yUvtrwxDl92zb+ZyMTV5sa5zr2g5BvNeIaNRiCXD1erZeavz/dxmjR24qL7MvNBnDdfFmP+6QcJnEgC4bTb68blpHaBKhXVtdxn09y4r89dIBcvan2tpT4VT/hMJ3WpjOUEG19yrATyA7A1SMg2ZmbGeSjjFM0Wi8VYBfzky7blP39p0M8T+k/KGzVmgB4WoE3gZw3ZRJVhd0HfLO7objkvHYsfvLYfBGC1M1reGKM1ZAASZjjf/O9DO2wlFKg0+lhf+nqQ51jThuPetcLL+1rTF5cfLu8vQYLa1uOO/mKAg3ktFsni3s3Qtu06TeJ3zrFt/wWI6kTz
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -241,6 +241,97 @@ Remove the managed NTP server configuration from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-package.api.mdx b/docs/docs/gen/api/delete-node-package.api.mdx
index 52f28a70e..ea41a1a2b 100644
--- a/docs/docs/gen/api/delete-node-package.api.mdx
+++ b/docs/docs/gen/api/delete-node-package.api.mdx
@@ -5,7 +5,7 @@ description: "Remove a package from the target node."
sidebar_label: "Remove a package"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe2oB2lE6p9sE7CFDEyxDOxRdij5khkGLZ4uxRKrkyY1r6H8fjpQdx/a2tmuBDciTJfl+fPfdHXm3Bo2h8KYh4yzk8AZrt0ShRKOKhZqjmHlXCypRkPJzJGGdxuEfFiSQmgfIb+B1kpy8UlbNsUZLk/PXV5PewMQ16BVbDzCWsH270pDDC6yQ8DensTcCEgIWrTe0gvxmDT+j8ujPWyrZU28y/+ANIYy7sYRGeVUjoQ9R3qoaIYfSBYqPEgxH1SgqQYLH963xqCEn36LcC/06BajmaElsLEjhMaBfohbetWTsXCxV1aJ4MlF2JcVEVdVTKZwXlZpiJQJWWJDz4skCV3kUfZrouhs41ZhB4TTO0Q7wjrwaJA7XsFSV0YoY+wakrI396VTGfyaJfOgkhKLEWrEOrRqWD+SNnYOE2tiXaOdM1WnXyS0Zn01EnwvBiv8G++fAHTOo0DgbMBp9lmX8cxyYj0WqhyChcJbQEsuqpqlMEYvr5DawwvrQvZveYkEgofFcimSSu1s3nRh9DObM+VoR5NC2RsNBzZQobt1UXL0QbUAtyInGuwJDEFSaIJgQDMRI8U7VTcW2z84y/GGUZQN89uN0MDrVo4H6/vT5YDR6/vzsbDTKsixj7jyGtqKwg0p5r1acS8I6HItqv5nZgHCznX42NpCqKtmTGEu3bTh/YtubYua8cBZjFwwPyNp21xG6HgL4pZdkCHyGpN6iUtGGJuaMidr6HsaqIUVtOGYfbVvzUeAWnBtlKuSkhIVpGtR8wBzmJxnbQHgYZPSdouwkfFpQD9qD1YpS2TnuVs/UuQqVPVB9VyKV6PeA1E6bmUEtwioQ1hFwsozeO//PiC5YTNQYQszwLteJoiF03W7X3+yekD3ZYwlkKBZoH+GrliLAVEbQ7dvY1OffasaWZt1Owig7PWzqt1a1VDpvPqIWA3H++koscCW2jr5aj38imedi531TNVE3Fa4ritb7dPrc9/Rl5Jn73yN5g8tN3cU8aiRlqqMFvedca8OPqhK9jlBT19I9iKNudYvs2iJ9cH4hyNTo2lTTfGbv+DWWcI7+6EGWgmSFB07OsoyTt0lxLLaDxH53mNhL56dGa7RiIK5saGczUxiuyQZ9bUKII8Fjdv8P2R399V1sHYmZa+3XvI0fc/nNcnl2bK5K90ccCHjA7UeFx4T+9xPaSaiRSsfLlI7LFHPPQ34OJ7yqnaw3N3130uf1ZB1f46rll2lzGt/vXb9zTlPadrevbRglUQP9YB9nnSgEsn+43MzLv767jlOHsTMX1fsgzuNccr8s8o0PEhhI4uN0mA3j/Nu4QLWKhdavMvvb6T6X6/uC/axNNkVGeEcnTaWMZe+tr9hgIvMGWBok5DuD0z2IPH4ZyzhWsfR6PVUB3/qq6/jz+xb9KtG8VN6oKTNxswZtAj9ryGeqCvuL2G40T97089BT8Y331KNkbPYPy9tHlIYcQMICV7vrNm+dXxTT4cr5BTAShHEnoUSl0UeK01/nRYEN7SgdnGa8gW5b6cXFy4vrC5CgHtb+Xq1HB0cxrddJ4tot0HbdFiLxO2Psuj8BhCsLFw==
+api: eJztWN9v2zYQ/leIe2oB2nE6p9sE7CFFUyxDOxRdij5khkGLZ4uxRKrkyY1r6H8fjpQdxfa2tmuBFciTJft+fPfdHX3HDWgMuTc1GWchgzdYuRUKJWqVL9UCxdy7SlCBgpRfIAnrNA7/tCCB1CJAdg2vk+T0lbJqgRVamp6/vpx2BqauRq/YeoCJhN3bpYYMnmOJhL87jZ0RkBAwb7yhNWTXG3iGyqM/b6hgT53J7IM3hDBpJxJq5VWFhD5EeasqhAwKFyg+SjAcVa2oAAke3zfGo4aMfINyL/SrFKBaoCWxtSCFx4B+hVp415CxC7FSZYPi0VTZtRRTVZaPpXBelGqGpQhYYk7Oi0dLXGdR9HGi63bgVG0GudO4QDvAW/JqkDjcwEqVRiti7FuQsjL2l1MZf5km8qGVEPICK8U6tK5ZPpA3dgESKmNfol0wVadtK3dkfDYRXS4EK/4X7J8Dd8KgQu1swGj0yWjEH8eB+VikeggScmcJLbGsquvS5LG4Tm4CK2wO3bvZDeYEEmrPpUgmubtxs6nRx2DOna8UQQZNYzQc1EyB4sbNxOVz0QTUgpyovcsxBEGFCYIJwUCMFG9VVZds++xshD+NR6MBPvl5Nhif6vFA/Xj6dDAeP316djYej0ajEXPnMTQlhR4q5b1acy4Jq3Asqv1mZgPCzXv9bGwgVZayIzGWblNz/sSuN8XceeEsxi4YHpC1664jdN0H8GsnyRD4DEm9RYWiLU3MGRO18z2MVUOKmnDMPtqm4qPALTk3ypTISQlLU9eo+YA5zE8ytoVwP8joO0XZSvi0oO61B6vlhbIL7FfPzLkSlT1QfVcgFej3gFROm7lBLcI6EFYRcLKM3jv/74guWExUGELMcJ/rRNEQ2rbf9df9E7IjeyKBDMUC7SJ81VAEmMoI2n0b2/r8R83Y0qzbShgfa+pnSm/bRAxEd5gwLTH4r9jjn0jmuei9b6sm6qbCdXneeJ9On7uefhF55v73SN7galt3MY8aSZnyaEHvOdfa8KMqRacj1Mw1dAfiqFvdILu2SB+cXwoyFbom1TSf2T2/xhIu0B89yFKQrHDPydloxMnbpjgW20FiTw8T+9aqhgrnzUfUYiDOX1+KJa7FroIeEvs9JPaHw8S+cH5mtEYrBuLShmY+N7nhw6ZGX5kQ4qz3kN3vIbvjvx+yrCMxd439mmPWQy6/WS7Pjv23psEgTnq8uXQz4ENC//8JbSVUSIXjLVnHLZm55+0tgxPewU822xGuPenyerKJr3GH9qu0Ek/uFuo/OKcpbf21ehdGQVRDt7HFITYKgeweXmwXod/eXcVx0ti5i+pdEOdx4Ly7BeB/fJDAQBIfp8PRMC42tQtUqVho3Y66f+2wz+XmrmA/64oiRUZ4Syd1qYxl740v2WAi8xpYGiRkvYn4DkQWv5nIOC+z9GYzUwHf+rJt+ev3Dfp1onmlvFEzZuJ6A9oEftaQzVUZ9jfsfjSP3nTz0GPxjS8gjpKxXSwtr5VRGjIACUtc9+9R+Drhi2I6vEv4AhgJwqSVUKDS6CPF6afzPMeaekoHpxlfLexa6fnFy4urC5Cg7tf+Xq1HB0cxbTZJ4sot0bbtDiLxO2Ns278Aydevxg==
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Remove a package from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-schedule-cron.api.mdx b/docs/docs/gen/api/delete-node-schedule-cron.api.mdx
index 18eb8fce5..547603f84 100644
--- a/docs/docs/gen/api/delete-node-schedule-cron.api.mdx
+++ b/docs/docs/gen/api/delete-node-schedule-cron.api.mdx
@@ -5,7 +5,7 @@ description: "Delete a cron drop-in entry from the target node."
sidebar_label: "Delete a cron entry"
hide_title: true
hide_table_of_contents: true
-api: eJztV21v2zYQ/isEsQ8tRtlK53SrgX3w1hTL0BRFl6LAMs+gxbPFWCLV4ymNa+i/D0fajmN7W9e1wAb0kyWL9/Y8d8e7lTQQCrQNWe/kUD6FCgiEFgV6Jwz6JrNOgCNcihn6WlAJgjTOgYTzBnq/Oakk6XmQwyv5S1GCaSuYXGin51CDo8no5fmElU18A6jZTJBjJbdv52Zr9oU3sFHxI3rWHKBo0dJSDq9W8gfQCDhqqWRjrHT4Di2BHHdjJRuNugYCDPGw0zXIoSx9oPiopOUAG02lVBLhbWsRjBwStqD2ULhMAeo5OBIbDUogBMAbMAJ9S9bNxY2uWhAPJtotlZjoqnqohEdR6SlUIkAFBXkUDxawHMajDxNct5nXjc0Kb2AOLoNbQp0lDFfyRlfWaGLfN06q2rrvT1T8Mkngy07JUJRQa5ahZcPnA6F1c6lkbd1zcHPG6aTr1BaMfwwEs7Bmn2V74qINJArvSFsnvKuWQldNqV1bA9pCFKVGXTAHSrTOAIbCIwQltDOiXDYluPBvMPjwsDkfiAA5it+vdPZ+lP2aZ08m2fjrr2TH+YIQGu8CRIuP8px//jR6ExPU9KSSHD044uO6aSpbxDTuXweWWR2656fXUJBUskFOerLJ4rWfTqw5FsbMY61JDmXbWiMPcrMEce2n4vypaAMYQV406AsIQVBpg2DAIBB7Cre6birWfXqaw3eDPM/g0ZNpNjgxg0x/e/I4GwwePz49HQzyPM8ZW4TQVhR2vNKIesk5Q1CHY1Hd9+5VVCD8bNNCCgRNoETbmPjrcY2l2HYAMfMovINYab0DoLYVfASq+8Z/Wp9k89ynUv1SqWkDEePFIG1t92JGkaY2HNMPrq251/gF86JtBUxIWNimAcNt7JCbpGzjwv0go+0UZafkhwW1X4IsWZTazWE3eabeV6DdgfSbEqgE3POl9sbOLBgRloGgjj4nzYDo8e+dOuNjooYQ9ByE3YU7odSTXbfbXK52G/Ea77GSZCnmJwd50VL0LqWQ7PYVbHJzTyxdHa/WxcxinZKD/OSwnF873VLp0b4HIzIxenkuFrAUWxufrLQ/EMSR2HnfJEyUTTnri6JFTE3nrpSfRXy57BEILdxsUi7yZ4C0rY7m8p5xYyw/6kqsZYSe+pbunDhq1rTAph3QO48LQbYG36Z05la+Y9c6gjng0f6VgmSBe0ZO85zJ27Abk+yA2G8OiX3mcWqNAScyce5CO5vZwnIuNoC1DSHOHF/Y/T+wO/jLW9h5EjPfuk95D3+h87PReXpsqEpXR5wBeIQutux+4fS/z2mnZA1Uet7Z0hgnVdokhrLP+2B/tbnnu35Yr3J95ri/in/GlQ5v0pI2vtvveO2rE3m7W942mJKokevZP8478ZBU64dnm5H55zeXcfKwbuaj+DqUUZxN7tZSvv2lkuxIQuWkl/fiCNz4QLWO6bbemu7vxDFX90Fd3WXux67QKU6CW+o3lbaOfWmxYt0J4CvJp6WSw91Rao0x107amIfxy1jFgYulVqupDvAaq67jv9+2gMsE/o1Gq6eMz9VKGhv42cjhTFdhfxPcDfDBq/XE9FB85kX5KCibxcQxC/G0HEqp5AKWu/s+r70fFdPn23k/IpwUyrhTsgRtACNV6dOoKKChHaGDjslb7rZcn549P7s8k0rq+5W1V0nRwFGfVqt04tIvwHXd1kXid/ax6/4AcOlXog==
+api: eJztWG2PGjcQ/iuW1Q+J6gUu5dIGqR9Ic1GvSqoovShSrxSZ9cD62LW349nLEbT/vRqb5TigbZomUiPdJxbwvD3PzOyM19JAyNHWZL2TI/kMSiAQWuTonTDo68w6AY5wJeboK0EFCNK4ABLOG+j95qSSpBdBji7lL3kBpilh+lI7vYAKHE3Hr86nrGzqa0DNZoKcKLn9dm62Zn/2BjoVP6BnzQHyBi2t5OhyLZ+CRsBxQwUbY6Wjd2gJ5KSdKFlr1BUQYIiHna5AjmThA8VHJS0HWGsqpJIIfzQWwcgRYQNqD4WLFKBegCPRaVACIQBegxHoG7JuIa512YB4MNVupcRUl+VDJTyKUs+gFAFKyMmjeLCE1SgefZjgusm8rm2WewMLcBncEOosYbiW17q0RhP73jmpKuu+P1Hxn2kCX7ZKhryASrMMrWo+HwitW0glK+tegFswTidtq7Zg/GsgmIUN+yzbEy+bQCL3jrR1wrtyJXRZF9o1FaDNRV5o1DlzoETjDGDIPUJQQjsjilVdgAv/BYMPD5vzgQiQo/j9Umfvx9mvg+zJNJt8/ZVsOV8QQu1dgGjx0WDAH38ZvYkJanpSSY4eHPFxXdelzWMa968Cy6wP3fOzK8hJKlkjJz3ZZPHKz6bWHAtj7rHSJEeyaayRB7lZgLjyM3H+TDQBjCAvavQ5hCCosEEwYBCIPYUbXdUl6z49HcB3w8Egg0dPZtnwxAwz/e3J42w4fPz49HQ4HAwGA8YWITQlhR2vNKJecc4QVOFYVHe9ex0VCD/vWkiOoAmUaGoTPz1usBTbDiDmHoV3ECutdwDUtoKPQHXX+I+bk2ye+1SqXyo0dRAxXgzS1nYvZhRpasIx/eCainuNXzIv2pbAhISlrWsw3MYOuUnKOhfuBhltpyhbJT8sqP0SZMm80G4Bu8kz874E7Q6k3xZABeCeL5U3dm7BiLAKBFX0OWkGRI//7NQZHxMVhKAXIOwu3Amlnmzb3eZyuduIN3hPlCRLMT85yJcNRe9SCsl2X0GXm3ti6dXxelPMLNYqOTxWzk+16apDZGLTYxiOGPQnLO0PBHEsdr53CRNlU876PG8QU9O5LeXnEV8uewRCC9ddykX+DJC25dFc3jNujOVHXYqNjNAz39CtE0fNmgbYtAN653EpyFbgm5TO3Mp37FpHsAA82r9SkCxwx8jpYMDkdezGJDsg9uSQ2DdON1R4tO/BiEyMX52LJazENnnuif0SiP3mkNjnHmfWGHAiE+cuNPO5zS03mRqwsiHEYfKe3S+B3eHfjlfOk5j7xn3KAeuezs9G5+mx12uaCeJwx7tRvmX3ntP/P6etkhVQ4XkZT/O5VGlFHMk+L/r9dTfAtf2w2dH7zHF/HX+Muzpep+17cru48z5fJfJ21/dtMAVRLTdLXRxk4yGpNg/Pu13op7cXcaS0bu6j+CaUcRw6b+8b+O0vlWRHEionvUEv7ja1D1TpmG6bdfjuZUfM1X1Q17eZ+7F3IylOghvq16W2jn1psGTdCeBLyaelkqPdGXmDMddOugoZxX8mKk7SLLVez3SAN1i2Lf/8RwO4SuBfa7R6xvhcrqWxgZ+NHM11GfZX/N0AH7zeTEwPxWe+ATkKSrdxOmYhnpYjKZVcwmr3IofvMz4qps93mfER4aRQJq2SBWgDGKlKf43zHGraETromHx9sS3XZ2cvzi7OpJL6bmXtVVI0cNSn9TqduPBLcG27dZH4O/vYtn8Ca3v8UQ==
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Delete a cron drop-in entry from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-service.api.mdx b/docs/docs/gen/api/delete-node-service.api.mdx
index 5291f09db..d512f0517 100644
--- a/docs/docs/gen/api/delete-node-service.api.mdx
+++ b/docs/docs/gen/api/delete-node-service.api.mdx
@@ -5,7 +5,7 @@ description: "Delete a systemd service unit file from the target node."
sidebar_label: "Delete a service unit file"
hide_title: true
hide_table_of_contents: true
-api: eJztV91v2zYQ/1eIe0oB2nE6p9sM7CFDUixDOxRpij5khkGLZ4mxRKrkKY1n6H8fjpQdxfa2ph/AHvpkSeZ9/e53x7s1aAyZNzUZZ2EC51gioVAirAJhpUVAf2cyFI01JBamRLHwrhJUoCDlcyRhncbhnxYkkMoDTG7gbZKZvVZW5VihpdnZm8tZp2rmavSK7QWYSti+Xeqt/T+cxk4JSAiYNd7QCiY3a/gVlUd/1lDBljqVk4/eEMK0nUqolVcVEvoQz1tVIUygcIHiowTDcdaKCpDg8UNjPGqYkG9Q7oBxnQJUOVoSGw1SeGSzqIV3DRmbiztVNiiOZsqupJipsnwmhfOiVHMsRcASM3JeHC1xNYlHnyW47gdO1WaQOY052gHek1eDhOEa7lRptCL2feOkrIz95UTGf2YJfGglhKzASrEMrWo+H8gbm4OEythXaHOG6qRt5RaMJwPxtk8ClhZHOMyHUtjc2HspQij0FwX1lDim7G2onQ0YlT4fjfjnXzyOtNWRWXoIEjJnCS2xlKrr0mSRf8e3gUXX+464+S1mBBJqz2wlkwzfuvnM6EMOL5yvFMEEmsZo2KNVgeLWzcXluWgCakFO1N5lGIKgwgTB0GAg9hTvVVWXrPv0dIQ/jUejAT7/eT4Yn+jxQP148mIwHr94cXo6Ho9GoxGj6DE0JYWeV8p7teJ0E1bhUFSPvbuKCoRbcBPoUKwaihAxq1WWnjZlKxbOC2cxFshwD6Rt4R2A6bHh37qTbJrbSyo7KhRt4GGsGKCt7WHkDSlqwiH9aJuKu4Rbck6UKZGTEZamrlFz79nPS1K2ceFxkNF2irKV8GlB7VVOlM0KZXPsU2fuXInK7sm/L5AK9DveVE6bhUHddenoddKM3jv/325d8DFRYQgqR2H6gCechtC2/a5w0++gHeJTCWQosrML83XHkwtLfgXtrooNN/9Z8KorbJZtJYxHJ/ul/c6qhgrnzV+oxUCcvbkUS1yJraGvVt+fiOWZ6L1vmBNlE3ldljXep87zUM8vI8xc+x7JG7zbcC+mUSMpUx4k9Y5xrQ0/qlJ0MkLNXUMPThw0qxtk0xbpo/NLQaZC1yRec+fu2TWWMEd/sImlIFngkZHT0YiTt0lx5NpeYn/YT+xL5+dGa7RiIC5taBYLkxmmZI2+MiHEieF7dv//2T09dCOnlhNvYZ6Z9ubKr3gxf0/tN0ptK6FCKhxP6mmeYux5gpzAMe8Bx+vNNdEedxk+XsfXOMf7uzSWTx+G+rec05S2/mi/DaMgqqEbDuNFGQ+B7B5ebiat399fxyvL2IWL4l0QZ/FSe9hE+L4ACexIwuNkOBrGyal2gSoVidbNyQ/L0C5Zd1FdP1D3C1eoFDXhPR3XpTKWPWt8ySYS0DfAp0HCpH8jb5elSfwylfG+5tPr9VwFfOfLtuXPHxr0q5SCO+WNmjNKN2vQJvCzhslClWF3A+jHd3TV3bTPxDdekA6CsZlqLc+08TRMACQscdXf83jd+ayYnrDrfIZ/ybdpK6FApdFH7NNfZ1mGNfWE9logrz7b+ju/eHVxfQES1OOC2SmQaOCgT+t1OnHtlmjbdusi8Tv72LZ/A5+ZlB4=
+api: eJztV99v2zYQ/leIe0oA2nE6p9sM7CFFUyxDOxRtij5khkGLZ4mxRKrkKY1r6H8fjpQcx/a2pt2ADuiTKZn367vvTndr0Bgyb2oyzsIEnmOJhEKJsAqElRYB/a3JUDTWkFiYEsXCu0pQgYKUz5GEdRqHf1iQQCoPMLmGt0lm9kpZlWOFlmbnry9nnaqZq9ErthdgKmHzdKk39n93GjslICFg1nhDK5hcr+EZKo/+vKGCLXUqJx+9IYRpO5VQK68qJPQh3reqQphA4QLFowTDcdaKCpDg8UNjPGqYkG9Q7oBxlQJUOVoSvQYpPLJZ1MK7hozNxa0qGxRHM2VXUsxUWR5L4bwo1RxLEbDEjJwXR0tcTeLV4wTX3cCp2gwypzFHO8A78mqQMFzDrSqNVsS+907KythfTmX8Z5bAh1ZCyAqsFMvQqub7gbyxOUiojH2JNmeoTttWbsB4NBBvt0nA0uIIh/lQCpsbeydFCIX+qqAeE8eUvQ21swGj0iejEf/8jceRtjoySw9BQuYsoSWWUnVdmizy7+QmsOh63xE3v8GMQELtma1kkuEbN58ZfcjhhfOVIphA0xgNe7QqUNy4ubh8LpqAWpATtXcZhiCoMEEwNBiIPcU7VdUl6z47G+FP49FogE9+ng/Gp3o8UD+ePh2Mx0+fnp2Nx6PRaMQoegxNSWHLK+W9WnG6CatwKKqH3r2JCoRbcBPoUKwaihAxq1WWTn3ZioXzwlmMBTLcA2lTeAdgemj41+4mm+b2ksqOCkU9PIwVA7SxPYy8IUVNOKQfbVNxl3BLzokyJXIywtLUNWruPft5Scp6Fx4GGW2nKFsJnxfUXuVE2axQNsdt6sydK1HZPfn3BVKBfsebymmzMKi7Lh29TprRe+f/2a0LviYqDEHlKMw24AmnIbTtdle43u6gHeJTCWQosrML81XHkwtLfgXtroqem38t+KYrbJZtJYwPlfYzpfsSEQPRtRRGJcb+L9b3Z2J5Lraee+ZE2URel2WN96nz3Nfziwgz175H8gZve+7FNGokZcqDpN4xrrXhoypFJyPU3DV078RBs7pBNm2RPjq/FGQqdE3iNXfuLbvGEuboDzaxFCQLPDByNhpx8voUR67tJfZ0P7HvrGqocN58Qi0G4vz1pVjiSmwY9D2x/4fE/rCf2BfOz43WaMVAXNrQLBYmM9xravSVCSGOgt+z++1n9+xQP07fkjhe8TC8tzB878jffmpbCRVS4XgFS4MyY8+rwQROeME7Wfff//aky/DJOj7GBc3fpn1rer+tveWcprRt72ybMAqiGrqpP05A8RLI7vCiH6F/e38VZxFjFy6Kd0Gcx2nlfsXk7wVIYEcSHqfD0TCOxLULVKlItG4But9yd8m6i+r6nrpfuRunqAnv6KQulbHsWeNLNpGAvga+DRIm26PWZguexDdTGQcxvr1ez1XAd75sW379oUG/Sim4Vd6oOaN0vQZtAp81TBaqDLur3XZ8R2+6L+2x+I8334Ng9OuK5WUl3oYJgIQlrrYXeN5jvyimRyyxX+Bf8m3aSihQafQR+/TXeZZhTVtCey2Qd9pN/T2/eHlxdQES1MOC2SmQaOCgT+t1unHllmjbduMi8TP72LZ/AsaKONw=
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Delete a systemd service unit file from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-sysctl.api.mdx b/docs/docs/gen/api/delete-node-sysctl.api.mdx
index d045bc641..0173e711b 100644
--- a/docs/docs/gen/api/delete-node-sysctl.api.mdx
+++ b/docs/docs/gen/api/delete-node-sysctl.api.mdx
@@ -5,7 +5,7 @@ description: "Delete a managed sysctl entry from the target node."
sidebar_label: "Delete a managed sysctl entry"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIwx4SjHKUzulWA3vI0BTL0A5Fm6IPmWfQ4tliLJEqeXLjGvrfhyNtx7GNtctaYAPyYks279d33x3vlqAxFN40ZJyFATzHCgmFErWyaopahEUoqBJoyS/ExLtaUImClJ8iCes09v6wIIHUNMDgGt7G46NXUbpGS6Pz15ejpGTkGvSKDQUYSti8XeqN4d+dxqQCJAQsWm9oAYPrJfyCyqM/b6lkM0nh4KM3hDDshhIa5VWNhD7E41bVCAMoXaD4KMFweI2iEiR4/NAajxoG5FuUOxhcpeDUFC2JtQYpPAb0c9TCu5aMnYq5qloURyNlF1KMVFUdS+G8qNQYKxGwwoKcF0czXAzi0eME1W3mVGOywmmcos3wlrzKEn5LmKvKaEXs+9pJWRv786mM/4wS8NBJCEWJtWIZWjR8PpA3dgoSamNfop0yUqddJzdgzHDxj3BIiRAbZMUMF+IIe9OeFBapZ5p5v2ea0cT5j8rrfxXel0fEqSZCzx7+ea2yT3n2rDfKht9/Bx0TwWNonA0Y7T3Jc/46GFeitI680z2QUDhLaIkFVNNUpojsPLkJLLXcd8+Nb7AgkNB45jKZZPPGjUdGHwpj4nytCAbQtkbDHu1KFDduLC6fizagFuRE412BIQgqTRAMGAZiT/FW1U3Fus/Ocvypn+cZPnk2zvqnup+pH0+fZv3+06dnZ/1+nuc5Y+sxtBWFLa+U9yrygbAOh6K6792bqEC4iVDrnlB4VIRStI2O386v0BSb0hYT54WzGMuotwfVpjwPgHXf/K+rk+wAN6BUnFQqWoPEiDFMG9u9yClS1IZD+tG2NbcSN+PMKFMhpyTMTNOg5v60n52kbO3C/SCj7RRlJ2OpfTamQ/UVpYtS2SluU2jsXIXK7ql4XyKV6Hf8qZ02E5OaN2Ed/caoGb13/vOeXfAxUWMIaorCbEOekOpB1223j+vtTrvCfCiBDEWWpkhftRT9S1SCblfFmqN7gulueLMqbBbsJPTz0/3SfmdVS6Xz5hNqkYnz15exaW2sfLUi/0Igz8XW+5o4UTZx1xVF631qP3dF/SJizA3AI3mD8zX1Yg41kjLVQU7vGNfa8KOqxEpGqLFr6c6Jg2Z1i2zaIn10fibI1OjaRGtu6lt2jSWcoj/YyVKQLHDPyFmec/LW+Y1E20vsD/uJfeH82GiNVmTi0oZ2MjGFYT426GsTQhwqHrP7f8hu/zM3snUkJq61X/NOfkzoN0vo2aERK10gcRrgSXl7iXjM6n8/q52EGql0vJilkQ5k2hkGcMJL38lyfd93Jym5J8sZLrq4tfl52sKGdyvcW85oStr2IrcJoiRqYLUBxHknHgK5enixHpx/e38VJw9jJy6Kr0I4j7PJ3dbJNz9IYEcSGqe9vBcH4cYFqlWk2Wot+tuVdxfW5R13H74rp5gJb+mkqZSx7FfrK9aeQL4GPg0SBttj1XovHvB0OZRx5OKzy+VYBXznq67jnz+06BcJ/rnyRo0ZoeslaBP4WcNgoqqwu+1tB3b0ZjUvHYtvvAsfhGK9oFhGP56GAcBqqL4bNHmzfVBMD9trH+Aqf3bDTkKJSqOPWUj/nBcFNrQls9cGeZXd1ODzi5cXVxcgQd0vm50yiQYOurRcphNXboa26zYeEr+zj133F8L4P68=
+api: eJztWN9v2zYQ/leIwx5SjHKczulWA3tI0RTL0A5Fm6IPmWfQ4tliLJEqeXLjGvrfhyMtx7GNtctaYAXyEssx79f33Z3uuAKNIfemJuMsDOE5lkgolKiUVTPUIixDTqVAS34ppt5VggoUpPwMSVinsfenBQmkZgGGV/A2Hh+/itIVWhqfvb4YJyVjV6NXbCjASMLm24XeGP7DaUwqQELAvPGGljC8WsEzVB79WUMFm0kKhx+9IYRRO5JQK68qJPQhHreqQhhC4QLFRwmGw6sVFSDB44fGeNQwJN+g3MHgMgWnZmhJdBqk8BjQL1AL7xoydiYWqmxQHI2VXUoxVmX5SArnRakmWIqAJebkvDia43IYjz5KUN1kTtUmy53GGdoMb8irLOG3goUqjVbEvndOysrYX09k/GWcgIdWQsgLrBTL0LLm84G8sTOQUBn7Eu2MkTppW7kBY47Lf4VDIkJskBVzXIoj7M16UliknqkXg56px1PnPyqv/1N4Xx4RU02Enj3860pln/rZ0944G/34A7ScCB5D7WzAaO9xv88fB+NKKa1j3ukeSMidJbTEAqquS5PH7Dy+Diy12nfPTa4xJ5BQe85lMsnmtZuMjT4UxtT5ShEMoWmMhr20K1Bcu4m4eC6agFqQE7V3OYYgqDBBMGAYiD3FG1XVJes+Pe3jL4N+P8PHTyfZ4EQPMvXzyZNsMHjy5PR0MOj3+33G1mNoSgpbXinvVcwHwiociuqud2+iAuGmQnU9IfeoCKVoah0/nV+jKTalLabOC2cxllFvD6pNeR4A667539Yn2QFuQKk4qVDUgcSIMUwb272YU6SoCYf0o20qbiVuzswoUyJTEuamrlFzf9pnJynrXLgbZLSdomxlLLXPxnSovqJ0Xig7w+0UmjhXorJ7Kt4XSAX6HX8qp83UpOZNWEW/MWpG753/vGfnfExUGIKaoTDbkCeketC22+3jarvTrjEfSSBDMUtTpK8aiv6lVIJ2V0WXo3uC6d3wZl3YLNhKGBwq7WdKd3UiMrHuNgxJDPwrFvkXAnkmtr53iRNlU+66PG+8T+3ntqhfRIy5AXgkb3DRpV7kUCMpUx7M6R3jWht+VKVYywg1cQ3dOnHQrG6QTVukj87PBZkKXZPSmpv6ll1jCWfoD3ayFCQL3DFy2u8zeR2/MdH2iD3ZJ/adVQ0VzptPqEUmzl5fxLfRJn0eiP0eiP1pn9gXzk+M1mhFJi5saKZTkxtuNDX6yoQQp8UHdr8HdgefGbWsIzF1jf2aw9YDod+M0NNDL9g0GcQxj1eg7e3wgdX/P6uthAqpcLxxp1kdZFoGh3DM2/zxqhvk2uNE7vFqjss2ruN+kdbr0e1u/pYZTaRtb+ibIAqiGtarXRxk4yGQ64cX3Ub0+/vLOFIaO3VRfB3CWRw6b68T+M0PEtiRhMZJr9+LG07tAlUqptl63/3Hu4xdWFe3uXv/S5AUM+ENHdelMpb9anzJ2hPIV8CnQcJwe17uLjyGvDaMZJyl+exqNVEB3/mybfnfHxr0ywT/QnmjJozQ1Qq0CfysYThVZdhd47cDO3qznpceiW98yXEQim7ztIx+PA1DgPW2dLtB8JXFvWK634XFPVzlv+2olVCg0ugjC+mXszzHmrZk9tog31FsavD5+cvzy3OQoO6WzU6ZRAMHXVqt0olLN0fbthsPib+zj237N2sH5F4=
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Delete a managed sysctl entry from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-user-ssh-key.api.mdx b/docs/docs/gen/api/delete-node-user-ssh-key.api.mdx
index e2a32d75e..412e7428e 100644
--- a/docs/docs/gen/api/delete-node-user-ssh-key.api.mdx
+++ b/docs/docs/gen/api/delete-node-user-ssh-key.api.mdx
@@ -5,7 +5,7 @@ description: "Remove an SSH authorized key by fingerprint for a user on the targ
sidebar_label: "Remove SSH authorized key"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLOTkA9XIktyXQg4s4jZukCGwHObiCsOKOyLXIXWZ3qFgV+N+LWVIyLSlo4yRADzmJpHbn8X3z3IBCnzhdkrYGYrjCwq5QSCOur18JWVFmnf4blVjiWszXYqFNiq502pBYWCekqDw6YY2gDAVJlyIJYxX2/zIQAcnUQ3wL7z26mTRq9ruzVTl7K41MsUBDs/N3lzMWMbMlOslWeJhGsHu7VBDDC8yR8E+rkAVdX796jWuIwGNSOU1riG838BtKh+68oowVssj4k9OEMK2nEZTSyQIJnQ+HjSwQYsisp/AYgWbvS0kZRODwY6UdKojJVRjtQXTTOClTNCS2EiLh0KNboRLOVqRNKlYyr1CczKRZR2Im8/xZJKwTuZxjLjzmmJB14mSJ6zgcfdZAdt+zstS9xCpM0fTwnpzsNThuYCVzrSSx7Vsjo0KbX0dR+GfWEAB1BD7JsJB8h9Yln/fktEkhgkKbN2hSxmlU19EOjC8GgrkQMklsZUjw7a9x4Gk2d8Lxi0zn4OaIvn51fjo5exTVJ9hP+1H7Tyznyej0eb/f/yp2vsS5KdvuS2s8BqGnwyH/PLb/Na6FC6mq+hBBYg2hIT4nyzLXSUidwZ3nw5tD1XZ+hwkjVjpONNKNqjs7n2l1zMSFdYUkiKGqtIKDjMhQ3Nm5uHzB1UAJsqJ0NkHvBWXaCwYDPbGleC+LMmfZk8kQfx4Phz08/WXeG4/UuCd/Gp31xuOzs8lkPB4Oh0PGzaGvcvIdq6RzktNfExb+mFfHuS4qCrCIRmJbvrw2aY5NNvcPENkViCOYHGKwPS3sIpTDViiTT5Iqf0wKmqrggmWXDLPUOTK+fqnLEhVXwkM1jbCtkl2lDA4FvNmOoDbJpEmxy+jc2hylOTD/Q4aUoduTWFilFxqV8GtPWATNGCSjc9b9OyoXfEwU6L1MUegOLKLxtQ913U3W225NblGbRkCaQtA0pf9ty+SFIbeGel/CNmI+e++qzS++WkcwHo4OM+y96TS/njh/dxmCaKfnmyXdf0TyXHTet9yHu4IyScImSeVcUw4ekuxlAJkT0iE5jatt9AQSFZLU+dGw3FOulOZHmYv2jpBzW9GDEUfVqgpZtUH6ZN1SkC7QVm1kWtVNKm0IU3RHs6pxki88UjIZDpm8LcMh0g6IfX5I7Evr5lopNKInLo2vFgudaA7IEl2hvQ8TyA92///sTo41xqbghNbIM1hb+79hj/xB6HcitI6gQMosz/sqzPuMPQ9zMQx4oxhstq2hHvB4P9g0z95nvSWuB5vOFFeH7cCtmnl/+rAqXDPNDZPdhWHnWUZUQjushX4ZDkHUPrzczkF/fLgJnUubhQ3XW7/OQ2972G+4cUAEbEgD0ag/7Ie5prSeChlirx1m293rcPHax3nzEMzffGFrYCC8p0GZS23Y1MrlrLQh4xb4NEQQdzo1y+RP28bdUMJfuhP6NArdnWVsNnPp8b3L65o/f6zQrRumVtJpOWcwbzegtOdnBfFC5n5/jO/icHLVduZn4jsvaEch2o6mhp0OpyEGiIBR6OyZvLo8yafP7FpPsOXr7Hjy4vQES7uhU0/rCDKUCl0IjObEeZJgSZ27B5Wd16ldWXlx8ebi5gIikI+Tfi/Jg4Kjpm02zYkbu0RT1ztLid/Zxrr+B0Rp9O4=
+api: eJztWG1v2zYQ/ivEfUoB+S11sk3APrhoumZth6JJ0Q+ZYdDiWWIskSp5cuMZ+u/DUbKj2C62ph3QAf0UST7ey/PcHe+yAYU+cbokbQ3E8A4Lu0Ihjbi6eilkRZl1+i9UYolrMV+LhTYputJpQ2JhnZCi8uiENYIyFCRdiiSMVdj/00AEJFMP8Q289+hm0qjZb85W5eyNNDLFAg3NJm8vZ6xiZkt0kr3wMI1g93apIIbnmCPhH1YhK7q6evkK1xCBx6RymtYQ32zgGUqHblJRxgZZZfzJaUKY1tMISulkgYTOB2EjC4QYMuspPEagOfpSUgYROPxYaYcKYnIVRnsQXTdByhQNia2GSDj06FaohLMVaZOKlcwrFCczadaRmMk8fxIJ60Qu55gLjzkmZJ04WeI6DqJPGsjuelaWupdYhSmaHt6Rk70Gxw2sZK6VJPZ962RUaPPrKAq/zBoCoI7AJxkWks/QumR5T06bFCIotHmNJmWcRnUd7cD4YiCYCyGTxFaGBJ/+mgAe53MnHb/IdU5uzuirl5PTs/MHWX2C/bQftb/Ecp6MTp/2+/2vYudLgpuy7760xmNQejoc8p+H/r/CtXChVFUfIkisITTEcrIsc52E0hncehbeHJq281tMGLHScaGRbkzd2vlMq2MuLqwrJEEMVaUVHFREhuLWzsXlc+4GSpAVpbMJei8o014wGOiJPcU7WZQ56z47G+LP4+Gwh6e/zHvjkRr35E+j8954fH5+djYeD4fDIePm0Fc5+Y5X0jnJ5a8JC38squNcFxUFWESjsW1fXps0x6aa+weI7BrEEUwOMdhKC7sI7bBVyuSTpMof04KmKrhh2SXDLHWOjK9f6rJExZ3w0EyjbGtk1ylDQAFv9iOYTTJpUuwyOrc2R2kO3P+QIWXo9jQWVumFRiX82hMWwTIGzeicdf+MygWLiQK9lykK3YFFNLH2oa67xXrT7cktatMISFNImqb1v2mZvDDk1lDva9hmzGfPvWvri4/WEYyPVdgzqbZ5K3qirWzGJET+DYvuXyI5EZ33LffhrKBMkrBJUjnXtIP7InsRQOaCdEhO42qbPYFEhSR1fjQt94wrpflR5qI9I+TcVnTvxFGzqkI2bZA+WbcUpAu0VZuZVnWLShvCFN3RqmqC5AMPjJwNh0zeluGQaQfEjg6JfW86U01PTN5ehu6wS6AfxP4fiH16SOwL6+ZaKTSiJy6NrxYLnWjuNCW6QnsfRssf7H7/7J4d68fNTRJmHh6u20v9Rx/+/gmtIyiQMsuLnAqLHGPPU3oMA14VB5vtnV8PeG8bbJpn77PeEteDTWc8r8Pa51bNIje93wGvmOaGye4muIssIyqhncLDIBSEIGofXmwH3N8/XIeRRJuFDcfbuCZhaLlfXPnigAjYkQaiUX/YDwNraT0VMuReu6W0S/XhRr2P8+Y+mb/5Jt7AQHhHgzKX2rCrlcvZaEPGDbA0RBB3RjDWyZ+2E1lDCX/prl7TKIxtrGOzmUuP711e1/z5Y4Vu3TC1kk7LOYN5swGlPT8riBcy9/v7WReHk3ftzfxE/Meb91GItjuH4aCDNMQAETAKnX8g8E76qJg+s0Q/wpev8+PRG/EjPO2mTj2tI8hQKnQhMRqJSZJgSZ2zB52d9+RdW3l+8fri+gIikA+Lfq/Ig4Gjrm02jcS1XaKp652nxO/sY13/DZkRmaw=
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -251,6 +251,97 @@ Remove an SSH authorized key by fingerprint for a user on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/delete-node-user.api.mdx b/docs/docs/gen/api/delete-node-user.api.mdx
index 674dec7ea..b69dc6f29 100644
--- a/docs/docs/gen/api/delete-node-user.api.mdx
+++ b/docs/docs/gen/api/delete-node-user.api.mdx
@@ -5,7 +5,7 @@ description: "Delete a user account from the target node."
sidebar_label: "Delete a user"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe0oB2lE6J9sE7CFDky1DOxRdij5khkGLZ4uxRKrkKY1n6H8fjrQdxXaxtmuBDciTJet+fPfdHXm3Ao2h8KYh4yzk8AIrJBRKtAG9UEXhWkti5l0tqERBys+RhHUah39akEBqHiC/gbcB/URZPfnFu7aZvFJWzbFGS5Pz11cTNjZxDXrFbgKMJWzfrvTW7e9OIxsCCQGL1htaQn6zgp9RefTnLZXsio3lH7whhHE3ltAor2ok9CEKW1Uj5FC6QPFRguHAGkUlSPD4vjUeNeTkW5Q70V+n8NQcLYmNBSk8BvR3qIV3LRk7F3eqalEcTZRdSjFRVfVMCudFpaZYiYAVFuS8OFrgMo+izxJZ9wOnGjMonMY52gHek1eDxOAK7lRltCLGvgEpa2N/OpHxyyRRD52EUJRYK9ahZcPygbyxc5BQG/sS7Zx5Ouk6uSXjs4l4288+a/+bAD4H85iRhcbZgNHo8yzjnwPodCwZPQQJhbOEllhQNU1lilhYx7eBpVf7vt30FgsCCY3nMiSTfN266cToQxhnzteKIIe2NRr2qqZEceum4uoFd40W5ETjXYEhCCpNEMwGBmKkeK/qpmLbp6cZ/jDKsgE+/3E6GJ3o0UB9f3I2GI3Ozk5PR6MsyzImzmNoKwo9VMp7teRsEtbhUFSP0b2JBoSbbZq68KgIpWgbHX8TkbGAGxXCB+e12HanmDkvnMXYDcM9yrZddoC0xzB+XUsyED5JUo9RqWhDFjPHdG19D2PhkKI2HLKPtq35PHALzpAyFXJqwsI0DWo+YvazlIxtIDwOMvpOUXYSPi0oLsTYHaxSlMrOsV8/U+cqVHZP7V2JVKLfAVE7bWYGtQjLQFhHsMkyeu/8P6O5YDFRYwhqjsL0eU70DKHr+p1/0z8l10SPJZChWKIc3auWIrpURdDtGtiU58fVYi+zYidhlJ0c6GarWiqdN3+hFgNx/vpKLHAptl6+Wn9/Io3nove+qZWom8rVFUXrfTp5Hvr5MjLMve+RvMG7TbXFDGokZaqDZbzjXGvDj6oSax2hpq6lBxAH3eoW2bVF+uD8QpCp0bWpkvmw7vk1lnAer9j99khBssIjJ6dZxsnb5DeW2V5iv9tP7KXzU6M1WjEQVza0s5kpDFdjg742IcRR4Cm7/4fsjj5yCVtHYuZa+zWv4adEfrNEnh6aptK1EacAnm15RnjK5n8/m52EGql0vD6lEY655+E+h2Ne0I5Xm9u9O+akHq/ic1yu/F1al8YPm9YfnNCUs/6+tY2hJGpgPcjH4SYKgVw/XG5G5N/eXccxw9iZi+rrCM7jIPKwGPJFDxIYSCLjZJgN48jbuEC1ilW23l8ebaW7LK4eSvXz19cUG+E9HTeVMpb9t75iq4nLG2BpkJD3ZqU1jDy+jmUco1h0tZqqgG991XX89/sW/TKxfKe8UVMm4mYF2gR+1pDPVBV2l69+PEdv1lPQM/GNd9ODTGw2Dsv7RpSGHEDCApf9FZs3zS+K6SNr5hdgSTjGnYQSlUYfeU6fzosCG+op7R1nvHVue+nFxcuL6wuQoB7X/069RwcHMa1WSeLaLdB23RYi8Ttj7Lq/AXO7Ctk=
+api: eJztWN9v2zYQ/leIe2oB2nE6p9sE7CFF0i1DOxRdij5khkGLZ4uxRKrkKY1n6H8fjrQcxXaxpmuBFciTJft+fPfdHX3HNWgMuTc1GWchgzMskVAo0QT0QuW5ayyJuXeVoAIFKb9AEtZpHP5lQQKpRYDsCt4F9FNl9fRX75p6+lpZtcAKLU1P31xM2djU1egVuwkwkbB9u9Bbt384jWwIJATMG29oBdnVGl6g8uhPGyrYFRvLPnpDCJN2IqFWXlVI6EMUtqpCyKBwgeKjBMOB1YoKkODxQ2M8asjINyh3or9M4akFWhKdBSk8BvQ3qIV3DRm7EDeqbFA8mSq7kmKqyvKpFM6LUs2wFAFLzMl58WSJqyyKPk1k3Q6cqs0gdxoXaAd4S14NEoNruFGl0YoYewdSVsb+cizjL9NEPbQSQl5gpViHVjXLB/LGLkBCZewrtAvm6bht5ZaMBxPxrp991v4vATwE84SRhdrZgNHos9GIPw6g07Fk9BAk5M4SWmJBVdelyWNhHV0Hll7v+3aza8wJJNSey5BM8nXtZlOjD2GcO18pggyaxmjYq5oCxbWbiYsz7hotyInauxxDEFSYIJgNDMRI8VZVdcm2T05G+NN4NBrgs59ng/GxHg/Uj8fPB+Px8+cnJ+PxaDQaMXEeQ1NS6KFS3qsVZ5OwCoeiuo/ubTQg3Lxr6tyjIpSiqXX8TETGAq5VCB+d12LbnWLuvHAWYzcM9yjbdtkB0u7D+G0jyUD4JEk9RoWijixmjuna+h7GwiFFTThkH21T8XnglpwhZUrk1ISlqWvUfMTsZykZ6yDcDzL6TlG2Ej4vKC7E2B2skhfKLrBfPzPnSlR2T+19gVSg3wFROW3mBrUIq0BYRbDJMnrv/L+jOWcxUWEIaoHC9HlO9Ayhbfudf9U/JTdETySQoViiHN3rhiK6VEXQ7hroyvPTarGXWbGVMD7UzS+U7lpEDMTmFGFCYthfsb8/k8ZT0XvvaiXqpnJ1ed54n06eu35+GRnm3vdI3uBNV20xgxpJmfJgGe8419rwoyrFRkeomWvoDsRBt7pBdm2RPjq/FGQqdE2qZD6se36NJVzEv9j99khBssI9JyejESevy28ss73EHh84pq1qqHDe/I1aDMTpmwuxxJXYls9jYr+HxP6wn9iXzs+M1mjFQFzY0MznJjd8zNToKxNCnPEes/s9ZHf8ienKOhJz19ivOV89JvKbJfLk0B9rmgfieMdLCw9/j9n8/2ezlVAhFY734jSbM/e8tWVwxJv30bob29ojTurROj7HrdnfpD14crdC/8kJTTnrL9LbGAqiGjYbWpxaoxDIzcPLbvf5/f1lnB+NnbuovongNE6Ydxs//9GDBAaSyDgejoZxl6ldoErFKtsspveuG3ZZXN+V6sPvJVJshLd0VJfKWPbf+JKtJi6vgKVBQtYbgjcwsvg6kXE+ZtH1eqYCvvNl2/LXHxr0q8TyjfJGzZiIqzVoE/hZQzZXZdjdqvvxPHm7mYKeim986XCQiW6VtLxIRmnIACQscdW/O+ErhC+K6RP3B1+AJeGYtBIKVBp95Dn9dJrnWFNPae844+uEbS+dnb86vzwHCep+/e/Ue3RwENN6nSQu3RJt224hEr8zxrb9B/Yhr4g=
sidebar_class_name: "delete api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Delete a user account from the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-certificate-ca.api.mdx b/docs/docs/gen/api/get-node-certificate-ca.api.mdx
index 44c3c4ef6..c22505726 100644
--- a/docs/docs/gen/api/get-node-certificate-ca.api.mdx
+++ b/docs/docs/gen/api/get-node-certificate-ca.api.mdx
@@ -5,7 +5,7 @@ description: "List all CA certificates on the target node."
sidebar_label: "List all CA certificates"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLOSXASpZTOW0F9KC6SeoibYPUQQ62Iay4I2ltcpeZHapWBf73YriUTEsMErQN0ENOIsV5fvPegsWYkSvZBQ8TeO0iK5Pn6nyqMiR2C5cZxqiCV7xCxYaWyMoHi8NrDxrYLCNMruD8gXj2q/FmiQV6nk3fXMw6cmahRDKiK8KNhv3bhYUJvEL+LVjsSDo3oCFiVpHjDUyutvAjGkKaVrwSpR3JE0Jj4aa+0VAaMgUyUmxYvCkQJrAKkZtHDU48LQ2vQAPhh8oRWpgwVagP4LhM7polelY7CVoRRqQ1WkWhYueXam3yCtWTmfEbrWYmz59qFUjlZo65iphjxoHUkzvcTBrSpwm8+0EwpRtkweIS/QDvmcwgIbqFtcmdNSy274zUhfM/nOrmyyyFAmoNMVthYYSHN6XQRybnl6ChcP41+qWgdVoLNoSxDD5io+HZaCQ/PRkQFocJMAQNWfCMnoXHlGUuH1zwJ7dRGLfHZoT5LWYMGkqSSLNLam/DfOZsn7mLQIVhmEBVOQtHwVihug1zdfGTqiJaxUGVFDKMUfHKRSUoYWSxFO9NUeYi++xshN+NR6MBPvt+Phif2vHAfHv6fDAeP39+djYej0ajkWBIGKucY8cqQ2Q2ki2MRezzqge3JEUtAvUVUPDYJNHwCJJ9cvaA8ljNzy2lhEgKMqUmr4woLwOxACNooGfaDJv0YMNV7BONviqkjsKdgG9cjoJ6vHNliVYK9DgASdhO+76AG5cbvcnBWneL81/AOj0AcufXIYKfh16ntyjhSPiEirJe5h0+cRMZC6mAKnIojpF5v0LCBpGuqYHc0nnDaCfquhVyDQ1U1omSeSX8g5LC2lm0Wl23GlqqKiINnI9s8hyt9Ixa74D6pK+/N3QqcqDkbBsjVBbLPGzQqragh1DXGthxUzHd/ju98IsgSj+rR6Qh0c0BJAr0aVNfCJkqMEazROW6mZ2yUmqdkMnhGg/aUl13m/hVt8+3iX/zEd9eSCZBfShg1wk+xnYecunnLvi3bTMVGbWG8ej0uJ2+86biVSD3F1o1UNM3F+oON2qv8D/rqp8J9VR13ndl3PCmJhKyrCJC+7iLvjyOQgJ3mJKDjct7O8yBcmudPJpctTzKzEPFD0b0qrUVimqP/GegO8WuwFC1TSbYbuU6z7hE6h0dyUlheKTkbDTqZn+TikeB/eY4sC8DzZ216NVAXfhYLRYuc5KxJVLhYmx2nK/R/f9H96xvC0odKXexWe++3C70Na5fKK61hgJ5FeSwkDVZp4V/Aidyu5xsd2OiPulE9iRLBwet0/Fw83B9/CEBTTHr3iB7H1bMJbSruLzPGyLQ7cPL3Wb7y/vLZmQ5GazC3nowbabdw+UkkwI0iCEJjNPhaNhsqmWIXBj/sPR89Gg7BHT7kLX/4NBLfjLe80mZG9fsIhXlIjZBewVCDRomnRnckS1vRsaqfBby7XZuIr6jvK7l7w8V0iahvjbkzFyAudqCdVGeLUwWJo+HN1rXqSdv27H6VH3hy60Xjd2G62W/bahhAqDhDjfdA7S+qTWs0Fikxr/0eZplWHKH8aityP22z+lXLy5Bg3mchAdJ10jvNWq7TRSX4Q59Xe9tZHkXA+v6bxC0ldc=
+api: eJztWN9v2zYQ/leIe2oBynE6p9sE7MHN2i5DtxVdij4kgUGLZ4uxRKrkyYtn6H8fTpQdxVbRYFuBDehTJOt+fnf3kZctaAyZNxUZZyGFNyaQUEUhzqciQ09mYTJFGISzgnIUpPwSSVincXRtQQKpZYD0Cs7vhWe/KKuWWKKl2fTtxaxnZ+Yq9Ip9BbiRsH+70JDCa6RfncaepXMFEgJmtTe0gfRqCy9QefTTmnJ22rOcelQabpobCZXyqkRCH1oVq0qEFHIXqH2UYDjTSlEOEjx+rI1HDSn5GuUBHJcxXbVES2JnQQqPAf0atfCuJmOXYq2KGsWTmbIbKWaqKJ5K4bwo1BwLEbDAjJwXT1a4SVvRpxG8u8SpyiSZ07hEm+AdeZVERLewVoXRijj2XZCyNPaHU9l+mcVSQCMhZDmWinVoU7F8IG/sEiSUxr5Bu2S0ThvGxmOonA3Yeng2HvOfgQ5wi8MGGIGEzFlCS6yjqqrgD8bZk9vAitvjMNz8FjMCCZXnSpOJbm/dfGb0ULgL50tFkEJdGw1HxchR3Lq5uPhR1AG1ICcq7zIMQVBugmCUMBBHineqrAq2fXY2xu8m43GCz76fJ5NTPUnUt6fPk8nk+fOzs8lkPB6PGUOPoS4o9KJS3qsNdwthGYayGsAtWhEL54cGyFlsm2h0BMm+OQdAeejmp06SS8QDGVuTcsXOK+eJgWE00JLfjNr2IEV1GDKNti55jtyKwVemQEY9rExVoeYBPS5ANLbzvh/gNuXWb0ywkf3h/AewTg+A3OV1iODj0Otxi2CNiI+rfTaovMMnbAJhyRNQB3LlMTIfcvTYItIP1XmzNFYR6lRcd0auoYVKG3Yyr1k/qbxbG41aiuvOQydVB/SJsYFUUaBmzmjkDqjP5vpbKycCOR+T7WqEQmNVuA1q0Q30CJpGAhlqJ6bPv9MLu3Ds9FEcEQ+Jfg+g985/PtSXLCZKDEEtUZh+Z8eu5Fn3SN7gGg9oqWn6JH7V5/mu8W8+kdtL7iRoDg3smOBTaueuYD43zr7ryJRtNBImQ3T6QukdMYlEdJzOA9NC8y+y6iOhnore+26MW91IIi7Lau9RP2TRV8dViOCOYnOQMsUgwxw419rwoypEpyPU3NV0H8SgW10ju7ZIfzi/EmRKdHVHMk73J9dYwiX6waMjJskKD5ycjcf97m9b8aiwp8eFfW9VTbnz5k/UIhHTtxdihRux76Svhf0/FPab48K+cn5utEYrEnFhQ71YmMwwFVXoSxNCe3n9Wt3/fnXPhvg4HjWFCe29/ctdcr/W9QvVtZFQIuWON0bef2Tc5FI44aX0ZLs7/5uTXmVPsrhJ+nXcCm/u18rfuaCxZv3lcp9DTlRBt2Px+7wVAtk9vNqtLD9/uGzvIoZvTKzeZTBtrzH3KzGfFCCBA4lgnI7Go3YFqVygUtn72+wnt/FDQLf3Xfs3NviYJ+EdnVSFMu0ls/YFm43QXgFLg4S0d7nq2eY3xfcl/szi2+1cBXzvi6bhnz/W6DcR9bXyRs0ZmKstaBP4WUO6UEU4XL77ST151x2rT8UXXskH0ditLpYXl1YaUgAJK9z0/7PQ3DQSclQafZtf/DzNMqyop3hEK7yY73v69ctLkKAeNuFB07XWB4PabqPEpVuhbZp9jMTvHGDT/AV0ATqV
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -309,6 +309,97 @@ List all CA certificates on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-group-by-name.api.mdx b/docs/docs/gen/api/get-node-group-by-name.api.mdx
index 753671bc5..a56361652 100644
--- a/docs/docs/gen/api/get-node-group-by-name.api.mdx
+++ b/docs/docs/gen/api/get-node-group-by-name.api.mdx
@@ -5,7 +5,7 @@ description: "Get a specific group by name on the target node."
sidebar_label: "Get a group"
hide_title: true
hide_table_of_contents: true
-api: eJztWG1vGzcM/isCP7WA7Fw6p9sO2Ad3fZmHrSi6FPuQGYZ8om3Fd9JV4mXxjPvvA6Wz49pXtE1bYAP6KZZNkQ8fvojMFjSGwpuajLOQwwskoUSosTALU4ild00t5hthVYXCWUErFKT8EklYp3H4lwUJpJYB8it4E9DPlNWzF3xt9ruyaokVWpqNX01mUdfM1egVGwswlbA/TXQy/tJpjLefbF6qCkFCwKLxhjaQX23hCSqPftzQiu01AX3uUWmYtlMJtfKqQkIfoixDhhxWLpBNqgx7WCtagQSPbxvjUUNOvkF5RMNlclEt0ZLYaZDCY0B/g1p415CxS3GjygbFg5myGylmqiwfSuG8KNUcSxGwxIKcFw/WuMmj6MNE2O3AqdoMCqdxiXaAt+TVILG4hRtVGq2Ise9AysrYn85l/GWW6IdWQihWWCm+Q5ua5QN5Y5cgoTL2N7RLpum8beWejE8mIsYiRv9zkH8K2ClDCrWzAaPSR1nGf/pgaSRlyiFIKJwltMSCqq5LU8SkOrsOLL09te3m11gQSKg9pyCZZOvazWdG92FcOF8pghyaxmg4SZcVims3F5OnogmoBTlRe1dgCIJWJghmAwMxUrxVVV2y7ouLDH8YZdkAH/04H4zO9Wigvj9/PBiNHj++uBiNsizLmDiPoSkpHKBS3qsNh5GwCn1e9ZFVmhBTNqkTC+eFsxiTe3hCxL5oeqh4V/kvnaRwi9gcUsnQSpHwWDtPTAdzgJb8ZhgzgRQ1oU812qbiwnZrplyZEpnrsDZ1jZr7xSntSdnO+r6fRP+i3eRgKyH2n8+gcdx1w54ueMLfx3F3UFwR4DupZyzhEv3JpZdNhX7fmidP49UKq3nsex90roPS9mNJejiJPcMKQ2hbCWQoZmyUmdiFe8/1kLg5JB29d/7DTDxjMVFhCGqJwhymUkqDBOSuV10d9vUuoaZHSJ9xxkF7fHFXT8fiP7uS+7Vx9nXXf/huK2GUnZ92oDdWNbRy3vyDWgzE+NVErHEj9oa+WE/6SAbH4uC8K4d4NxWjK4rGeybysAc9j+Ryv/JI3uDNrqCGKcTcX3sr9ci41oY/qrLryUGouWvoDkSvWd0gm7ZIfzu/FmQqdE3KG35gPqIYLvdOFl0d7o1cZNlh7sYMOwnsd6eBfe783GiNVgzExIZmsTCF4USs0VcmhDi6fIvu/yG6o/cNDtbxA9hY/QVnh2+R/GqRvOgbAdOT0dHBg018EL8F9L8f0Div0MrxysebjEyrSA5nPEydbXcve3sWQ3q2jYe4CvqbtN1N7/bCPzicKWKH2+HegxVRDd36wed5FALZfXi+G+x//fMyzhiG5xu+3uEfxynkbpflpx4kMJBExfkwG8ZBvXaBKmXv5r9um45eHDO4vUvTey7dyT3CWzqrS2UsQ2h8yaoTn1fA0iAhP5iVdmDyeJ7KOEex7HY7VwHf+LJt+eu3DfpNYvpGeaPmTMbVFrQJ/FlDvlBlON4XD7168LqbhR6Kr7xO91Kxm4MtT8FRGnIACWvcHP5XgJfje/l0vBnfA0QCMG0lrFBp9JHg9NO4KLCmg0snnYwX5X0ZvXh2CRLUu5l/lOlRey+g7TZJXLo12rbd4yM+M8C2/RcgzUWp
+api: eJztWG1v2zYQ/ivEfWoB2nE6p9sE7IO7vszDWhRdin3IDIMWzzZjiVTJUxbP0H8fjpQd1VbRtw1YgXyKFB/vnnvuRXfcgcaQe1ORcRYyeIEklAgV5mZpcrHyrq7EYiusKlE4K2iNgpRfIQnrNA7/tCCB1CpAdgVvA/q5snr+go/NXyqrVliipfnk9XQedc1dhV6xsQAzCYe3qU7GXzmN8fST7StVIkgImNfe0Bayqx08QeXRT2pas706oM88Kg2zZiahUl6VSOhDlGXIkMHaBbJJlWEPK0VrkODxXW08asjI1yiPaLhMLqoVWhJ7DVJ4DOhvUAvvajJ2JW5UUaN4MFd2K8VcFcVDKZwXhVpgIQIWmJPz4sEGt1kUfZgIux04VZlB7jSu0A7wlrwaJBZ3cKMKoxUx9j1IWRr707mMv8wT/dBICPkaS8VnaFuxfCBv7AoklMb+hnbFNJ03jTyQ8dlExFjE6H8N8s8BO2NIoXI2YFT6aDTiP32wNJIyxRAk5M4SWmJBVVWFyWNSnV0Hlt6d2naLa8wJJFSeU5BMsnXtFnOj+zAunS8VQQZ1bTScpMsaxbVbiOlTUQfUgpyovMsxBEFrEwSzgYEYKd6qsipY98XFCH8Yj0YDfPTjYjA+1+OB+v788WA8fvz44mI8Ho1GIybOY6gLCh1Uynu15TASlqHPqz6yChNiyiZ1Yum8cBZjcg9PiDgUTQ8V7yv/pZUUbhmbQyoZWisSHivnielgDtCS3w5jJpCiOvSpRluXXNhuw5QrUyBzHTamqlBzvzilPSnbWz/0k+hftJscbCTE/vMVNE7abtjTBU/4+zTuOsUVAb6XesYSrtCfHHpVl+gPrXn6NB4tsVzEvvdR51ooTT+WpIeT2DOsMISmkUCGYsZGmaldug8cD4mbLunovfMfZ+IZi4kSQ1ArFKabSikNEpC7XnXV7ettQs2OkD7jjIPm+OC+no7Ff3YF92vj7Ju2//DZRsK4rwM9UXpf1mIg2s7HiRc9/hd70icyOBGd9305xLOpGF2e194zkd0e9DySy/3KI3mDN/uCGqYQc3/trdQj41obflRF25ODUAtX0x2IXrO6RjZtkf5yfiPIlOjqlDf8gfmEYrg8OJm3dXgwcjEadXM3ZthJYM9PA/vWqprWzpu/UYuBmLyeig1uxSGD7gP7LQT2u9PAPnd+YbRGKwZiakO9XJrccIep0JcmhDiT3kf3W4ju+EMToXU82dRW3zfgbyGSF31f1jQLtHTwxBonnfuA/v8DGgdRWjve5XlFlWnHzOCMp+Sz3X5ka85iSM928SXu+P4mre2zu4X/dw5nilh37T94sCaqoN0r+X0RhUC2D8/3G9uvf1zG4dHw4MrHW/yTOF7eXVLwpx4kMJBExflwNIwbWOUClcreDfbtNUn04pjB3V2afuFtSnKP8JbOqkIZyxBqX7DqxOcVsDRIyDpD8B5MFt9nMg7ILLvbLVTAt75oGv73uxr9NjF9o7xRCybjagfaBH7WkC1VEY4vArpePXjTzkIPxX98T9JLxX7BsbzeRGnIACRscNu97uFbjy/y6fjK4wtAJACzRsIalUYfCU4/TfIcK+ocOulkfANyKKMXzy5Bgno/848yPWrvBbTbJYlLt0HbNAd8xO8MsGn+ARuA6lg=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -314,6 +314,97 @@ Get a specific group by name on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-group.api.mdx b/docs/docs/gen/api/get-node-group.api.mdx
index edc88671d..6f852b348 100644
--- a/docs/docs/gen/api/get-node-group.api.mdx
+++ b/docs/docs/gen/api/get-node-group.api.mdx
@@ -5,7 +5,7 @@ description: "List all groups on the target node."
sidebar_label: "List all groups"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe2oB2lE6p9sE7MFbk85DWxRdij1khkFLZ5uxRKrHUxbP0P8+HGk7ju2hwdACe+iTJet+fvfx7riGEkNBtmHrHeTwxgZWpqrUnHzbBOWd4gUqNjRHVs6X2P/TgQY28wD5DXwMSBPjyslrkZ+8Nc7MsUbHk+H70SQamfgGyYj9AGMNu7dRCTm8Rn7nS4zaoCFg0ZLlFeQ3a/gZDSENW16IpzYg5YSmhHE31tAYMjUyUoiyztQIOSx84PiowUo6jeEFaCD81FrCEnKmFvVBztcpOTNHx2prQSvCgHSHpSLfsnVzdWeqFtWziXErrSamqp5r5UlVZoqVClhhwZ7UsyWu8ij6PEF13/Omsb3ClzhH18N7JtNL+K3hzlS2NCyxb4PUtXU/nev4ZZKAh05DKBZYG9HhVSPygcm6OWiorXuDbi4wnXeCDWFovAsYPbzIMvk5UWY/21S5DxoK7xgdi6hpmsoWsUZnt0Hk18fe/fQWCwYNDUlF2SZvt346seWpKGeeasOQQ9vaEo5qsEB166dq9Eq1AUvFXjXkCwxB8cIGJeBgYIkU703dVGL74iLDHwZZ1sMXP057g/Ny0DPfn7/sDQYvX15cDAZZlmUCHWFoKw57URkisxKSMNbhVFaPo4v0VJUNkQfJnJp5Ut5hZEz/CIgdE09A8dj4rxtJqYectcRDXhhWhI0nFjgEA3RMq37kAhtuwynT6NpaTotfCuTGVihYh6VtGizl+B3Dnoxtve+OZ8wv+k0JdhoSW/47jMPEt1NN5Qi/p2GXCiOyKcBH1LOOcY50pPSurZFssQlm9Cqq1lhPYzP5bHKbULrTsSQ7QmKSsEIfuk4DW46MjTIjN/P/or5puPugI5GnzyNxKWKqxhDMHJXdp1KiQQrkoRPe7DfLDaHGB5FeCuOgO1TcnqdD8V98JU3Qevdh04FEt9MwyM6Pe9BHZ1peeLJ/Y6l6avh+pJa4UjtHX6wnPRHBodp73x6HqJsOoy+KlkiA3O9BVxFc6VeETBbvtgeqn0rMxlYnT+qB87K08mgqtdFRZupbfgjipNuyRXHtkP/ytFRsa/Rt4o3MmycchutdksXmHO6cXGTZPncjw44K+91xYa88TW1ZolM9NXKhnc1sYYWIDVJtQ4ibwLfq/v+re3FqdUiNZjsLv/gC8a2cX6mcccbxwsvWLSulTstxDmcygM/W22nQnc13yzjdpf16/LCZ/y51TKXa3893oS+Yo24UgxymUQj05uFquwX+9sd1HEhWhqGobwIfxpH1cI+QuQAaJJCEwXk/68etrvGBa+MeloXDy8shfOsHjj79npOyYrzns6Yy1onnliqxlvC7AZEGDfnePE0QjnWcsSKzXk9NwI9UdZ38/alFWiVg7wxZM5Xcb9ZQ2iDPJeQzU4XDm8p+As8+bObkc/WV7y8nIdjuSE42pCgNOYCGJa72r2HduNOwQFMixfzS52FRYMN7ikcNQ24xO7a+vrwGDeYxzw54Fa2fDGq9ThLXfomu63YxsrxLgF33D+LSMhc=
+api: eJztV21v20YM/isHfmqAs+N0TrcJ2Ad3fZmHtii6FPuQGcZZou2LpTuVR2XxDP33gXey49geGgwtsAH9FCnm68OHFLmBAkNOtmbrHWTwxgZWpizVgnxTB+Wd4iUqNrRAVs4X2P/DgQY2iwDZNXwMSFPjiulrkZ++Nc4ssELH09H78TQamfoayYj9ABMNu7dxARm8Rn7nC4zaoCFg3pDlNWTXG3iOhpBGDS/FUxOQMkJTwKSdaKgNmQoZKURZZyqEDJY+cHzUYCWd2vASNBB+aixhARlTg/og56uUnFmgY7W1oBVhQLrFQpFv2LqFujVlg+rJ1Li1VlNTlmdaeVKlmWGpApaYsyf1ZIXrLIqeJajuet7Utpf7AhfoenjHZHoJvw3cmtIWhiX2bZC6su6nCx1/mSbgodUQ8iVWRnR4XYt8YLJuARoq696gWwhMF61gQxhq7wJGD08HA/lzosx+3lW5Dxpy7xgdi6ip69LmsUbnN0HkN8fe/ewGcwYNNUlF2SZvN342tcWpKOeeKsOQQdPYAo5qsER142dq/EI1AQvFXtXkcwxB8dIGJeBgYIkU70xVl2L78nKAPwwHgx4+/XHWG14Uw575/uJZbzh89uzycjgcDAYDgY4wNCWHvagMkVkLSRircCqrh9FFeqrShsiDZE7NPSnvMDKmfwTEjoknoHho/JdOUuohvZZ4yEvDirD2xAKHYICOad2PXGDDTThlGl1TSbf4lUBubImCdVjZusZC2u8Y9mRs633XnjG/6Dcl2GpIbPn3MI4S304NlSP8HoddKozIpgAfUM86xgXSkdK7pkKyeRfM+EVUrbCaxWHy2eS6UNrTsSQ7QmKSsEIf2lYDW46MjTJjN/f/oN4N3H3QkcjT55F4KWKqwhDMApXdp1KiQQrkfhJe7w/LjlCTg0hfCuOgPVTc9tOh+M++lCFovfvQTSDRbTUMT82g56bYtrXqqW4QCvFixl9wJj0SwZHae9+2Q9RNzejzvCESIPdn0KsIrswrQiaLt9uG6qcSs7HlyU49cF4UVh5NqTodZWa+4fsgTrotGhTXDvlPTyvFtkLfJN7I9+YRzXC1SzLv+nDn5HIw2OduZNhRYS+OC/vRmYaXnuxfWKieGr0fqxWu1Y5B3wr7fyjsd8eFfeVpZosCneqpsQvNfG5zKxOmRqpsCHHF+1bd/351L0/N4/QF2S45X3wz/FbOr1TOuLzw0ss5JbeCTldPBueyWZ1vtp/59nyxu7LoNh1Ok/uT6zepYyrV/uG1C33JHHWjGGQwi0Kgu4dX2/X+19+v4qZhZcsR9S7wUdxF7g9E+S6ABgkkYXDRH/Tjul77wJVx91vg4VV6CN/mnqOPP2BTVox3fF6Xxjrx3FAp1hJ+1yDSoCHbW5QShBMdlyeR2WxmJuBHKttW/v2pQVonYG8NWTOT3K83UNggzwVkc1OGwxN0P4EnH7rv5Jn6yofpSQi2y6+T1TdKQwagYYXr/fu6nbQalmgKpJhf+nmU51jznuLRwJDzdMfW1y+vQIN5yLMDXkXrJ4PabJLElV+ha9tdjCzvEmDb/g3NANbG
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -309,6 +309,97 @@ List all groups on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-log-source.api.mdx b/docs/docs/gen/api/get-node-log-source.api.mdx
index 4014cf53b..22ba624a8 100644
--- a/docs/docs/gen/api/get-node-log-source.api.mdx
+++ b/docs/docs/gen/api/get-node-log-source.api.mdx
@@ -5,7 +5,7 @@ description: "List unique syslog identifiers (log sources) available in the jour
sidebar_label: "List log sources"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv4zYQ/ivEnBKATpSts20F9JC2u4sUabHYTdBDahi0OJYZU6SWHHnjGvrvxVB+aG0V7aEBetiTRXme33zDGW1AYyyCqcl4BzncmUiiceZTgyKuo/WlMBodmbnBEMUZv4i+CQXGc6FWylg1syiME7RA8eSb4JQVvjuSCiWScF7jxR8OJJAqI+SPcOfL6a/KqRIrdDS9eX87tb6c+hqD4kAiTCTsT7cacniH9JvXeOfLj8k9SIhYNMHQGvLHDfyIKmC4aWjBDqwv84BKw6SdSKhVUBUShphEnaoQclj4SOlRguHUa0ULkBDwU2MCasgpNCiP8LnvUlIlOhI7C1IEjBhWqEXwDRlXipWyDYqzqXJrKabK2nMpfBBWzdCKiBYL8kGcLXGdJ9HzDqDnkVe1GRVeY4luhM8U1KhDbQMrZY1WxLHvgpSVcT9cyfTPtIMbWgmxWGClWIfWNctHCsaVIKEy7g5dyShdtYxNwFh7FzF5eJVl/DNACT8XvdJfgITCO0JHLK/q2poi1eryKbLS5jQEP3vCgkBCHbiyZDqXT342NXoo1LkPlSLIoWmMhpNCJLrNxO3PoomoBXlRB19gjIIWJgpGCCNxpPisqtqy7evrDL8bZ9kIX30/G42v9Hikvr16PRqPX7++vh6PsyzLGL+AsbEUe1GpENSamUJYxaGsjjDbYyU6W2Lug1AiGlda7OhzcYLFnpEDaJxmv5Pm2nC3bY1y+UlRE4esoGsq7g+/ZICVscjIxqWpa9TcdKduOmM7J/umTAklpDmOzm1HjgHUvrT68LfXS7o3TDzgcwz3NpG2lYAh+PDPSL1hMVFhjKpEYXpQiS7/i2Tt0PWP/Ythi+REAhlKFNpfQG8chTW0x8o76gyp/OQtN77x7sO261i/lTDOrk777sGphhY+mD9Ri5G4eX8rlrgWe2f/WQv+SyRvRO+840PSFbRQJHxRNCEwoP2We5tA5vYMSMHgaseoRBmNpIwdpOqRc60NPyortjpCzXxDhyAG3eoG2bVD+uzDUpCp0DcdW/mO7fk1jrDEMNhpXZKs8IWT6yzj4u3KnJh2UthvTgv71oeZ0RqdGIlbF5v53BSGCVljqEyMaQB+re7/v7rXQ+Oyu3CsiWkPeJmh+bWmL1TTVkKFtPC8cfIuJbutMIdLXmIvN7vR0F5aX17GwyYaVt12OTmspR+5mF29+svpPv4FUQ3bXY3PsyQEcvvwdrf+/PL7fRpRxs19Ut9Gf5OG2GGN5gkBEjiQDoiri+wirTO1j1SpxLDt7pt2uh43j0HcHJj60p8EHRiEz3RZW2UcB9wEyzF02D8CS4OEvDeYrWfGbQswkWlms+hmM1MRH4JtW379qcGw7sqyUsFwYOkTQJvIzxryubLxeMvvZ3/2YTtvz8UL7/6DSOwWKcdrVJKGHEDCEtf9T5h20kpYoNIYUn7d3zdFgTX1FE/uHP4C2BP+3Zt7kKC+ZOkRK5P1waA2m07i3i/Rte0+RuIzB9i2fwGZrQAf
+api: eJztV99v2zYQ/leIe0oAOnY6p9sE7CHdmiJDNhRtij1khkGLZ5kxRSrkyY1n6H8fjvIP1dawPSzABvTJonzk3X3fd9TdBjTGPJiKjHeQwZ2JJGpnnmoUcR2tL4TR6MjMDYYozvhF9HXIMZ4LtVLGqplFYZygBYpHXwenrPDtklQokITzGi9+dyCBVBEhe4A7X0x/UU4VWKKj6fX726n1xdRXGBQHEmEiYb+61ZDBO6RfvcY7X3xM7kFCxLwOhtaQPWzgDaqA4bqmBTuwvsgCKg2TZiKhUkGVSBhiMnWqRMhg4SOlRwmGU68ULUBCwKfaBNSQUahRHuFz36akCnQkdidIETBiWKEWwddkXCFWytYozqbKraWYKmvPpfBBWDVDKyJazMkHcbbEdZZMz1uAngdeVWaQe40FugE+U1CDFrUNrJQ1WhHHvgtSlsb9cCnTP9MWbmgkxHyBpeI9tK7YPlIwrgAJpXF36ApG6bJhbALGyruIycOr0Yh/eiTh56JD/QVIyL0jdMT2qqqsyRNXw8fImzanIfjZI+YEEqrAzJJpXT762dTovlDnPpSKIIO6NhpOiEhym4nbn0QdUQvyogo+xxgFLUwUjBBG4kjxWZWV5bOvrkb43Xg0GuCr72eD8aUeD9S3l68H4/Hr11dX4/FoNBoxfgFjbSl2olIhqDUrhbCMfVkdYbbHSrRnibkPQoloXGGxlc/FCRZ7RfagcZr9zpq54WrbHsr0k6I69p2Cri65PvySAVbGIiMbl6aqUHPRnbppD9s52RdlSighzXG0bltx9KD25amf/vJ6SfeGiQd8juHeJtI0EjAEH/4eqbdsJkqMURUoTAcq0eZ/kU47VP1D92LYIjmRQIaShPYX0FtHYQ3N8eaddPq2/OgtF77x7sO26nh/I2HcV3dvlN6pWAzEtvgZ+ZT5v1iC/xDJa9FZ7/SQ9gpaKBI+z+sQGNBuyd0kkLk8A1IwuNopKklGIylje6V65Fxrw4/Kiu0eoWa+pkMQvW51jezaIX32YSnIlOjrVq18x3b8GkdYYOittDZJ3vCFk6vRiMnb0ZyUdkLs5Smxn5yqaeGD+QO1GIjr97diiWuxV9FXYv8PxH5zSuyNDzOjNToxELcu1vO5yQ3fNBWG0sSYOpuv7P732b3qu4/bL4k1MTV4L9MNfeX0hThtJJRIC8+jBDfJsm33MxjydDLc7L75zdD6YhgPI0ZYtWPD5DBvfGQyW766U8c+/gVRBdsmnNezZARy+3Cz62t//u0+9R7GzX3avo3+OnUnh/mIvxAggQNpgbi8GF2kPrXykUqVFLYdalKz3tHmMYibg1JfetZrwSB8pmFllXEccB0sx9Bi/wBsDRKyTsdlPStuS8BEpmaMTTebmYr4Kdim4ddPNYZ1S8tKBcOBpdlOm8jPGrK5svF4fOtmf/Zh+709Fy881PUiseuQHffHyRoyAAlLXHdn02bSSFig0hhSfu3f13mOFXU2ntw5PNrtBf/u7T1IUF+q9EiV6fTeoDab1uLeL9E1zT5G4jUH2DR/Av+8pM4=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -241,6 +241,97 @@ List unique syslog identifiers (log sources) available in the journal on the tar
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-log-unit.api.mdx b/docs/docs/gen/api/get-node-log-unit.api.mdx
index 071feec99..f9405f742 100644
--- a/docs/docs/gen/api/get-node-log-unit.api.mdx
+++ b/docs/docs/gen/api/get-node-log-unit.api.mdx
@@ -5,7 +5,7 @@ description: "Retrieve log entries for a specific systemd unit on the target nod
sidebar_label: "Get log entries for a systemd unit"
hide_title: true
hide_table_of_contents: true
-api: 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
+api: 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
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -103,12 +103,12 @@ Retrieve log entries for a specific systemd unit on the target node.
@@ -375,6 +375,97 @@ Retrieve log entries for a specific systemd unit on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-log.api.mdx b/docs/docs/gen/api/get-node-log.api.mdx
index e559cffc5..6427eb0b0 100644
--- a/docs/docs/gen/api/get-node-log.api.mdx
+++ b/docs/docs/gen/api/get-node-log.api.mdx
@@ -5,7 +5,7 @@ description: "Retrieve log entries from the target node's system journal."
sidebar_label: "Get system log entries"
hide_title: true
hide_table_of_contents: true
-api: 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
+api: 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
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -98,12 +98,12 @@ Retrieve log entries from the target node's system journal.
@@ -370,6 +370,97 @@ Retrieve log entries from the target node's system journal.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-ntp.api.mdx b/docs/docs/gen/api/get-node-ntp.api.mdx
index 9e1270b40..ba264bb9e 100644
--- a/docs/docs/gen/api/get-node-ntp.api.mdx
+++ b/docs/docs/gen/api/get-node-ntp.api.mdx
@@ -5,7 +5,7 @@ description: "Get NTP sync status and configured servers on the target node."
sidebar_label: "Get NTP status"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLOSXAyqZTOW0F9OCmSeqiNYxEQQ6uIKy4I3EtcpeZHbpWBf73YpaULEsKnEMC9JCTSGqe37zXYDHm5Gp2wcMI3iKrq/G1iiufq8iGm6iMtyoPfu4WDaFVEekOKargFReo2NACWflg8eRvDxrYLCKMbuBqfD39y3izwAo9Ty+uL6ee62mokYxoizDRsH27tJ32q2DximvQEDFvyPEKRjdr+BUNIV00XIhoz/WI0FiYtBMNtSFTISPFROpNhTCCIkROjxqceFYbLkAD4afGEVoYMTWo99wfd86YBXpWGwlaESanraLQsPMLdWfKBtWzqfErraamLJ9rFUiVZoalilhizoHUsyWuRon0eQfN/SCY2g3yYHGBfoD3TGbQ4bWGO1M6a1hs3xipK+d/OdPpn2kHNLQaYl5gZYSHV7XQRybnF6Chcv5P9AtB6awVbAhjHXzEpOFFlsnPY5dTtFOgT0BDHjyjZyEzdV26PAXn9DYK7fpQc5jdYs6goSYJJbtO022YTZ09ZuE8UGUYRtA0zsIB/gWq2zBTl7+pJqJVHFRNIccYFRcuKgEGI4uleG+quhTZ5+cZ/jTMsgG++Hk2GJ7Z4cD8ePZyMBy+fHl+PhxmWZYJbISxKTnuWGWIzEoShLGKx7z6HFRqHkgZFZ1flJgS5eQAg20CHkHhsdzfe0oV5qmkuvTjwrAirAOxICHuo2danaQUSGYcE42+qaRGwlLQNq5EgTkuXV2jlZI7RLz3qde+LcnkZNLbOShqVz4vKHj3L+5GdxZCicYfOPaxQC6Qkti4ioyVysuQL5WLaldU7xIZFtu3Yp1nXCB9Jg6JWpV4h2XiD/N5RH4a7VfJgo5azSlUybwkMzSUYxKWN0TStbpPTwsVGHuectV3ALT7UvvW+QUZ2KtpD4x/6MNJdhKojLWEMWJMWpAo0NMmvxYyVWGMZoHK7aZelzZSfYRMDu96fPo20ba7ffRmt9X2eTnRwI5TdV5x/T59fC3JC+0+86YqH7O8CqVA6IJ/13cw4Ww1DLOzwx72wZuGi0CSS2qgLq4v1RJXaqvmq/W1L4T2Qu28b+oq8XZVHfKUK/ZxH3tziPoWcdHAxpVHS35PubVOHk2peh5lZqHhByOOqrUNimqP/E+gpWJXYWi6qpd59QVlOd46KQyPlJxnmQRvE+CUegeB/eEwsG8CzZy16NVAXfrYzOcud5KhNVLlYkxrxPfo/v+je35s9eg6UA+HrFXfZBf5HtVvFNVWQ4VcBNncZTPV3Y49glM5Bk7Xm7HQnvp+oe+n383kYbt/L1HsArW7428NL7jjTWSyaiQi0P3Dm806+cfHcZpLzs9DYu/NvkgD7eEOkeEAGsSQDoGzk+wkrYd1iFyZlFr9CbE9hrqhtofd+iFBv8rZ1PnLeM+ndWmcF5saKkVRh+sNCDVoGO0MXIF2otMIFor1emYifqCybeXzpwZp1QF+Z8iZmWByswbrojxbGM1NGffPoF3Pnr3rh+hz9Y2Po6MAbNYkL0tSooYRgIYlrnZvvHbSaijQWKTkX/f3RZ5jzTuMB21ETqRtDr99PQYN5nH+7eVbkn7UqPW6oxiHJfq23drI8i4Gtu1//k5YSA==
+api: eJztV0tv20YQ/iuLOSXAypZTOW0F9OCkSeqiNYxEQQ6uIKy4I3EtcpeZHbpmBf73YpaULEsKkkMCtEBOoqR5fPPNgzNrsBgzchW74GEMb5DV1eRaxcZnKrLhOirjrcqCX7hlTWhVRLpDiip4xTkqNrREVj5YPPnLgwY2ywjjG7iaXM/+NN4ssUTPs4vry5nnahYqJCPeIkw1bL9d2s77VbB4xRVoiJjV5LiB8c0aXqAhpIuaczHtuRoTGgvTdqqhMmRKZKSYRL0pEcaQh8jpUYOTyCrDOWgg/Fg7Qgtjphr1XviTLhizRM9qY0ErwhS0VRRqdn6p7kxRo3oyM77RamaK4qlWgVRh5lioiAVmHEg9WWEzTqJPO2ruB8FUbpAFi0v0A7xnMoOOrzXcmcJZw4J9A1KXzv9yptM/s45oaDXELMfSiA43lchHJueXoKF0/g/0S2HprBVuCGMVfMTk4dlwKB+PQ07ZTok+AQ1Z8IyeRcxUVeGylJzT2yiy60PPYX6LGYOGiiSV7DpPt2E+c/YYwkWg0jCMoa6dhQP+c1S3Ya4uf1V1RKs4qIpChjEqzl1UQgxGFqR4b8qqENvn50P8aTQcDvDZz/PB6MyOBubHs+eD0ej58/Pz0Wg4HA6FNsJYFxx3UBki00iBMJbxWFSfokotAimjovPLAlOhnBxwsC3AIyw8tvtbL6nCIrVUV36cG1aEVSAWJiR89EzNSSqBBOOYafR1KT0SVsK2cQUKzXHlqgqttNwh431MvfdtS6Ygk98uQHHb+Cyn4N0/uJvdeQgFGn8Q2IccOUdKZmMTGUuVFSFbKRfVrqk+JDIs2LdmnWdcIn0iD0laFXiHRdIPi0VE/jzbLxOCTlotKJQJXrIZasowGctqIpla3U+fNyo09jpF008AtPtW+9H5BRXYu2kPwD/M4WQ7GVTGWsIYMSYvSBTo85BfiZgqMUazROV2S68rG+k+QiaHdz0//Zho2905erM7avu6nGpgx6k7r7h6l358JcUL7b7ypisfq7wMhVDogn/bTzDRbDWMjs2wF8ZuRoMaqH6QSgUnKr7iXPtCai/UzvdNXyXdrqtDlmrFPp5jrw9Z3zIuHti44mjL7zm31smjKVSvo8w81PwA4qhbW6O49sh/B1opdiWGuut6eV99QVtOtkGKwiMn58OhJG+T4FR6B4k9O0zse29qzgPJkFADdXF9qVbYqG39fE/s/yGxPxwm9nWgubMWvRqoSx/rxcJlTkZPhVS6GNN++D27//3snh+bx92rpadD9uVvsmR+z+o3ymqroUTOg5xkcnLo7ngaw6lceafrzfu+PfX9pdavNTfTh7PtnWSxS9Tu8bYFnnOnm8Rkh0xCoPuH15s74fcPk7RwOL8ISb2HfZE2lYcDU14OoEGAdAycnQxP0t5fhcilSaXV34bbK7fbVva4Wz8U6Fe5h7t4Ge/5tCqM84KppkIcdbzegEiDhvHOJiXUTnXarURivZ6biO+paFv5+WON1HSE3xlyZi6c3KzBuijPFsYLU8T9+3Y3sidv+5foU/WNr96jBGz2Xy/bb5KGMYCGFTa7x3s7bTXkaCxSiq/7+yLLsOIdxYMxIrfvtobfvJqABvO4/vbqLVk/Cmq97iQmYYW+bbcYWb4LwLb9FxRh/Pc=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -277,6 +277,97 @@ Get NTP sync status and configured servers on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-package-by-name.api.mdx b/docs/docs/gen/api/get-node-package-by-name.api.mdx
index fe30d1eac..065c1ba3f 100644
--- a/docs/docs/gen/api/get-node-package-by-name.api.mdx
+++ b/docs/docs/gen/api/get-node-package-by-name.api.mdx
@@ -5,7 +5,7 @@ description: "Get details for a specific installed package by name on the target
sidebar_label: "Get a package"
hide_title: true
hide_table_of_contents: true
-api: eJztWG1v2zYQ/ivEfUoA2nE6J9sE7IO7tZ2Hrgi6FPuQGQYtnW3GEqmSJy+uof8+HCnbSuS16RuwAf1kyz7ePffcC++0hQx96nRJ2hpI4AWSyJCUzr2YWyeU8CWmeq5ToY0nleeYiVKlK7VAMdsIowoU1ghaoiDlFkjC2Az7fxmQQGrhIbmBqyg//V0ZtcACDU1HV+Npo2ZqS3SK7XuYSNg/jbOI55XNsNHwdPNKFQgSPKaV07SB5GYLT1E5dKOKlmys0Zo4VBlM6omEUjlVIKHzQZwhQwJL68lEbZo9LxUtQYLDt5V2mEFCrkL5gJ7r6KJaoCGx0yCFQ49ujZlwtiJtFmKt8grFyVSZjRRTleenUlgncjXDXHjMMSXrxMkKN0kQPY2E3fWsKnUvtRku0PTwjpzqRRa3sFa5zhQx9h1IWWjz07kM/0wj/VBL8OkSC8VnaFOyvCenzQIkFNq8RLNgps7rWu7J+GgimoCE+H8O9o+BO2FQvrTGY1D6ZDDgj+PAYhL3QUJqDaEhFlVlmes0ZNfZrWf5bde6nd1iSiChdJyLpKO1Wzub6uwYyrl1hSJIoKp0Bp2UWaK4tTMx/kVUHjNBVpTOpui9oKX2gvlAT4wU71RR5qz74mKAPwwHgx4++XHWG55nw576/vyyNxxeXl5cDIeDwWDA1Dn0VU6+hUo5pzYcSsLCH/PqPrrRvphz7UlEfaHyrcGQ4f0OE/vKOcLFfe2/NpLCzkOHiHVDS8WWSuuI+WAS0JDb9EMykKLKH1ONpiq4wO2KOVc6Rybbr3RZYsado8t7VLazvu8swb9gNzpYy13X+AwmxybmAetXM1uRUKbbM7tsPo7Je/XGgNfovI4Z/P6T4z2E5kg4fk/mscZbv34gVsfPN+E4wf6iLw/cnEZl+l2bB20IF+ja5aUNXQ7f4x9rENqI2YbQ96GuJZCmUE8NAo5Rx3t4yZlv57sQ+QAHnbPuw649YzFRoPfsoG6neUzRiOPQTG/aF09D4KQD9BnXA9QPj+7KvXvgZ5vzpaKted20SD5dSxgOzrtN8o1RFS2t0+8wEz0xuhqLFW7E3tQXa5qPZHHUTq1duYazsVnYNK2cYzLbTfJ5IJgbqkNyGte7DGsyPEwxjzCeZZq/qnw/+cT63YM4ajarkE0bpL+tWwnSBdoqNhO+A4+mcrdDRSf5wD0jF4NBO31DlnUC+103sM+tm+ksQyN6Ymx8NZ/rVHMylugK7X0Ysr5F9/8Q3eG/zzbG8hVdmewLjjffYvnVYnlxbE6NF0dDB68MrQHhW0j/2yGtJRRIS8sLKq9cMu5MCZzx7nu23d3w9VkT1LNteAyLq1vHRXRy2GL/4IDGmLV32b0PS6ISmj2Jn2dBCGTz5fluQPrtz+swbWgec/h448EozCOH7ZsvfGiNkHDeH/TDPlFaT4Uyh7k0vBBQu+R8yOL2kKpf+M1BdJzwjs7KXGnD4CqXs8nI9Q2wNEhIWvPUAWYSfpnIMG2x9HY7Ux7fuLyu+ee3FbpNjMJaOa1mTNTNFjLt+XsGyVzl/uHa2/b35HUzLZ2Kr/xW4CgZuyXF8IoSpCEBkLDCTfvlBu/4n+RTd8H/BBgRwqSWsESVoQsUx79GaYoltQ51Oh3v+/sye/HsGiSo+3XxoA6C9qOAttsocW1XaOp6j4/4mQHW9T8dd5P4
+api: eJztWG1v2zYQ/ivEfUoA2nE6J9sM7IO7tZ2Hrii6FPuQGQYtnW3GEqmSJy+uof8+HCnZSuS16cuAFcgnW/bx7rnnXnS8HaToE6cL0tbACF4giRRJ6cyLhXVCCV9gohc6Edp4UlmGqShUslZLFPOtMCpHYY2gFQpSbokkjE2x/5cBCaSWHkbX8DrKz35XRi0xR0Oz8evJrFYzswU6xfY9TCXsnyZpxPPKplhreLp9pXIECR6T0mnawuh6B09ROXTjklZsrNY6cqhSmFZTCYVyKkdC54M4Q4YRrKwnE7Vp9rxQtAIJDt+V2mEKI3Ilynv0XEUX1RINiUaDFA49ug2mwtmStFmKjcpKFCczZbZSzFSWnUphncjUHDPhMcOErBMna9yOguhpJOy2Z1Whe4lNcYmmh7fkVC+yuIONynSqiLE3IGWuzU/nMvwzi/RDJcEnK8wVn6FtwfKenDZLkJBr8xLNkpk6ryq5J+OTiagDEuL/Jdg/Be6UQfnCGo9B6ZPBgD+OA4tJ3AcJiTWEhlhUFUWmk5BdZzee5Xdd63Z+gwmBhMJxLpKO1m7sfKbTYygX1uWKYARlqVPopMwKxY2di8kvovSYCrKicDZB7wWttBfMB3pipHir8iJj3RcXA/xhOBj08MmP897wPB321Pfnl73h8PLy4mI4HAwGA6bOoS8z8i1Uyjm15VAS5v6YV3fRjffFnGlPIuoLlW8Nhgzvd5jYV84RLu5q/7WWFHYROkSsG1optlRYR8wHk4CG3LYfkoEUlf6YajRlzgVu18y50hky2X6tiwJT7hxd3qOyxvq+swT/gt3oYCWbrvEFTE5MzAPWr+a2JKFMt2d22XwYk3fqjQFv0HkdM/jDJyd7CPWRcPyOzEONt379SKyOn6/DcYL9ZV8euDmNyvT7Ng/aEC7RtctLG7ocfsA/1iC0EfMtoe9DVUkgTaGeagQco4738JIz3y6aEPkAB52z7uOuPWMxkaP37KBup3lM0Yjj0Eyv2y+emsBpB+gzrgeo7h9tyr174Geb8UtFW/OmbpF8upIwPNYkn6q06TuiJ+rmzIkbvP6KTfOBLI7bqdWUazgbm4VNktI5JrPdJJ8HgrmhOiSncdNkWJ3hYYp5gPE01fxVZfvJJ9bvHsRRs2mJbNog/W3dWpDO0ZaxmfA78GgqdztUdJIP3DFyMRi00zdkWSew593AvjWqpJV1+j2moifGrydijVuxz6HHwH4Lgf2uG9jn1s11mqIRPTExvlwsdKK5yxTocu19mJ4fo/stRHf470OrsTx7lSZ9bMHfQiwvjr1b40RQ08F3wdbk9xjS/3dIKwk50sry5oHv0jJehkdwxkuNs10zulVndVDPduExbCTcJm4Ypof1xB8c0Biz9pJi78OKqID6AszP8yAEsv7yvJl8f/vzKoyRmudXPl57MA6D5mGtwi98aN0N4Lw/6IeLYmE95cocLhxh06Oa5LzP4u6Qql95JRQdJ7ylsyJT2jC40mVsMnJ9DSwNEkatQfkAcxR+mcowRrP0bjdXHt+6rKr453clum2MwkY5reZM1PUOUu35ewqjhcr8/X1G29+TN/W0dCr+43XPUTKa26fhu2eQhhGAhDVu21srXt58lk/dzc1nwIgQppWEFaoUXaA4/jVOEiyodajT6XiRsy+zF8+uQIK6Wxf36iBoPwpot4sSV3aNpqr2+IifGWBV/QOadzi2
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -332,6 +332,97 @@ Get details for a specific installed package by name on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-package-update.api.mdx b/docs/docs/gen/api/get-node-package-update.api.mdx
index 0c39eed4d..04bea2616 100644
--- a/docs/docs/gen/api/get-node-package-update.api.mdx
+++ b/docs/docs/gen/api/get-node-package-update.api.mdx
@@ -5,7 +5,7 @@ description: "List packages with available updates on the target node."
sidebar_label: "List available updates"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv4zYQ/ivEnBKAdpStk7YCenC3u9sU2yLYZtFDGhi0OLEYS6SWHDlxDf33Ykj5Edtog7YL9LAnSxbn9c03D65AYyi8acg4Czm8N4FEo4q5mmEQj4ZKoRbKVGpaoWgbrQiDcFZQiYKUnyEJ6zQOf7cggdQsQH4L10l+8rOyaoY1WpqMr68mvdqJa9ArthfgTsLm7UpDDu+QfnEaew0fo0GQELBovaEl5Lcr+B6VRz9uqWRjvdbco9Jw191JaJRXNRL6EI9bVSPkULpA8VGC4UgbRSVI8PipNR415ORblHtw3KQQ1QwtibUGKTwG9AvUwruWjJ2JhapaFCcTZZdSTFRVnUrhvKjUFCsRsMKCnBcnc1zm8ehpAuxp4FRjBoXTOEM7wCfyapBQXMFCVSaGn2+clLWx353L+GWS4IdOQihKrBXL0LLh84G8sTOQUBv7Hu2MkTrvGBuPoXE2YLTwKsv45wgD3P1h2ocgoXCW0BJLqaapTBEzd/YQWHR16IibPmBBIKHxnGcyyfCDm06MPubwvfO1IsihbY2Gg3SUKB7cVFz9INqAWpATjXcFhiCoNEEwThiIPcUnVTcV6764yPCbUZYN8NW308HoXI8G6uvzy8FodHl5cTEaZVmWMYoeQ1tR2PFKea+WzBfCOhyL6rl3Y9tDJSrGMOkT984LZzGyZ3iAxIaVR7B4rv3H/iTnhqsvcZJKxZYa54nxYBDQkl8OIy9IURuOqUbb1lw8bs6YK1Mhgx3mpmlQc1Ue4p6Ura1vqjbGF+2mADsJPV/+OZBXNtGA1aupa0kou8PHvuJ7sA8xfRmefYsRfDq6XbTec6taoA8m8fmvNbxOAtVSGBtIVRVq0QtHhRYfX65svAlvq6KTQIYiiVMnZGBY84srtpOA3jv/9/bf8DFRYwgMitnlWOJH8mfbLm93O2rPtLt9h98wF6Hbl1yX2sH5167iXmmc/dA3KhbuJIyy88NW9dGqlkrnzR+oxUCMr6/EHJdiY+k/61cvxHAsdt7XlRJlU526InJMP+9PbyO83Ms8kje4WNfaMKWalKmOFvGeca0NP6pK9DJ97WycOGpWt8imLdKj83NBpkbXpjrmsbRj11jCGfqjTTkFyQLPjFxk2S6JI8cOEvvVYWLfOj81WqMVA3FlQ3t/bwrDVGzQ1yaEuDt8ye7/P7sXxzaM1Gp4RvLq9Dn3jC+Z/UyZ7STUSKXjlZ2XUJnW6RzO+DZwtlqPhu6sH9Zn7XaV94u0mt9t9/pfOaEpZ7vb/SaGkqiBftHl92k8BLJ/eLveGn/67SaOKcODksX7CMZxkG3vIzwrQMJmOsP5MBvGLbBxgWplt3tEGq8HLN2Hc7Xl7L+8RKWICZ/orKmUsXGl8hWbSCDfAp8GCfnOBO7NwXr94tnKn/n4ajVVAT/6quv4708t+mXCf6G8Ya/iRUmbwM8a8ntVhf270G6AJx/6EXsqPvMN6Sga663S8k4ZT0MOIGGOy92LXnfXSShRafQxvvR5XBTY0I7gQYPhe9KG3e/e3IAE9ZyOe/SL2o86tVqlEzdujrbrNj4Sv7ODXfcn9/ViuQ==
+api: eJztV21v2zYQ/ivEfWoA2nE6u9sE7IPbtV2Gbii6BPuQBQYtni3GEqmSJzeeof8+HCm/xDa2YFuADcinSPG9Pvfc6W4NGkPuTU3GWcjggwkkapUv1ByD+GKoEGqpTKmmJYqm1oowCGcFFShI+TmSsE5j/zcLEkjNA2Q38DHpT35SVs2xQkuT8cfLSWd24mr0iv0FuJWwfbvUkMF7pJ+dxs7CdXQIEgLmjTe0guxmDa9RefTjhgp21lnNPCoNt+2thFp5VSGhD1Hcqgohg8IFio8SDGdaKypAgsfPjfGoISPfoDyA4yqlqOZoSWwsSOExoF+iFt41ZOxcLFXZoHgxUXYlxUSV5ZkUzotSTbEUAUvMyXnxYoGrLIqeJcDue07Vppc7jXO0Pbwnr3oJxTUsVWli+tk2SFkZ+92FjL9MEvzQSgh5gZViHVrVLB/IGzsHCZWxH9DOGamLlrHxGGpnA0YPLwcD/nOCAW52XPY+SMidJbTEWqquS5PHyp3fBVZdHwfipneYE0ioPdeZTHJ856YTo08FPHO+UgQZNI3RcFSOAsWdm4rL70UTUAtyovYuxxAEFSYIxgkDcaR4r6q6ZNuj0QC/GQ4GPXz57bQ3vNDDnvr64lVvOHz1ajQaDgeDwYBR9BiaksJeVMp7tWK+EFbhVFYPoxvbDipRMobJnpg5L5zFyJ7+ERJbVp7A4qH1HzpJrg13X+IkFYo91c4T48EgoCW/6kdekKImnDKNtqm4edyCMVemRAY7LExdo+auPMY9Gdt433ZtzC/6TQm2Ejq+/H0gL22iAZtXU9eQUHaPj13Hd2AfY/o4PLsRI1g6hp033vOoWqIPJvH5zy28SQrlShgbSJUlatEpR4MWvzze2Hib3s5EK4EMRRKnScjAsOVHd2wrAb13/q/9v2UxUWEIDIrZ51jiR4pnNy5v9idqx7Tbw4DfMhehPdTctNqR/BtX8qw0zn7qBhUrtxKGp0bVa6U3LS96opuXTJqY8784rx6J4VjsvW86JeqmPnV55Jh+OJ/eRXh5lnkkb3C56bV+KjUpU55s4gPnWht+VKXodLre2QZx0q1ukF1bpC/OLwSZCl2T+pg/S3t+jSWcoz85lFOSrPDAyWgw2Cdx5NhRYS+OC3ttVUOF8+Z31KInxh8vxQJXYkuh58L+Hwr71XFh3zk/NVqjFT1xaUMzm5nc8Iyp0VcmhLgUPlf3v1/d0al5nL4hvPzwTvyUC+RzZZ+osq2ECqlwfIvxdSHTnZTBOZ955+vNN78977aw82Z3o/llurludwfbL1zQVLP9s22bQ0FUQ3fB8Ps0CoHsHt5tzoEff72K+4fhDYjVuwzGcUPZHZr8rQAJ27ULLvqDflzvaxeoUna3IKa96Yilh3Cud5z9h9dxypjwns7rUhkbd2VfsosE8g2wNEjI9larzh1s9mpemvhnFl+vpyrgtS/blv/9uUG/SvgvlTccVbyAtQn8rCGbqTIcHrn7Cb741H1iz8QTn74n0dicC5aPhSgNGYCEBa72L/j2tpVQoNLoY37p53GeY017ikcDhg/gLbvfv70CCeohHQ/oF62fDGq9ThJXboG2bbcxEr9zgG37B6LpB3c=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -309,6 +309,97 @@ List packages with available updates on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-package.api.mdx b/docs/docs/gen/api/get-node-package.api.mdx
index e78d234ad..67d8de9c0 100644
--- a/docs/docs/gen/api/get-node-package.api.mdx
+++ b/docs/docs/gen/api/get-node-package.api.mdx
@@ -5,7 +5,7 @@ description: "List all installed packages on the target node."
sidebar_label: "List installed packages"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLOdnASqZT2W0J9KC2TqoiKYzUQQ+uIKzIsbQWucvsDlUrAv97MbuURJtCYrQ10ENOIql5fvPeQo4+c7oibQ2k8FZ7EqoohDaeVFFgLiqVrdQCvbBG0BIFKbdAEsbmOPzTgARSCw/pLVxHwtk7ZdQCSzQ0G19PZi3/zFboFKvxMJWwf5vkkMIbpN9sjq0EkOAxq52mDaS3W/gRlUM3rmnJalp5qUOVw7SZSqiUUyUSOh/IjSoRUlhaT+FRgmbXKkVLkODwY60d5pCSq1E+8f8mOqcWaEjsJEjh0KNbYy6crUmbhVirokZxMlNmI8VMFcWpFNaJQs2xEB4LzMg6cbLCTRpITyNUDwOrKj3IbI4LNAN8IKcGEb8trFWhc0Vs+85IWWrzw7kM/8wi8NBI8NkSS8U8tKmY3pPTZgESSm3eolkwUucNY+PQV9Z4DBpeJQn/HAm5vTsS8SFIyKwhNMRsqqoKnYWgnd175t32LbHze8wIJFSOQ0w6ar6385nOj1l8Z12pCFKoa51DLx5LFPd2LiY/i9pjLsiKytkMvRe01F4wUOiJLcUHVVYFy764SPC7UZIM8NX388HoPB8N1Lfnl4PR6PLy4mI0SpIkYRgd+rog37FKOac2nDCEpT/m1WPrxjuoRMEgRnnizjphDYb0GfaQ2KflESweS/+lpeTgcOHFpKSlYk2VdcR4MAhoyG2GITFIUe2PiUZTl1w9dsWYK10gg+1Xuqow54Ls4x6F7bTvCzb4F/RGBxu5K8l/geTExDxg+WpuaxLK9DOyj+bzkGz7imDqYPAandcxgz/POdmb0LIE9kc0z1Xe+fqFWB3nb8NxgsPFUB6wOY3C9KcuDtoQLtB1y0sbuhx9xj+WILQR8w1x5TeNBNIU6qm1gGPU837fPg5No5GAzln3ZdeumEyU6D07qLtpHlM02nFo2bfdrt4COO0ZesX1AM1T1l259xl+sgV3bG3N+7ZdMncjYZSc9xvmB6NqWlqnP2EuBmJ8PREr3Ii9qv+saT4TxXE3tXblGnhjs7BZVjvHYHab5OsAMDdUh+Q0rncZ1mY4KV08IzvHea75URWi5Wnrd2/EUbV5jazaIP1l3UqQLtHWsZnwcDyayv0OFZ1khkdKLpKkm74hy3qB/aYf2NfWzXWeoxEDMTG+vrvTmeZkrNCV2vuwu3yN7v8/uhfH9pzYbHhQ8wL3AjvO14C+UEAbCSXS0vKlwBuwjLt8Cmd8hJxtdzOhOas6B4Rbx4NgergmfudIxmB1b4q98UuiCtr1mt/ngQhk+/B6N0t//eMmDCbNE5HZW9PHYXQd7h+eDdDZNuB8mAzD6llZT6UyhxUmztH+Dv4UyO0hW//ZsRY9JXygs6pQ2rA1tStYckT1FpgaJKSdWbsDdirDBGaq7XauPH5wRdPw5481uk2Ee62cVnNG5HYLufb8nEN6pwr/9ODqunPyvp2gp+KFz7CjIOwWV8Nra6CGFEDCCjfda7KZNhKWqHJ0wb/49zjLsKIOY6+R8DG2z+I3VzcgQT3OvifZFqQfNWq7jRQ3doWmafY2Er+zgU3zN/yAfBY=
+api: eJztWN9v2zYQ/leIe0oA2nE6J9sE7MHd0s5DOxRdij1khkFLF5uxRKrkyYtr6H8fjpRsJTLaYFuADehTZPt+fvfd6S47yNCnTpekrYEE3mhPQuW50MaTynPMRKnStVqiF9YIWqEg5ZZIwtgMh38YkEBq6SG5gXdRcP5WGbXEAg3NJ++m80Z/bkt0it14mEnYf5pmkMBrpF9tho0FkOAxrZymLSQ3O3iJyqGbVLRiN429xKHKYFbPJJTKqQIJnQ/iRhUICaysp/AoQXNqpaIVSHD4sdIOM0jIVSgf5X8dk1NLNCRaC1I49Og2mAlnK9JmKTYqr1CczJXZSjFXeX4qhXUiVwvMhcccU7JOnKxxmwTR0wjV/cCqUg9Sm+ESzQDvyalBxG8HG5XrTBHH3gYpC21+OJfhl3kEHmoJPl1hoViHtiXLe3LaLEFCoc0bNEtG6rxmbBz60hqPwcOL0Yj/HCm5vT1S8SFISK0hNMRqqixznYaind151t31I7GLO0wJJJSOS0w6er6zi7nOjkV8a12hCBKoKp1Brx4rFHd2IaY/icpjJsiK0tkUvRe00l4wUOiJI8V7VZQ52764GOF349FogC++XwzG59l4oL49vxyMx5eXFxfj8Wg0GjGMDn2Vk+9EpZxTWyYMYeGPZfUwukkLlcgZxGhP3FonrMFAn2EPiT0tj2Dx0PrPjSQXhxsvkpJWij2V1hHjwSCgIbcdBmKQosofM42mKrh77JoxVzpHBtuvdVlixg3Zxz0aa73vGzbkF/zGBGvZtuQ/QHJqIg/YvlrYioQyfUb20Xwaks1cESwdAt6g8zoy+POa030IjUpQfyDzVOedb79Qq+P6TTlOcLgcygM2p9GY/tTFQRvCJbpue2lDl+PP5McWhDZisSXu/LqWQJpCPzURcI162e/Hx2Fo1BLQOeu+nNoVi4kCvecEdZfmkaIxjsPIvulO9QbAWS/QK+4HqB+rtu3eV/jR5jyxtTXvm3HJ2rWE8bGB+VJl7dwRA9FMbSZuyPpfHJpPRHHSpVbbrkE3DgubppVzDGZ3SL4KAPNAdUhO46ZlWMNwUjp/AjsnWab5UeWi0Wn6dx/EUbdZhezaIP1p3VqQLtBWcZjwy/EolfsTKibJCg+cXIxGXfoGlvUKe94v7AejKlpZpz9hJgZi8m4q1rgVew59Lez/obDf9Av7yrqFzjI0YiCmxle3tzrVPGVKdIX2PiylX6v736/uxbF5HN8ivIHxZv4My+vXgj5TQWsJBdLK8gnIp42MR1oCZ3xdnu3al319VnYuQ7eJl97scCb+xpWMxeoei/vgV0QlNHcTf14EIZDNw6t2Sfrl9+uwcWhedVi9CX0SdpLDYcvvBuiskXA+HA3DTVFaT4Uyh900Lkj94+oxkLsDW//eFR4zJbynszJX2nA0lcvZckT1BlgaJCSdJaoFdibDasVSu91Cefzg8rrmrz9W6LYR7o1yWi0YkZsdZNrzcwbJrcr940u6m87J++YNeiqe+b4+CkJ7kRi+R4I0JAAS1rjt/pugntUSVqgydCG/+PMkTbGkjmJvkPCVvWfx66trkKAesu8R24L1o0HtdlHi2q7R1PU+RuLPHGBd/wXPYSDU
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -327,6 +327,97 @@ List all installed packages on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-process-by-pid.api.mdx b/docs/docs/gen/api/get-node-process-by-pid.api.mdx
index bd41e34f0..6f22ca31d 100644
--- a/docs/docs/gen/api/get-node-process-by-pid.api.mdx
+++ b/docs/docs/gen/api/get-node-process-by-pid.api.mdx
@@ -5,7 +5,7 @@ description: "Get detailed information about a specific process by PID."
sidebar_label: "Get process by PID"
hide_title: true
hide_table_of_contents: true
-api: eJztWOtv2zYQ/1cIfkoB2pZdO+0E7EO6NoWHdQiyBAOWGQYtnm3GEqmSpySuof99OEpW/NDa9AVsQD9Zso73+N2Dd7fhCnzidI7aGh7zt4BMAUqdgmLazK3LJH1icmYLZJL5HBI91wnLnU3AezZbs4vx6+7fhguOcuF5fMMvqm/Td9LIBWRgcHp2MZ7WR6Y2Bxe4ej4RvHkbq0qB362CmsOr9YVWXHAPSeE0rnl8s+GvQDpwZwUuSVbNNHYgFZ+UE8Fz6WQGCM4HciMz4DFfWo/hUXBNluYSl1xwB+8L7UDxGF0B4gCOK+kWgEwuwCDbchDMgQd3B4o5W6A2C3Yn0wLYyVSatWBTmabPBLOOpXIGKfOQQoLWsZMVrONA+qzC66FjZa47iVWwANOBB3SyU4G44Xcy1Uoi6b5VUmTa/NwX4csUg268FNwnS8gkncF1TvQenTYLLnimzW9gFoRUvyxFA0YeUH06DrU7mFZgUM81OHZyMX79VWa0aq4NwgJcpbrOiiwoPiH9fG6Nh8BzEEX0065jFb5dLnhiDYJBIpV5nuokhFnv1hP95li4nd1CglxQTOXgUFfSbu1sqlUbvFV68JgXRQD0IHiWwG7tjI1fs8KDYmibpMGl9ozgAI+kKTzILE+J92gUwcthFHVg8NOsM+yrYUe+6J92hsPT09FoOIyiKCLkHPgiRb+jlXROrsmrCJlvs6odLorvihmbW0cZrs0ihSrmu0dgNGnUAsex+VtqZucMlw1T8jxKLHwbFzDk9RtuV4RwqERUAVY6z0FRwTgWUzHbCmkKSjAoQE16BLG1Az4Nz7il9rnCGMr2mskxOPlemDzG8qeSaS8E+oPnw1Lwp4G85UXU+4FkFto8kMmFB/dpRtceXGMgobhj5CPT+/v7jpIotx78DA0D+T63WhwxS/JimoNL6nStWZoimwUAm0RTtpilcCTkl4trVni5AFYzkYt9WYPuqBQ8g+xJUuaplcch8Q4y69Yfl9PvDmo5bi/KHmOhEaINng6PhFyCD3HBPCDz+gMwbdhsjeCPgmR0+uIlQWezTJrW+rTP+rxIU1ZTs1SbtoCJWSY9gmsqVa/wrudn2vSagPIoHU5Rf058hjOMzuwLHUSD007U7/RHV/0ofh7FUfQXL0vBUWMgqBlQOpJscM4+IZrfEBnLwAdf6Z3iw6qK0g1CHi+9m93+oK5NkyMt3gK+MejWvDw8vS3HrWcu67uLjpWCD6P+8e11bWSBS+v0B1Csw84uxmwFa9bI+Ga32RMRPGM779vKGs4yXEpkNkkK5wjIXXeeV40jWuYAnYa7bW0Oxbe6mVuL/oFwpTQ9yrS+zX1dgxslWsWqAki0Aby3bhWizRZV3afe5Aml+aoxkg7sCRlF0W5chgg7cuzzY8eeWzfTSoFhHTY2vpjPdaIpEHNwmfY+tME/vPt/8O7w35tOY6l9Koz6hn3nD19+N1+O2gaI6tJYAOJBk/fDn/9tf4aOC5eW9gc0EotqqI15z1gFvc32ai97tVN7m1yrMuwV3F21J5g8Lhn+IH9WLttdNTQmLBFzXs+u9D4LRFzUD+fbBu/XP69Cl0FrlHC8NuAs9CGPuxG67LngpEiFRb8bdcOQl1uPmQxBVg/utJ/Z37wcIrl5DNev3eZU5iI8YC9PpTZhmnBpmHRktX0hgLng8U73tB2xBI9pHpqI0FoR8WYzkx6uXVqW9Pf7Aty6gv5OOi2psaeFjdKenhWP5zL1h7uIXftOLuv26Bn7zpuaViy2g7ehsTtQ85hzwVew3l040d7li2z6+NblC1Qif5STUvAlSEVT4c2m/nKWJJDjzpmjQkdLmCbL3r654oLL/bw4yIPAvVWfzaaiuLIrMGXZqIf0TgqW5T+30xi2
+api: eJztWG1v2zYQ/isEP6UAbcupnXYC9iFdm8LDWgRdggHLDIMWzzZjiVTJUxLX0H8fjpLlN61N2w1YgXyyZB3v5bmHx+OtuQKfOJ2jtobH/C0gU4BSp6CYNjPrMkmfmJzaAplkPodEz3TCcmcT8J5NV+xy9Lr7l+GCo5x7Ht/wy+rb5J00cg4ZGJycX44m9ZKJzcEFrZ6PBW/eRqpy4L1VUGt4tbrUigvuISmcxhWPb9b8FUgH7rzABdmqlcYOpOLjcix4Lp3MAMH5IG5kBjzmC+sxPAquKdJc4oIL7uBjoR0oHqMrQBzAcSXdHJDJORhkGw2COfDg7kAxZwvUZs7uZFoAO5lIsxJsItP0mWDWsVROIWUeUkjQOnayhFUcRJ9VeD10rMx1J7EK5mA68IBOdioQ1/xOplpJJN83TopMm5/7InyZYPCNl4L7ZAGZpDW4ykneo9NmzgXPtPkNzJyQ6pelaMDIA6qPx6FOB9MKDOqZBsdOLkevvyuMVs+1QZiDq1zXWZEFx8fkn8+t8RB0nkYR/bT7WNG3ywVPrEEwSKIyz1OdBJr1bj3Jr4+N2+ktJMgFcSoHh7qydmunE63a4K22B495UQRAD8izAHZrp2z0mhUeFEPbbBpcaM8IDvBInsKDzPKUdA+HEbwcRFEHTn+adgZ9NejIF/2zzmBwdjYcDgZRFEWEnANfpOh3vJLOyRVlFSHzbVG1w0X8rpSxmXW0w7WZp1BxvnsERrONWuA4Dn8jzeyM4aJRSplHiYVv0wKGsn7D7ZIQDpWIKsBS5zkoKhjHZiplGyNNQQkBBajJj2C2TsCX4Rm11D5XGEO7vVZyDE6+R5Mtl7+0mfYo0D99PigFfxzIG10kvU8kM9fmgUIuPLgvK7r24JoACcWdILdK7+/vO0qi3GTwKzwM4vvaanOkLMmLSQ4uqbdrrdIU2TQA2Gw0ZYtpCkdGfrm8ZoWXc2C1Ejnft3XaHZaCZ5A9ysostfKYEu8gs271eTv97mltx+2xbMuFxog2eDY4MvIBfOAF84DM60/AtGHTFYI/Isnw7MVLgs5mmTSt9Wlf9UWRpqyWZqk2bYSJWSY9gmsqVa/wruen2vQaQnmUDieov4afYQ2jNftGT6PTs07U7/SHV/0ofh7FUfQnL0vBUWMQqBXQdiTb4Jx9BJvfkBjLwIdc6Z3iw6qK0g1GtofezW5/UNem8ZEXbwHfGHQrXh6u3pTj1jUf6rOLlpWCD9pOr1dSbQ4E1mH1oUnFJ0T8L55mj0TwnO28byprWMtwIZHZJCmcIyB303lRNY5omQN0Gu42tTkU3+pkbi36B8aV0vQo0/o093UNbpxoNasKINMG8N66ZWCbLaq6T73JI0rzVRMkLdgzMoyiXV4Ghh0ltn+c2GsjC1xYpz+BYh12fjliS1ixhjxPif0REvv8OLEX1k21UmBYh42ML2YznWiqMDm4THsf7jdP2f0Rsjv459uEsdQXF0Y9leAfIZfDtrO16gbmgHjQvT/l8/+dz9BK48LSYIhmHaKaVsS8Z6yC3nrTs5W9Oqm9da5VGQZG7q4aAI2306PfKZ9VynZnSE0IC8Sc10MJep8GIS7qh4tN5/7rH1ehfaT5WFheB3AeGszt0IsOey44OVJh0e9G3XB7z63HTAaS1RMZGrztj9QOkVxv6fq9Y7oqXIQH7OWp1CZcE10arrCyGqsRwFzweKct3tydBY/pojsWoWcm4fV6Kj1cu7Qs6e+PBbhVBf2ddFrSjY0mcUp7elY8nsnUHw6ZduM7+VC3R8/YfzyCa8ViM1ExNE8J0jzmXPAlrHYniTRQ+6aYPj9O+waXKB/luBR8AVLRdf9mXX85TxLIcWfNUaGj6Vqzy96+ueKCy/19cbAPgvZWf9brSuLKLsGUZeMe0js5WJZ/Az1EvWU=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -356,6 +356,97 @@ Get detailed information about a specific process by PID.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-process.api.mdx b/docs/docs/gen/api/get-node-process.api.mdx
index 832adcd52..d2378666b 100644
--- a/docs/docs/gen/api/get-node-process.api.mdx
+++ b/docs/docs/gen/api/get-node-process.api.mdx
@@ -5,7 +5,7 @@ description: "List all running processes on the target node."
sidebar_label: "List processes"
hide_title: true
hide_table_of_contents: true
-api: eJztWFtv2zYU/isEn1qAtmXXTjsBe8i6psjQFkGXYMAyw6ClY5uxRKrkURLX0H8fDnWxbGlrOrTAHvpkyT43fufjuXjPY3CRVRkqo3nI3ymHTCYJs7nWSq9ZZk0EzoFjRjPcAENp14BMmxiGf2kuOMq14+EtvyolF++llmtIQePi/OpyURlYmAysJC+OzwVv3i5jHvK3gB9MDJUFLriDKLcKdzy83fNfQFqw5zluyE1lL7QgYz4v5oJn0soUEKzz4lqmwEO+MQ79o+CKTpZJ3HDBLXzKlYWYh2hzECfHvy4PJ9egkdUWBLPgwN5DzKzJkVC5l0kO7NlC6p1gC5kkzwUzliVyCQlzkECExrJnW9iFXvR5CdXjwMhMDSITwxr0AB7RykGJ357fy0TFEin2OkiRKv3zWPhfFiXwvBDcRRtIJengLiN5h1bpNRc8Vfod6DUhNS4IGwsuM9qB9zAJAvroybhZHRI95IJHRiNoJGmZZYmKfK5Gd45U9t0AzPIOIuSCspOBRVU6vDPLhYr7Al0Zm0rkIc9zFfNOGjbA7sySXf7KcgcxQ1OHx3CjHCN8wCFFCo8yzRKyPZsF8GoaBAOY/LQcTMfxdCBfjs8G0+nZ2Ww2nQZBEBB6FlyeoGtFJa2VO+IJQur6TnUcXUVTlhBypTW2MpZJ5pReJ1DSZ9hBo2FkDx7d89fSlBu6d5VRSj9KzF2fFdB5SnfEbAliqRIgbN1WZRnEdO26bkpjtZPmWvoDeawpDu+2IUgPcl+gVFk7lDsg80SoL3VJFIpILk2OTJ5Wpi7O2RHllEZYg/3HLKoYNKqVAntEp/HkxbQQ/Gn5qm2R9DEp9VrpR0Ivd2C/bOjGgW0OSAlpHfJg9OHhYRBLlDUZviJCL35srXJHxqIsX2Rgo+rqVyZ1ni49gM2ljU2+TKDj5PXVDcudXAOrjMj1sa/JcFYInkL6JC+rxMguJd5Dauzu3/2Mh5PKj3WulwuNE6XxbNpx8hGc5wVzgMypz8CUZssdguuQZHb28hVBZ9JU6t5ad2z6Ik8SVkmzROk+woQslQ7BNlVvlDs7ckulRw2hHEqLC1Rfw0+vw0jn2OkkmJwNgvFgPLseB+GLIAyCP3lRCI4KvUBlgK6j/x6sNU+g8xsSYyk4nyzVKmSsrE5Db+3Qk2/bbbuqc/NOGG802h0vTlXrwt5VeG0SasnK6I9VPyTtQvBpMO52xBstc9wYqz5DzAbs/OqSbWHHGlffrD0+EcVz1nqvK7XXZbiRyEwU5dYSmO2cXniAqXVaQKvgvq71vpjHgFIlvU3kxHkcK3qUCat0qkLcBNHrNs6BXGvAB2O3nnImL/sITT9PqM/XzSFJ4cjJLAja5PQs6yT2RTexF8YuVRyDZgN2qV2+WqlIERkzsKlyzg+nP7L7/8/urG+QLYsNDWVHe8s3HGd/ZPQ7ZdQ3a9wY2gVpxxHlthbyEa2Zo33dFIpR1loR7X258s0P++LvlMkyWe2tsQl+g5jxaoGi96UX4qJ6uKingt/+uPadSVHDI/Uq9HPfuw4bLjUHLjgFUqIwHgZDv2VkxmEqPb2qhdRPxYch+gS//YGk/2kJL8+H8IijLJFK+5nTJn4eluXmTNJc8LDVYms458I3XpLa75fSwY1NioK+/pSD3ZUg30urJM19tGXHytFzzMOVTNzpIt0+zbOPVeN8zr7zet0LQr2paNpTvDQPORd8C7v2vwTFvBB8AzKmMf12X/18HkWQYUuxUz5oyW64+/bNNRdcHnPuhGPeem9Q+30pcW22oIuiiRHpnQIsir8BYssbRA==
+api: eJztWG1v2zYQ/isEP7UAZcuunXYC9iHtmiJDOwRdggHLDIOWzjZjiVTJUxLX0H8fjnrxi7Q1HTagA/rJkny8Oz738I53O56Ai63KURnNI/5eOWQyTZkttFZ6xXJrYnAOHDOa4RoYSrsCZNokMPhDc8FRrhyPbvlVJTn/ILVcQQYa5+dXl/NawdzkYCVZcXwmePt2mfCIvwP8xSRQa+CCO4gLq3DLo9sdfw3Sgj0vcE1man2RBZnwWTkTPJdWZoBgnRfXMgMe8bVx6B8FV7SzXOKaC27hU6EsJDxCW4A42f51tTm5Ao2s0SCYBQf2HhJmTYGEyr1MC2DP5lJvBZvLNH0umLEslQtImYMUYjSWPdvANvKizyuoHgMjcxXEJoEV6AAe0cqgwm/H72WqEonke+OkyJT+cST8P/MKeF4K7uI1ZJLW4DYneYdW6RUXPFP6PegVITUqCRsLLjfagbcwDkP66Ym4We4DPeCCx0YjaCRpmeepin2shneOluy6DpjFHcTIBUUnB4uqMnhnFnOV9Dm6NDaTyCNeFCrhnTCsgd2ZBbv8iRUOEoamcY/hWjlG+IBD8hQeZZanpHs6DeHVJAwDGP+wCCajZBLIl6OzYDI5O5tOJ5MwDENCz4IrUnQHXklr5ZZ4gpC5vl0de1fTlKWEXKWNLY1lkjmlVylU9Bl00GgZ2YNHd/+NNMWGzl2tlMKPEgvXpwV0kdEZMRuCWKoUCFu3UXkOCR27rplKWWOkPZZ+Qx5r8sObbQnSg9wXKFXlDuX2yDwR6ktdEYU8kgtTIJOnmamLc35EOaURVmD/MooqAY1qqcAe0Wk0fjEpBX9avBpdJH1MSr1S+pHQKxzYLyu6cWDbDVJADja5V/rw8BAkEmVDhq/w0Isfa6vNkbI4L+Y52Lg++rVKXWQLD2B7aBNTLFLoGHlzdcMKJ1fAaiVydWxrPJiWgmeQPcnKMjWyS4kPkBm7/Xs7o8G4tmOd6+VCa0RpPJt0jHwE53nBHCBz6jMwpdlii+A6JJmevXxF0Jksk7o31x2rvijSlNXSLFW6jzARy6RDsG3WGxbODt1C6WFLKIfS4hzV1/DTr2G05tjoOByfBeEoGE2vR2H0IozC8HdeloKjQi9QK6Dj6L+DteYJdH5LYiwD54OlDhIZq7LTwGvb1+Tbw7Jd57lZx423Gu2Wl6dLm8TeXfDGpFSSldEf63pIq0vBJ30V8bVMmgrDAlaXZcpAftf/Ynl8Iorn7OC9ydR+LcO1RGbiuLCWwDyM6YUHmEqnBbQK7ptc75N5AihV2ltETowniaJHmbJ6TZ2IWyd6zSYFkGkN+GDsxlPOFFUdodvPE/LzdbtJWnBkZBqGh+T0LOsEdtQN7I2WBa6NVZ8hYQE7v7pkG9iylkPfA/t/COyLbmAvjF2oJAHNAnapXbFcqlhRlsnBZso533V8j+63H91pXz6uqgjdto8a0u+J+NuPqL+F4dpQk0/Nq6ja8IgPaX4w3DXVvhzmB72/va96+dl+EPArRbIK1uE4oHV+jZjzujOm94UX4qJ+uGiuez//du2vHIpuMrS8dv3cX0r2owsqDlxwcqRCYTQIB759zI3DTHp61ZMG3+7su6MT/HZ7kv6j6Uq1P4RHHOapVNo3Ezb1jY6sRiIkzQWPDu5ODZwz4W9UJLXbLaSDG5uWJX3+VIDdViDfS6skXehpfJIoR88Jj5YydacTksPdPPtYF87n7D+em/SC0LSgmhpQL80jzgXfwPZw/FPOSsHXIBPqv2539d/ncQw5HizspA+anrTcfff2mgsujzl3wjGvvdep3a6SuDYb0GXZ+oj0Tg6W5Z//sb/z
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -363,6 +363,97 @@ List all running processes on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx b/docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx
index 4d76d6993..188697fbb 100644
--- a/docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx
+++ b/docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx
@@ -5,7 +5,7 @@ description: "Get a specific cron drop-in entry by name on the target node."
sidebar_label: "Get a cron entry"
hide_title: true
hide_table_of_contents: true
-api: eJztWG1v2zYQ/isHYh8STI6dzulWA/vgbm2XYe2CLkWBJZ5Bi2eLjUSqR8qNaui/D0dKjmO7S9auwwb0kyXrXp974R1XQqFLSZdeWyNG4hl6kOBKTPVcp5CSNaDIlj1tAI2nGmY1GFkgWAM+Q/CSFujBWIVHl0YkwsuFE6ML8VuaoapynD6XRi6wQOOn47PTKYuc2hJJskonJolYv52qaMILq7Dj/4GseVy/kAWKRDhMK9K+FqOLlXiMkpDGlc9YH8sdEUolJs0kEaUkWaBHcoGWTRYjkVnnTRSl2d1S+kwkgvBtpQmVGHmqMNnC5Dy6KBdoPHQSEiB0SEtUQLby2ixgKfMK4WAqTZ3AVOb5YQKWIJczzMFhjqm3BAdXWI8C6WEE7LpnZal7qVW4QNPDa0+yF1FciaXMtZKebe+MTAptvj9OwpdphF80iXBphoVkHl+XTO88abMQiSi0+QXNgmE6bppkDcbfBoJD0WYB8x7B88p5SK3xUhuwJq9B5mUmTVUgcfZkkmTKMUigMgrJpZbQJSCNgqwuMzTuUzC4v9ucD94jsRd/XMje+3Hv90Hv0bQ3+for0XC+ELrSGodB44PBgH8+6L1CL3V+JBLBzqPxTC3LMtdpyOP+G8csq13r7OwNpl7sIGtzTg9tDXSGwNwSl6I2ixxjIUblnIvrimEbSuJXr6Ptb+xsqtU+QOaWCunFSFSVVjsmnGcIb+wMTn+EyqECb6Ekm6Jz4DPtgKFH51khXsuizFn2yckAvxsOBj188GjWGx6rYU9+e/ywNxw+fHhyMhwOBoMBR4nQVbl3G1ZJIllz9nks3N0Ajfe0ol3f1+W9x/vb8n5qKcHOQxuLxe0z6YGwtOQZAXa71cSZ5qWv3D7RaKqCW5C9YpSlzpHhdVe6LFFxg9tFOgrrtK/DGYIe9LIrQe39/NkuTeZsobyT99dAB85bwtjboxUICsvc1qigTfOjruK4Md/TqI4c8LokdI6TFs64eRofFPXRp32O7pHqBxc0hq7QcGvySEuZ363qDElbpVPoWOAgsxXldQJKav55h3jFv4U1Psvrww8ZseokNLesuYlylMsWsGCRiCiZO04ULSaMkq0ovQdGrzMkDGDH6OV6iW4ElyIicikSuGxVxuegNT5GxfxsCS479ZeiRa9ySHcb8MphDPZGi6HKOJAuhBuJ7D3EPGEyKNA5uUDQm1UVK4IbCiHjucTbpdVsnjsXm2d0W3KTRHjtQ8PhlHrCfKLZ5ut6zBb1M/Qv25bKPE0ihoPj3e7+ysjKZ5b0e1TQg/HZKVxhDWsFn9Dqb/eoe+I5ho33rk8E3tilbJpWRKhu9+Onu1BHDEMo47G1t4VtKVdK86PM26POgZzZyt8YsVetqpBVG/TvLF2B1wXaKjYNPtk39HKNLZD2HkLRSWa4peRkMODgdaEN+bYT2G92A/vU0kwrhQZ6cGpcNZ/rVHNalkiFDv3IfYnu/yK6w78cyozlVl4Z9Ulz2Zdw/kvhPNk3Y8dTpIWDd6qbQ+lLVP/7UW0SUaDPLK/xvJYmca8ciT7fD/RX3dHe9LupMMxc/VX4M+z3tIwr++Rm2eebgCJGbnPlX3uSeV+KdhPk91kgEkn78LRbe35+fR6GDW3mNrC3fozDlHJzTcGHv0gEGxIhOT4aHIU1prTOFzLkWrtDx/uSmyzdhnN1k7P/xN1KdNjjte+XudRxzKMwH0ekLwRTi0SMNseobmJPwlTJX8OXSRKGLeZarWbS4SvKm4b/flsh1TEKS0lazhioi5VQ2vGzEqO5zN32BcGmswcv28npED7z/cleULot03BEArUYCZGIK6w3r4H4NuSjfPp8VyEf4U50hbeODKXiof9i1X4apymWfoNpp2/y5ce6aJ89OReJkLfra6uegvS9Bq1WkeLcXqFpmrV9nt/ZwKb5E7aNFOU=
+api: eJztWG1v2zYQ/isHYh8SjIqdzulWA/vgbm2XYe2CLkWBJZ5Bi2eLsUSqJOVGNfTfhyMlx7HdJWtXYAXyyZLFe3vu7iF5KybRpVaVXhnNhuwFehDgSkzVTKWQWqNBWlMmSgNqb2uY1qBFgWA0+AzBCztHD9pIPLrUjDMv5o4NL9gfaYayynHyUmgxxwK1n4zOTiekcmJKtIJMOjbmbP12KqMLr4zETv4na/TT+pUokHHmMK2s8jUbXqzYUxQW7ajyGdkjvUOLQrJxM+asFFYU6NG6sJZcZkOWGed1VKUo3FL4jHFm8V2lLEo29LZCvoXJeQxRzFF76DRwsOjQLlGCNZVXeg5LkVcIBxOhaw4TkeeHHIyFXEwxB4c5pt5YOFhgPQxLDyNg14kRpUpSI3GOOsFrb0USUVyxpciVFJ5875zkhdI/HvPwZRLhZw1nLs2wECTj65LWO2+VnjPOCqV/Qz0nmI6bhq/B+NdAUCraKiDZI3hZOQ+p0V4oDUbnNYi8zISuCrRUPZmwIqUccKi0ROtSY9FxEFpCVpcZavc5GNw/bKoH79FSFH9diOTDKPmznzyZJONvv2EN1YtFVxrtMFh81O/Tz0ejl+iFyo8YZxQ8ak+rRVnmKg113LtyJLLa9c5MrzD1bAdZk1N5KKOhcwRmxlIrKj3PMTZiNE61uO4Y8qG09OpV9P3KTCdK7gNkZmwhPBuyqlJyx4XzDOHKTOH0Z6gcSvAGSmtSdA58phwQ9Og8GcRrUZQ56T456eMPg34/wUdPpsngWA4S8f3x42QwePz45GQw6Pf7fcqSRVfl3m14JawVNVWfx8LdDdBoDxXtxr5u7z3R39b3S7sSzCzQWGxunwkPFktjPSFAYbeWqNK88JXbpxp1VRAFmQWhLFSOBK9bqLJESQS3i3RU1llfpzMkPdilUILZ+8Wz3Zok2UJ5p+zvYR04byxGbo9eIEgsc1OjhLbMj7qOI2K+p1PdcsDr0qJzVLRwRuSpfTDUQ5/2KLtHshdCUBhYoSFq8miXIr/b1BlaZaRKoROBg8xUNq85SKHo5z3ign4Lo32W14cfc2LVaWhueXOT5aiXPCDFjLOomRgnqmZjQslUNr0HRm8ztBjAjtnL1RLdEC5ZROSScbhsTcbnYDU+RsP0bCxcduYvWYte5dDe7cAbhzHZGxRjK+1AuJButNbcQ80zWgYFOifmCGqzq2JHEKFYJDyXeLu1ms1952Jzj25bbsyZVz4QDpXUM5JjzbZcxzFbq1+gf91SKsk0nA32sftTITuKgwTaLYc6MsT/WVR/m6PuiecINt47ngiykaVMmlbWorzNx893oY4YhlTGbWsvhW0Zl1LRo8jbrc6BmJrK3zix16yskExr9O+NXYBXBZoqkgbt7Bt2qcfmaPduQjFIErhl5KTfp+R1qQ31tpPY493EvtGi8pmx6gNKSGB0dgoLrGFdOQ+J/RoS+91uYp8bO1VSooYETrWrZjOVKuKbEm2hwkbjHrL7VWR38I+nbW1oj660fGDhryGdJ/u213g8aOGgy/LNaeMhq///rDacFegzQ/MZmjfwODAYsh4Nfnqr7szW9LrjfjhM91bhzzC4scs4ixnfTHFoxFPEzG3OctaRZN6XrL3i0/s0LGK8fXje3Wd/fXseTpFKz0wQb+MYhePnzfyJNn/GGTkSITk+6h+F+2lpnC9EqLV2OBIHYTdVug3n6qZm/4uhWQzY47XvlblQ8fxuw8UnIn3BaDXjbLh5Pu6uYjxcF+hr+DLm4RRNUqvVVDh8Y/Omob/fVWjrmIWlsEpMCaiLFZPK0bNkw5nI3fbkZzPYg9ftyekQvvBgbC8o3fhAU0bCajZkjLMF1pvzPRpzfVJMX27G9QnhxFDoOpmhkHSbu1i1n0ZpiqXfENrhTZpqrZv2xbNzxpm43V9b/RS073VotYorzs0CddOs/fP0Tg42zd81HrmU
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -291,6 +291,97 @@ Get a specific cron drop-in entry by name on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-schedule-cron.api.mdx b/docs/docs/gen/api/get-node-schedule-cron.api.mdx
index 36088e6b8..5972d5f04 100644
--- a/docs/docs/gen/api/get-node-schedule-cron.api.mdx
+++ b/docs/docs/gen/api/get-node-schedule-cron.api.mdx
@@ -5,7 +5,7 @@ description: "List all cron drop-in entries on the target node."
sidebar_label: "List all cron entries"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLOdnA6uFUTlsBPahpkrrow0gd5GAZwoo7Etcid5nZpWJV4H8vZpeUJUtFjKI5FMhJpDjPb95b0OgzMlUwzsIYfjU+CFUUIiNnhSZX9YwVaAMZ9MJZEXIUQdESg7BOY39qQUJQSw/jW/gzy1HXBc5+U1YtsUQbZpPrqxkLm7kKSbEaD3cSdm9XGsbwFsPvTmPH/4oci/WY1WTCBsa3W/gRFSFN6pCzJpY4JlQa7po7CZUiVWJA8pHWqhJhDLnzIT5KMOxcpUIOEgg/1oZQwzhQjfIJAjfJObVEG0QnQQpCj7RGLcjVwdilWKuiRnE2U3YjxUwVxbkUjkSh5lgIjwVmwZE4W+FmHEnPE1QPPacq08ucxiXaHj4EUr2E3xbWqjBaBba9M1KWxv5wIeOXWQIeGgk+y7FUzBM2FdP7QMYuQUJp7K9olwzTRcPYEPrKWY9Rw4vhkH9OBN0tUszbWPdBQuZsQBuYQVVVYbIYsMG9Z67tsQ1ufo9ZAAkVcXiDSTrv3Xxm9ClbF45KFWAMdW00HEUiR3Hv5uLqJ1F71CI4UZHL0HsRcuMFQ4Q+sKX4oMqqYNmXl0P8bjQc9vDF9/Pe6EKPeurbi5e90ejly8vL0Wg4HA4ZQEJfF8HvWaWI1IZTJWDpT3l1aN3kuEQ2/SPfdyl4wvtDeT+3lBwILrKUgCFXQRBWjgIjwG63mjgJggq1PyUabV1ymbgVo6xMgQyvX5mqQs3ld4x0EtZp35WnWDhKetmVqPZ5/rzqkmkjmCFytlB+lvePSCd8cISRu7UChcaqcBvUos3NflcM3DaeaVRHLvChIvTeONsX11zgNkRFAwzZgKPb14NdPUwtqzI2IK1V8XlV10jGaZOJjkWc5a6mYiOFVoZ/PiGu+Ld0NuTF5vyfjNh2EpoDax6jnOSyBSwYJCTJ3AySaLhjlFxN2TMw+pAjYQQ7Ra8wa/RjMYWEyBSkmLYq03PUmh6TYn52JKad+im06NUe6fMGvPeYgp09phDV1gvlY7iRyD1DzGsmEyV6r5YozH5VpYrghkLIeK7xsLSa/SFxuz9H2pK7kxBMiA2HU+o180HzlK/rMU+oX7mCp4Nx9l3bmpm1kTAaXhw35/dW1SF3ZP5CLXpicn0lVrgROz3/WZt+JqwTsffetYvIm5qVy7KaCPVhW35zjHiCMkZUY1CmONnJnijX2vCjKkTLI9Tc1eHRiJNqdY2s2mL45GglginR1al38CDe08ultkQ6OYuSk8xwoORyOOTgdRGOaXcU2G+OA/vG0dxojVb0xJX19WJhMsPZWSGVJrYl/zW6/4PoXp7aqVL3KYyPy+IX2qy+BvULBbWRUGLIHd8mvHHLdDuMYcBHz2DbTYRm0C0TcVTHm4XW6Qy5ezxg+K4pU8j2z5idC3kIFbRLPb/PIxHI9uFNtyb/8uEmDidjFy6ytw5M4lR7PLp4SoAENiRhcdEf9uPaWzkfShWTrD2SDi++Nkefgrl9zNh/eyImTwM+hEFVKJP2AYqLVML2FpgaJIz352232sm4fvAo5a9Mvd3Olcf3VDQN//2xRtok2NeKjJozMrdb0Mbzs4bxQhX+6bm379jZu3amnosvfASeBKM7QywvbpEaxgASVrjZv2Ub3uVyVJpXqdtt+3mSZViFPcajtsKn4C6n376+AQnqMAufZF2UftKo7TZR3LgV2qbZ2Rj4nQ1smr8BigGpDQ==
+api: eJztWEtv20YQ/iuLOdkA9XAqpy2BHpQ0SV0krZE6yMEyhBV3JK5F7jKzS8WqwP9ezC4p61XEKJpDgJy4FOf5zWNntAGFLiNdeW0NpPBWOy9kUYiMrBGKbNXTRqDxpNEJa4TPUXhJC/TCWIX9iYEEvFw4SG/hryxHVRc4fSeNXGCJxk/H11dTFja1FZJkNQ7uEti+XSlI4Q36P6zCjv8lWRbrMKtJ+zWktxt4gZKQxrXPWRNLTAmlgrvmLoFKkizRI7lAa2SJkEJunQ/HBDQ7V0mfQwKEn2pNqCD1VGNygMBNdE4u0HjRSUgEoUNaoRJka6/NQqxkUaM4m0qzTsRUFsV5IiyJQs6wEA4LzLwlcbbEdRpIzyNUDz0rK93LrMIFmh4+eJK9iN8GVrLQSnq2vTMyKbX55SIJX6YReGgScFmOpWQev66Y3nnSZgEJlNq8RbNgmC4axobQVdY4DBqeDYf8OBF0O48xb2PdhwQyazwazwyyqgqdhYAN7h1zbY5tsLN7zDwkUBGH1+uo897OplqdsnVuqZQeUqhrreAoEjmKezsTV7+K2qES3oqKbIbOCZ9rJxgidJ4txQdZVgXLvrwc4k+j4bCHz36e9UYXatSTP148741Gz59fXo5Gw+FwyAASurrwbscqSSTXnCoeS3fKq33rxsclsu4f+b5NwRPe78v7raXkQHCRxQT0ufSCsLLkGQF2u9XESeClr90p0WjqksvELhllqQtkeN1SVxUqLr9jpKOwTvu2PMXcUtTLrgS1T/PnZZdMa8EMgbOF8ou8fwY64bwlDNytFSgUVoVdoxJtbva7YuC28USjOnKBDxWhc9qavrjmAjc+KBqgzwYc3b4abOthYliVNh5pJYsvq7pG0lbpTHQs4iy3NRXrRCip+fEZccnP0hqfF+vzfzNi00lo9qx5jHKUyxawYEggSuZmEEXDHaNka8qegNHHHAkD2DF6hV6hS8UEIiITSMSkVRnPQWs8RsV8tiQmnfoJtOjVDunLBnxwGIOdPaYQ1cYJ6UK4kcg+QcwrJhMlOicXKPRuVcWK4IZCyHiucL+0mt1L4nb3HmlL7i4Br31oOJxSr5gPmkO+rsccUL+0Bd8O2pr3bWtm1iaB0anm/EKqrtOJnmhvCC7MAMP/2KafCOtY7Lx37SLwxmZls6wmQrXfll8fIx6hDBFV6KUuTnayA+VKaT7KQrQ8Qs5s7R+NOKlW1ciqDfrPlpbC6xJtHXsHX8Q7ernUFkgn76LoJDPsKbkcDjl4XYRD2h0F9uI4sB+MrH1uSf+NSvTE+PpKLHEttgn0PbDfQmB/OA7sa0szrRQa0RNXxtXzuc40t50KqdThvnHfo/sNRPfyVD+O10qhXdgCvtLI/D2oXymoTQIl+tzy0smrVBKXwhQGvM0ONt1V3wy6KTHMYGEZpVXcL+8eN1NeWMsYst39dOtC7n0F7bbG77NABEl7eN3tP79/vAlThzZzG9hbB8ZhXHncpvmWgATYkIjFRX/YD/tMZZ0vZUiydvvdX+XbHD0Ec/OYsf9194+eenzwg6qQOg56FCbkiO0tMDUkkO4OUt3MnoS5kmck/srUm81MOvxARdPwz59qpHWEfSVJyxkjc7sBpR2fFaRzWbjDPX7XsbP37Z16Lr7ydn8SjG6/NDyRB2pIARJY4nr3T4qGh/QcpeIZ+XbTfh5nGVZ+h/GorfCOv83pN69uIAG5n4UHWReknzRqs4kUN3aJpmm2Nnp+ZwOb5h+8/k3L
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -286,6 +286,97 @@ List all cron drop-in entries on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-service-by-name.api.mdx b/docs/docs/gen/api/get-node-service-by-name.api.mdx
index 1580c96d4..af984fe72 100644
--- a/docs/docs/gen/api/get-node-service-by-name.api.mdx
+++ b/docs/docs/gen/api/get-node-service-by-name.api.mdx
@@ -5,7 +5,7 @@ description: "Get detailed information about a specific service on the target no
sidebar_label: "Get service details"
hide_title: true
hide_table_of_contents: true
-api: eJztWEuP2zYQ/isETxuA9sqJN20N9OAgj7pogiDZIIetYdDiWOJaIhVytFnX0H8vhpS9suUmmzQBWiAnW9JwHt+8ueUKfOp0hdoaPuEvAJkClLoAxbRZWVdK+sTk0tbIJPMVpHqlU+bB3egUmDUMc2AoXQbIjFUw/NNwwVFmnk+u+NtIt3gpjcygBIOL6evZoj2+sBW4IMHzueD7p5mKyryyCloOTzavZAlccA9p7TRu+ORqy5+AdOCmNeYkrOU6cSAVnzdzwSvpZAkIzgdyQywmPLceTeSmyexKYs4Fd/Ch1g4Un6CrQRxhcxlNlBkYZDsOgjkgqaCYszVqk7EbWdTAzhbSbARbyKJ4IJh1rJBLKJiHAlK0jp2tYTMJpA8iYLcDKys9SK2CDMwAbtHJQURxy29koZVE0n2npCi1+XUkwpdFhJ83gvs0h1LSGdxURO/RaZNxwUtt/gCTEVKjphF7ML4YiNYhrDYaGZ1mZzDMhoKZTJtbwbzP1b8y6kvsmJO2vrLGQ2D6MEno57TGMbSHXPDUGgSDRCqrqtBpCLvza0/02750u7yGFLnglaMgRR2lXdvlQqtTWsbU4RNe11rxXizlwK7tks2estqDYmhZ5WwK3jPMtWeEB3gkTeFWllVBvC8uEvh5nCQDePjLcjAeqfFA/jR6PBiPHz++uBiPkyRJCDoHvi7Qd7SSzskN+Rih9KesOg0XhXtkxlbWUfZrkxUQU2DYA2OfVSfgOBTwW0vJ7CpUj5hTmEuSV1mHBAnhAAbdZhjiASXW/hRrMHVJyW/XBHsoXVQl1rqqQFFV6UMfme2k76tOsDLIJVOi2AjF5zGbnSqWG49Qql2t7CN2P7R6+XYYFiHrPg3RIb9pivrmGISOjnesZaAk3mDkkoC9Y760tgBpetzf54A5uC5TFjwZGFCke5QOqXEsrY0oH3C4Lxydt2zlbBkkBoxWujgyZMpyneWsAhe8ZFJgH2EZ9ANHGlQHWawNQgauJ/ql1GafqLOnn8Ju9PDRuGkER41Bg1ZrCpOAp3PWfd7WZ0TGSvBeZsB0N1tipA9503Tr9VW3t7UBMe9p8QLwGWUWb45P72rHyTNv2kJLxxrBx8moX2rfGVljbp3+CxQbsOnrGVvDhu1lfLPSe08Epwdx0josnI31xqZp7RwB2Y2X53ECQsscoNOwT5c2XKmN3CfTlNL0VxZt6/FtbdgrcVKsqoFEG8CP1q0Z6hJsHTOFOuk9AvVybyQdOBBykSTduAwR1nPso75jn1u31EqBYQM2M75erXSqKRArcKX2PsxwP7z7f/Du+J8nJGOp19dGfcMh6Ycvv5svL05Nu7FpZIBhHek0px/+/G/7sxG8BMwtLb+0zom4j034Oe3V59tda2/OW6eeb8Mjj3NqXHLndxvyW3Jo9Fl3T97bkCNWvF21wkgXiLho/zzfrTC/v78MYwZdCITjrQXTMIjcbfbU7bngpEgEYzRMhmElqazHUpq7mTfcNPiDtcwfY7m9C9hveTERbUe4xfOqkNqQfrUrSF6E+4oTNRd80p2l2kVA8El4Mxdh0iLq7XYpPbxzRdPQ6w81uE10xI10msbecPegtG9n6JUs/PFW3TX27E07LT1g3/nS4SQYu6XR0MoYqPmEc8HXsOnendAVwlfZ9AX3B1+hX9Rt3gieg1TgAvbx0zRNocLOoV4VpOuEfQq+eHbJBZeHOXOUI4H7SYW220hxaddgmmavH9IzKdg0fwO5UL7a
+api: eJztWN1v2zYQ/1cIPiUA7dit020G9uCgH/OwFkWbog+ZYdDiWWIskSp5SuMZ+t+HI2VHtrw26TpgBfJkSzrex+8+eHcbrsAnTpeoreFj/gqQKUCpc1BMm6V1haRPTC5shUwyX0KilzphHtyNToBZwzADhtKlgMxYBf0/DRccZer5+Iq/j3Tz19LIFAowOJ+8nc6b43NbggsSPJ8JvnuaqqjMG6ug4XCxfiML4IJ7SCqncc3HVxt+AdKBm1SYkbCG69iBVHxWzwQvpZMFIDgfyA2xGPPMejSRmyazS4kZF9zBp0o7UHyMrgJxgM1lNFGmYJBtOQjmgKSCYs5WqE3KbmReATuZS7MWbC7z/FQw61guF5AzDzkkaB07WcF6HEhPI2C3PStL3UusghRMD27RyV5EccNvZK6VRNJ9q6QotPl1KMKXeYSf14L7JINC0hlcl0Tv0WmTcsELbf4AkxJSw7oWOzAeDETjEFYZjYxOsxPop33BTKrNrWDeZ+pfGfUQO2akrS+t8RCYPhkM6Oe4xjG0+1zwxBoEg0QqyzLXSQi7s2tP9JuudLu4hgS54KWjIEUdpV3bxVyrY1rG1OFjXlVa8U4sZcCu7YJNn7PKg2JoWelsAt4zzLRnhAd4JE3hVhZlTrzPzwfw82gw6MGTXxa90VCNevKn4bPeaPTs2fn5aDQYDAYEnQNf5ehbWknn5Jp8jFD4Y1Ydh4vCPTJjS+so+7VJc4gp0O+AscuqI3DsC/itoWR2GapHzCnMJMkrrUOChHAAg27dD/GAEit/jDWYqqDktyuCPZQuqhIrXZagqKp0oY/MttJ3VSdYGeSSKVFshOLrmE2PFcu1RyjUtlZ2EbsfWp182w+LkHVfhmif3yRBfXMIQkvHO9YyUBJvMHJBwN4xX1ibgzQd7h8zwAxcmykLngwMKNI9Sod0cSysjSjvcbgvHK23bOlsESQGjJY6PzBkwjKdZqwEF7xkEmCfYRH0A0calHtZrA1CCq4j+rXUZpeo0+dfwm745OmorgVHjUGDRmsKk4Cnc9Z93dYXRMYK8F6mwHQ7W2Kk93ldt+v1VftuawJi1tHiFeALyixeH57e1o6jZ941hZaO1YKPjpXaC6m21Yv1WFPiyUXB4u9Yeu+J4GQvThqHhbOx3tgkqZwjINvx8jJ2QGiZA3QadunShCtdI/fJNKU0/ZV5c/X4pjbslDgqVlVAog3gZ+tWDHUBtoqZQjfpPQL1cmckHdgTcj4YtOMyRFjHscOuYz8YWWFmnf4LFOuxydspW8Ga7YLn0bE/gmOfdh370rqFVgoM67Gp8dVyqRNNFaYEV2jvQ3P+6N0fwbujf259jaUmrjLqsQT/CL48P3a3xm4gBQxzZqvrePTn/9ufteAFYGZpq0FzuoiD9pif0cLkbLPt2eqzxqlnm/DI4wAStxezu9XHe3Jo9Fl7AbKzIUMseTNDh149EHHR/Hm5nU1//3gZ+kfa9ITjjQWT0GHerWzotueCkyIRjGF/0A+zZmk9FtLcDTNhheT35m1/iOXmLmC/58Yp2o5wi2dlLrUh/SqXk7wI9xUnai74uN0kNxOe4OPwZiZCC03Um81Cevjg8rqm158qcOvoiBvpNM0zYamktG+Go6XM/eG6pG3sybumWzpl//E26SgY222AoV1AoOZjzgVfwbq9FKPd0DfZ9IDF0DfoF3Wb1YJnIBW4gH38NEkSKLF1qFMFaU+0S8FXLy654HI/Zw5yJHA/qtBmEyku7QpMXe/0Q3omBev6bxCUY5g=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -320,6 +320,97 @@ Get detailed information about a specific service on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-service.api.mdx b/docs/docs/gen/api/get-node-service.api.mdx
index 264dd84a7..58a71531c 100644
--- a/docs/docs/gen/api/get-node-service.api.mdx
+++ b/docs/docs/gen/api/get-node-service.api.mdx
@@ -5,7 +5,7 @@ description: "List all systemd services on the target node."
sidebar_label: "List all services"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLOcXASqYcOW0F9KAij6pIiiBxkIMrCCtyRK5F7jK7Q8eqwP9ezJKiKVNIjaAGesjJsjTPb77ZmdlDgj52uiRtDczgrfYkVJ4Lv/OERSI8ulsdoxfWCMpQkHIpkjA2wfFfBiSQSj3MruFjI7h6p4xKsUBDq/n7xarVX9kSnWInHpYSuv8WCczgDdKfNsHWAkjwGFdO0w5m13v4DZVDN68oYzetvZlDlcCyXkoolVMFEjofxI0qEGaQWU/howTNiZWKMpDg8EulHSYwI1ehfJD9VZOcStGQOFiQwiF7xUQ4W5E2qbhVeYXi2UqZnRQrlednUlgncrXGXHjMMSbrxLMt7mZB9KyB6m5kValHsU0wRTPCO3Jq1OC3h1uV60QRx34IUhba/DqR4ZdVAzzUEnycYaFYh3Yly3ty2qQgodDmLZqUkZrUjI1DX1rjMXi4iCL+c6LgdtPVeQwSYmsIDbGwKstcx6FU5zeeNfZD/3Z9gzGBhNJxYUk3/m7seqWTU3FurCsUwQyqSicwqEKG4sauxeKlqDwmgqwonY3Re0GZ9oLhQU8cKd6poszZ9uVlhD9Po2iEF7+sR9NJMh2pnyYvRtPpixeXl9NpFEURg+fQVzn5XlTKObVjmhAW/lRWx9G1LBU5A9dYExvrhBJemzTHhj3jARodIU/gcezh91aSy8It19CRMsX+SuuIMWEg0JDbjQMlSFHlT5lGUxXcN3bLuCudIwPut7osMeFWHGLfGDt471o1ZBn8ciqN25Y034/mwjRcYPtqbStiHI+fniGUj4PxUKjKaBKsckwYk2pz923sju3NY9K3D9HpxXhvWgVJto1GrRnxe+Nra3NUZmD9c4aUoesbFaHEwQD3gCfliJ/htbUN/EcWHgtH71uxcbYIHgNGG50/SGQuMp1mokQXqmRiFF9xHeJDxxGUR/2tDWGKbuD6ndKma+HFy29hN7l4Pq1rCaQpRNBGzTQZZDx4u5oZ1ScoOmfdv2PzisVEgd6rFIXut13TMmOo6/7wuO7Pl5ZAy0HUHN8r7lGoH6ofnqHTSh/aZ5v1agnTaDJ8uD8ZVVFmnf4bEzES8/cLscWd6Jz8Z8/4IzGcHzGrLXHQbZ4uG8eVcwxln2GvA7xMb4fkNHYN1hKclM4f05tJovmjykWr074mXRAn3SYVsmuD9NW6rSBdoK0a5vCQfgS1r7okWeHIyWUU9ZkcODYo7PNhYV9bt9ZJgkaMxML4arPRsWYqlugK7X3YoX5U9/9f3ctT+1bz1PDywIvkE2xdPwr6RAWtJRRImeWLhTdx2dwUMzjnY+h8f5gI9bnvHTI8KfkwWd5fNR+5kk2x+rdNF3xGVEK75oeVIQiBbD+8PizPf3y+CmNJ83Bk9Tb0eRhc93cYzwaQwIE0KEzG0Tgsw6X1VChzv1P17r/DajdYMzqefs+x2GRIeEfnZa604Sgql7PdBs1rYGmQMOtP2BbQpQxzl6X2+7Xy+Mnldc1ff6nQ7RqYb5XTvDSFazDRvt3ANir3Dw++fjLPPrST80w88Rl4EoTD+mx4eQ7SMAOQsMVd/5qtl7WEDFWCLuTX/DyPYyyppzh4QPgY7Nj75tUVSFDHrHvAsmD9ZFD7fSNxZbdo6rqLkfh/DrCu/wG8pqnc
+api: eJztWG1v2zYQ/ivEfWoB2rFTp9sM7IOLvsxDOxRtin7IDIOWzhZjiVTJUxrP0H8fjpQVOTK6oFiBDcgny/LxXp577njnPaToE6dL0tbAFN5qT0LlufA7T1ikwqO70Ql6YY2gDAUpt0ESxqY4/NOABFIbD9Mr+BgFl++UURss0NBy9n6+bM4vbYlOsREPCwntt3kKU3iD9IdNsdEAEjwmldO0g+nVHl6gcuhmFWVsptE3dahSWNQLCaVyqkBC54O4UQXCFDLrKTxK0BxYqSgDCQ6/VNphClNyFcp70V/G4NQGDYmDBikcslVMhbMVabMRNyqvUDxZKrOTYqny/KkU1olcrTAXHnNMyDrxZIu7aRB9GqG6HVhV6kFiU9ygGeAtOTWI+O3hRuU6VcS+H5yUhTa/jmX4ZRmBh1qCTzIsFJ+hXcnynpw2G5BQaPMWzYaRGteMjUNfWuMxWDgfjfjjRMLtus3zECQk1hAaYmFVlrlOQqrOrj2f2Pft29U1JgQSSseJJR3tXdvVUqen/FxbVyiCKVSVTqGXhQzFtV2J+UtReUwFWVE6m6D3gjLtBcODnthTvFVFmbPui4sR/jwZjQZ4/stqMBmnk4H6afx8MJk8f35xMZmMRqMRg+fQVzn5jlfKObVjmhAW/lRUx941LBU5Axe1ibV1QgmvzSbHyJ5hD42WkCfwOLbwWyPJaeGSi3SkTLG90jpiTBgINOR2w0AJUlT5U6rRVAXXjd0y7krnyID7rS5LTLkU+9hHZQfrbamGKINdDiWabUjz/WjOTeQC61crWxHjeNx6+lA+DMZDoiqjSfCRY8KYjTa338buWN8sIX1zH52Oj3eqVZBk3WjUihG/U76yNkdleto/Z0gZuq5SEVIcFHANeFKOuA2vrI3wH2l4KBydt2LtbBEsBozWOr8XyExkepOJEl3IkklQfMVV8A8de1Ae1bc2hBt0PdPvlDZtCc9ffgu78fmzSV1LIE3Bg8Zrpkkv4l7vindUl6DonHX/jM0rFhMFeq82KHS37GLJDKGuu5fHVfd+aQi06HnN/r3iGoX6/vFDGzp96EPTtvlcLWFyqnG/UOmhE4qBaG4PTmqI+V9s4w/EcHbErCbF4WxsXTZJKucYyi7DXgd4md4OyWlsC6whOCmdP6Q201Tzo8pFc6bpJq0TJ82mFbJpg/TVuq0gXaCtInP4kn4AtS/bIPnAkZGL0ajL5MCxXmLH/cR+MqqizDr9F6ZiIGbv52KLO9Gy5zGx/4fEPusn9rV1K52maMRAzI2v1mudaO4xJbpCex+G48fs/veze3GqH8c7hKdC3hB+wDj9mNAflNBaQoGUWV5FecWScVmcwhlvuWf7w1Vfn/nOhsojEG+ci7t19SNnMiaru7S2zmdEJTT7W5gFgxDI5uH1YSv6/fNlmDc0Tz18vHF9FiaSuwWb7waQwI5EFMbD0TBsOaX1VChzNyx3FvvDzN6bH1uefs+/ADFCwls6K3OlDXtRuZz1RjSvgKVBwrQ7OjWALmQYqFhqv18pj59cXtf8+kuFbhdhvlFO8zQc1vxU+2a0Xqvc39/ku8E8+dDcnE/FD97vT4Jw2IsMb0VBGqYAEra46/5NUS9qCRmqFF2IL/48SxIsqXOw10B4y2/Z++bVJUhQx6y7x7Kg/aRT+32UuLRbNHXd+kj8nR2s678BqY5Omg==
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -327,6 +327,97 @@ List all systemd services on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-sysctl-by-key.api.mdx b/docs/docs/gen/api/get-node-sysctl-by-key.api.mdx
index 0ed1cc09d..31e64d9c9 100644
--- a/docs/docs/gen/api/get-node-sysctl-by-key.api.mdx
+++ b/docs/docs/gen/api/get-node-sysctl-by-key.api.mdx
@@ -5,7 +5,7 @@ description: "Get a specific managed sysctl entry by key on the target node."
sidebar_label: "Get a sysctl entry"
hide_title: true
hide_table_of_contents: true
-api: eJztV9tuGzcQ/RVi0AcbpeR1KqeNgD4oaZK6NwSJgz64qkAtRxKtXXJDzipWhP33YsiVrBtgI26LFsiLtCtxbufMDGdWoDHk3lRknIU+vEYSSoQKczMxuSiVVVPUIixDToVAS34pxksxx6VwVtAMBSk/RRLWaez+YUECqWmA/jW8izKjX6OKEi2NBm8uR0nTyFXoFdsMMJSwebvUyYffnMYk/3z5My5BQsC89oaW0L9ewXNUHv2gphkbSir7HpWGYTOUUCmvSiT0IZ62qkTow8wFio8SDIdaKZqBBI8fauNRQ598jXIPj6sUnZqiJbHWIIXHgH6BWnhXk7FTsVBFjeJkpOxSipEqilMpnBeFGmMhAhaYk/PiZI7Lfjx6mrC67ThVmU7uNE7RdvCWvOokAFewUIXRitj3tZOyNPb7cxn/GSXkoZEQ8hmWimVoWfH5QN7YKUgojf0F7ZSBOm8auQFjHkF9OA6JDLFBNmbACXanXSksUtdUi17XVKOJ8x+V148K7+ERMdVE6NnDP69V51PWedYddYZffwUNJ4LHUDkbMNp7kmX8dTSulNgaSZmiCxJyZwkt8XlVVYXJY3ae3QQWWh1658Y3mBPso/bCFcy8cVasXRET57nCjJ0WuFtXnGibSmAvKs+vZJL/N248MvoYJBPnS0XQh7o2+sCJqxmKGzcWlz+IOqAW5ETlXY4hCJqZIBh8DMQG8VaVVcG6Ly4y/K6XZR188mzc6Z3rXkd9e/600+s9fXpx0etlWZYxTx5DXVDY8kp5r2JuEZbhfogGR3vMYfSb6j0S/67GH9uTwk1ig0q1SzNFwmPlPDEGHHhribONFNXhmGq0dck9xs0ZZ2UKZIDD3FQVam5dh1gnZWvrG0Ij8dEuhxLNchHeG86xyovSsY/cL/+i9p4BSB2q9SrsKY0K0Xvn71f4ko+JEkNQUxRmG+QEEGeYR/IGF7iLdLPdZq63O3LLwFACGYoZmOJ+yZLQ7Euu0+7g/Gukt22lsVQjoZedH5b9e6tqmjlvPqEWHTF4cxkb2sbEIzrAbto+ENOB2HpfkxRlU+K6PGca9W6RvjqEO+EY6Uzd7GhW7xnX2vCjKtoOGIQau5runDhqVtfIpi3SR+fngkyJrk6JzQ1/y66xhFP0RztTCpIFdoxcZBmTtyY35twBsd8cEvvK+bHRGq3oiEsb6snE5IZTs0JfmhDixPGF3f8Du717bmvrSExcbfWjLuwvhP5LhF4cG7/SXdLCwXP0/hDwhdf/Nq+NhBJp5nhv42VEpnWiD2e8EJ6t1ld8c5aYPVvNcdnEfc4v0oI2vFvu3jGdibHtFW8TwYyognY54PdxPASyfXi1noN/+v0qDhvGTlwUb/0fxCnlbiPlix8ksCMJivNu1o1zbeUClSrmWLsxtZvxVn7uA7m6y9a/ZY9OMRPe0llVKGPZr9oXbCiBfA18GiT0tyepaIJ/5PFyKOOUxWdXq7EK+N4XTcM/f6jRLxP8C+WNGjNC1yvQJvCzhv5EFWF/EdyO8eRtOy6din94TT4KxXrfsExEOwwDtFP13WzJS+9nxfR5K+9nuMqfzbCRMEOl0UcW0j+DPMeKtmQOeiBvuZsCfP3yCiSo3ZrZq5Go/ag/q1U6ceXmaJtm4x7xOzvYNH8BA0tMJw==
+api: eJztWNtuGzcQ/RVi0Acb5cpyKqeNgD4oaZK6NwSJgz64qkAtRxKtXXJDzipWhP33YsiVrBvgwGmBBvCLvSvN9ZyZEYcr0BhybyoyzkIfXiMJJUKFuZmYXJTKqilqEZYhp0KgJb8U46WY41I4K2iGgpSfIgnrNHb+siCB1DRA/xreRZ3R79FEiZZGgzeXo2Rp5Cr0in0GGErYvF3qFMMfTmPSf778FZcgIWBee0NL6F+v4Dkqj35Q04wdJZN9j0rDsBlKqJRXJRL6EKWtKhH6MHOB4qMEw6lWimYgweOH2njU0Cdfo9zD4yplp6ZoSawtSOExoF+gFt7VZOxULFRRozgZKbuUYqSK4lQK50WhxliIgAXm5Lw4meOyH0VPE1a3mVOVyXKncYo2w1vyKksArmChCqMVcezrIGVp7I/nMn4zSshDIyHkMywV69CyYvlA3tgpSCiN/Q3tlIE6bxq5AWMeQf18HBIZYoNsrIAT7Ew7UlikjqkWvY6pRhPnPyqvvyi9z8+IqSZCzxH+fa2yT93sWWeUDb/9BhouBI+hcjZg9Pek2+V/R/NKha2RlCk6ICF3ltASy6uqKkweq/PsJrDS6jA6N77BnGAftReuYOaNs2Idipg4zx1m7LTA3b7iQtt0AkdReX4lk+K/ceOR0ccgmThfKoI+1LXRB0FczVDcuLG4/EnUAbUgJyrvcgxB0MwEweBjIHaIt6qsCrZ9cdHFH3rdboZPno2z3rnuZer786dZr/f06cVFr9ftdrvMk8dQFxS2olLeq1hbhGW4H6LB0RlzmP2me4/kv2vx51ZSuEkcUKl3aaZIeKycJ8aAE289cbWRojocM422LnnGuDnjrEyBDHCYm6pCzaPrEOtkbO19Q2gkPvrlVKJbbsJ70znWeVE7zpH79V/U3jMAaUK1UYU9o9Egeu/8/QZfspgoMQQ1RWG2QU4AcYV5JG9wgbtIN9tj5np7IrcMDCWQoViBKe+XrAnNvua67A7kXyO9bTuNtRoJvWNt/1zpdd2LTLSTiEmKGHzRBNgt28/EdCC23tckRd1UuC7PmUa926SvDuFOOEY60zQ7WtV7zrU2/KiKdgIGocauprsgjrrVNbJri/TR+bkgU6KrU2HzwN/yayzhFP3RyZSSZIUdJxfdLpO3JjfW3AGx54fEvreqppnz5hNqkYnBm8v4S7WpnUdivwZivzsk9pXzY6M1WpGJSxvqycTkhmdOhb40IcSj5CO7XwO7vXuOYdaRmLja6sc5/DUQenHsBzYdElo4eEHaP9098vr/5rWRUCLNHC/kvGXKtCf24Yw3/bPV+uzWnCVmz1ZzXDZxUfeLtHkP77b2d0xnYmx7d99kMCOqoN36+H0chUC2D6/WC84vf17FU6SxExfV2/gH8fh5d9XAP/wggQNJUJx3up24sFQuUKlijbWrcHvlsVWf+0Cu7qr1X7kgSTkT3tJZVShjOa7aF+wogXwNLA0S+ttH5OiCP+S9YSjj8ZllV6uxCvjeF03DH3+o0S8T/AvljRozQtcr0Cbws4b+RBVhf8PfzvHkbXtcOhX/8f3HUSjWi6RlItotB6Bdl+6WBr7NeFBOD7vLeECo/LcZNhJmqDT6yEL6ZpDnWNGWzsEM5OuLTQO+fnkFEtRuz+z1SLR+NJ7VKklcuTnaptmER/zOATbNP9Eb8NY=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Get a specific managed sysctl entry by key on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-sysctl.api.mdx b/docs/docs/gen/api/get-node-sysctl.api.mdx
index 4eb32db3d..7e5b51c4c 100644
--- a/docs/docs/gen/api/get-node-sysctl.api.mdx
+++ b/docs/docs/gen/api/get-node-sysctl.api.mdx
@@ -5,7 +5,7 @@ description: "List all managed sysctl entries on the target node."
sidebar_label: "List all managed sysctl entries"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv4zYQ/ivEnBKATuStnbYGenC3yTbFtljsZtFDahi0OLYZS6SWHLlxDf33Ykj5bSBF0QA97MmSNc/vm+EM16Ax5N5UZJyFAbw3gYQqClEqq2aoRViFnAqBlrzBIJwVNEdBys+QhHUar/6wIIHULMDgET5F8fGvUbtES+Phh/txMjJ2FXrFjgKMJGzf7jUM4B3Sb05j0gcJAfPaG1rB4HENP6Ly6Ic1zdlHsjbwqDSMmpGESnlVIqEPUdqqEmEAcxcoPkownFqlaA4SPH6pjUcNA/I1yqP8H1JiaoaWxMaCFB4D+iVq4V1Nxs7EUhU1iouxsispxqooLqVwXhRqgoUIWGBOzouLBa4GUfQywfTccaoyndxpnKHt4DN51UnYrWGpCqMVceybIGVp7A9dGb+ME+jQSAj5HEvFOrSqWD6QN3YGEkpj36OdMVDdhrHxGCpnA0YPb7KMf85Q7qZHTF+BhNxZQkusoqqqMHmk6/opsN76NAo3ecKcQELlmVwyyeuTm4yNPhft1PlSEQygro2GEy7mKJ7cRNz/JOqAWpATlXc5hiBoboJgkDAQR4rPqqwKtt3vZ/hdL8s6+Ob7SafX1b2O+rZ70+n1bm76/V4vy7KMIfQY6oLCXlTKe7XiYiEsw7msDqMbnmuR1dVJ9tsyPJP/ocWfW0kmg5ssFSHNFQmPlfPEGHDirScuBFJUh3Om0dYlN4tbMM7KFMgAh4WpKtTcfqdYJ2Mb79v2FFPnk19OJbpd4OrldFIri21zigWmoGNDvKz/tvaeAUit1kYVjoxGg+i98y8bvGUxUWIIaobC7IOcAOIK88jlv8RDpJv9c+Nx/2hpGRhJIEOxAlPet6wJzbHmpuxO5N+6gg8N4+zHtmNZuZHQy7qnPfvZqprmzpu/UIuOGH64Z3TF1tN/1rv/ENqh2HvfcBV1U/26PGc29WGv3p2inuCMrGokZYqzxX3kXGvDj6oQrY5QE1fTLoizbnWN7Noi/en8QpAp0dWpvvl83vNrLOEM/dkDKiXJCgdO+lnG5G04jqV3Quw3p8TeOT8xWqMVHXFvQz2dmtxwhVboSxNCHJ5f2f3/s9s/N2rTCVSYEHeIVxu4X2l9JVobCSXS3PHCyquYTEvlAK55E75eb+ZCcx12e6xfpsV0tFtqPzGRiav91XYb+5yognbN4/dJFALZPtxt1qZffn+Is8nYqYvqbeTDONR2SzgPCJDAgSQQulfZVVyDKheoVLG62rX5hRvAMZ7rXdH++8tDyprwma6rQhnLkdW+YOsJ4EdgaZAw2B+9CeORjPOYhdbriQr42RdNw39/qdGvEvJL5Y2aMDiPa9Am8LOGwVQV4fgOsJ/Rxcd2ol6KV74ZnMVgs5la3kvbtQmg3b92W0gzaiTMUWn0Mb/0eZjnWNGe4smRwveDbT2/u30ACeqwEI8KL1o/G9R6nSQe3AJt02xjJH7nAJvmbybhAVk=
+api: eJztV9tu4zYQ/RVinhKATuytk7YG+uDdJtsU22Kxm0UfUsOgxbHNWCK15MiNa+jfiyHlu4AURQO0QJ4ixXM9Z2Y0swaNIfOmJOMsDOCDCSRUnotCWTVDLcIqZJQLtOQNBuGsoDkKUn6GJKzTePG7BQmkZgEGD/A5io9/idoFWhoPP96Nk5GxK9ErdhRgJGH7dqdhAO+RfnUakz5ICJhV3tAKBg9reIvKox9WNGcfydrAo9IwqkcSSuVVgYQ+RGmrCoQBzF2g+CjBcGqlojlI8Pi1Mh41DMhXKI/yv0+JqRlaEhsLUngM6JeohXcVGTsTS5VXKM7Gyq6kGKs8P5fCeZGrCeYiYI4ZOS/OFrgaRNHzBNNTx6nSdDKncYa2g0/kVSdht4alyo1WxLFvgpSFsT/0ZPxlnECHWkLI5lgo1qFVyfKBvLEzkFAY+wHtjIHq1YyNx1A6GzB6eNPt8p8Wyt30iOkLkJA5S2iJVVRZ5iaLdF0+BtZbn0bhJo+YEUgoPZNLJnl9dJOx0W3RTp0vFMEAqspoOOFijuLRTcTdj6IKqAU5UXqXYQiC5iYIBgkDcaT4pIoyZ9tXV138rt/tdvDN95NOv6f7HfVt77rT719fX131+91ut8sQegxVTmEvKuW9WnGxEBahLavD6IZtLbK6OMl+W4Yt+R9a/KmRZDK4yVIR0lyR8Fg6T4wBJ9544kIgRVVoM422KrhZ3IJxViZHBjgsTFmi5vY7xToZ23jftqeYOp/8cirR7QJXz6eTWllsm1MsMAUdG+J5/XeV9wxAarUmqnBkNBpE751/3uANi4kCQ1AzFGYf5AQQV5hHLv8lHiJd78+Nh/3R0jAwkkCGYgWmvG9YE+pjzU3Znci/czkPDePsp6ZjWbmW0G/r2bdKb8pfdEQzOJirCMW/2Lt/E9qh2HvfcBV1U/26LGM29WGv3p6inuCMrGokZfLW4j5yrrXhR5WLRkeoiatoF0SrW10hu7ZIfzi/EGQKdFWqb57Pe36NJZyhbx1QKUlWOHBy1e0yeRuOY+mdENs7JfaLVRXNnTd/ohYdMfx4x20jtiX0Suz/gdhvTom9dX5itEYrOuLOhmo6NZnh0VOiL0wIcSt6Zfe/z+5V2zxOn5bchLgcvtgm9UrrC9FaSyiQ5o4vEd6xZboWBnDJJ87levPBry/D7kDxy3RxjHbXymcmMnG1f7NsY58TldDs7/w+iUIgm4fbzT7882/3cekwduqiehP5MG4ru+uKPxAggQNJIPQuuhdxvy1doELF6mruoWdOu2M817ui/edXYcqa8Ikuy1wZy5FVPmfrCeAHYGmQMNjfqRLGIxkXLRZarycq4Bef1zX/+2uFfpWQXypv1ITBeViDNoGfNQymKg/Hx91+Rmefmi/quXjhk68Vg83JYfngaPZhgGax3q2X9aiWMEel0cf80s/DLMOS9hRPRgofftt6fn9zDxLUYSEeFV603hrUep0k7t0CbV1vYyR+5wDr+i9E7KYI
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -250,6 +250,97 @@ List all managed sysctl entries on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-timezone.api.mdx b/docs/docs/gen/api/get-node-timezone.api.mdx
index 7c297ea40..467f78a94 100644
--- a/docs/docs/gen/api/get-node-timezone.api.mdx
+++ b/docs/docs/gen/api/get-node-timezone.api.mdx
@@ -5,7 +5,7 @@ description: "Get the current system timezone on the target node."
sidebar_label: "Get system timezone"
hide_title: true
hide_table_of_contents: true
-api: eJztV9+P2kYQ/ldW83QnLZxJIW0t9YFe79KrmipKOfXhDqHFHmAPe9fZHdMjyP97NbsYOKBKVCVSH/KEjefnN7Mz324gR585XZG2BlJ4gyRogSKrnUNDwq89YSlIl/jRGhTWhM+k3BxJGJtj99GABFJzD+kDjLaCk7fKqDmWaGgyfHc3aQ1MbIVOsTMPYwm7t7s8Ov/D5tjaAAkes9ppWkP6sIGfUTl0w5oW7Km1mDpUOYybsYRKOVUiofNB3qgSIYWF9RQeJWhOsVK0AAkOP9TaYQ4puRrlEQ6jmKCaMwitBSkcenQrzIWzNWkzFytV1CguJsqspZiooriUwjpRqCkWwmOBGVknLpa4ToPoZYTruWNVpTuZzXGOpoPP5FQnYriBlSp0rohjb4OUpTY/9WT4MongQyPBZwssFevQumJ5T06bOUgotfkdzZyh6jWMjUNfWeMxeHiVJPxzlHJbY0+Kat8FCZk1hIZYVlVVobNQq6snzwqbU/d2+oQZgYTKcWVJR3dPdjrR+bkwZ9aViiCFutY5nBRhgeLJTsXdL6L2mAuyonI2Q+8FLbQXjA564kjxWZVVwbYHgwR/6CdJB1/9OO30e3m/o77vve70+69fDwb9fpIkCWPn0NcF+YOolHNqzV1CWPpzWf0LXtrENLQ1YmadUMJrMy8w9E33BI1dP57B46WHX7eSws7CqYvdSAtFwmFlHTEmDAQacutu6IhQu3Om0dQlnxu7ZNyVLpAB90tdVZjzWTzFPhprve/Oakgy+I0JNnJ3GD+d0/V2sOwmCicYbNSUTexs5pE+38r96FpEHXGB3XlXikfoJIM0SR7hMlhF56z7tMEbFhMleq/mKPQh3hGrLjTN4dB4OJwrW9THDASFLmyb44YrA82xbtt8ZzSubcFTQ1vzfntkWb2R0E96p4f23qiaFtbpj5iLjhi+uxNLXIudry92hj8Tx6E4eG87J+jGvrVZ2Cz5yzN7GyDm8+2QnMbVfgg17IGULs429ZHzPNf8qAqx1RFqamvaB3HWbV4juzZIf1u3DJ1p69jXPKAP/GpDOEd3dlDFJFnhhZNBkjTNvsqhz04K+91pYW+tm+o8RyM64s74ejbTmeZ2rNCV2vuwQb9V9/9f3cG5XRvHzRYO5hHtOPyCW/dbTb9STRsJJdLCMmVlIiYjpUzhivnw1aZdDM0VHTJZt4rEdLyntX9yKWO1DsntLvoFUQVbmsfv0yAEcvtw27Kn3/4ahfXETCSob2MfhgW2p+K8H0ACBxJh6HWTbmBDlfVUqtBfW9rMN4Ej9n+M4mbfqv/94hAzJXymq6pQ2gQq4Aq2HmF9AJYGCenBxt2FNJZhEbPYZjNVHu9d0TT894ca3TrivVJOqylD8rCBXHt+ziGdqcIfM//DnC7eb9fopfjK94GzKLS01DApDdKQAkhY4vrwWtOMGwkLVDm6kF/8PMwyrOhA8WSU8K1g18dvbkYgQb1sv6N2C9bPBrXZRImRXaJpml2MxO8cYNP8Azsz/u4=
+api: eJztV99v2zYQ/leIe0oA2lE6u9sE7CHtki7DNhRdgj2khkGLZ5uxRKrkKYtr6H8fjpQcx/bQYtiADuiTJet4P7777ni3AY2h8KYm4yzk8AZJ0BJF0XiPlkRYB8JKkKnwo7MonI2fSfkFkrBO4/C9BQmkFgHyO7jpBKe/KqsWWKGl6cXb62mvYOpq9IqNBZhI2L5d62T8N6ex1wESAhaNN7SG/G4Dr1B59BcNLdlSrzH3qDRM2omEWnlVIaEPUd6qCiGHpQsUHyUYDrFWtAQJHj80xqOGnHyDcg+HmxSgWjAIvQYpPAb0D6iFdw0ZuxAPqmxQnEyVXUsxVWV5KoXzolQzLEXAEgtyXpyscJ1H0dME1+PAqdoMCqdxgXaAj+TVIGG4gQdVGq2Ife+dlJWxP5zL+GWawIdWQiiWWCk+Q+ua5QN5YxcgoTL2F7QLhuq8ZWw8htrZgNHCiyzjn72Q+xwHUtSEIUgonCW0xLKqrktTxFyd3Qc+sDk072b3WBBIqD1nlkwyd+9mU6OPuTl3vlIEOTSN0XCQhCWKezcT1z+KJqAW5ETtXYEhCFqaIBgdDMSe4qOq6pJ1j8cZfjfKsgG++H42GJ3r0UB9e/5yMBq9fDkej0ZZlmWMncfQlBR2vFLeqzWzhLAKx6L6G7yMTWEYZ8XceaFEMHZRYuTN8ACNLR+P4PHcwk+dpHDzWHWJjbRUJDzWzhNjwkCgJb8eRkbE3B1TjbapuG7cinFXpkQGPKxMXaPmWjzEPinrrW9rNQYZ7aYAW7ktxk/H9LprLNuOwgFGHQ0VUzefB6TP13J781qkM+IEh4uhFO9hkI3zLHsPp1Ereu/8pxVespioMAS1QGF28U5YDaFtd5vG3W5f6VCfMBAUWdiT45IzA+3+2Z58R068diV3DePsu65k+XgrYXSsaF8p3ZeBGIiuc3COYtz/Yg1/Jo4XYue9Z048m3jriniz6Oc1exUh5vr2SN7gw1MTatkCKVMeJfWeca0NP6pSdGeEmrmGnpw4alY3yKYt0p/OryIzXZN4zQ16x66xhAv0RxtVCpIPPDMyzrK2fcpy5NlBYs8PE3trVUNL581H1GIgLt5eixWuxZZEXxP7f0jsN4eJvXJ+ZrRGKwbi2oZmPjeF4T5To69MCHE0+prdLz+742P9ON0jHRw8IPb33NdW/OXntJVQIS0d7yI8Ycu0K+RwxovO2aa/8dsz2l1R/EPaOCZP+8rvnMqUrd2tZev9kqiGbn7n91kUAtk9XPVj8c9/3MS5g0fMeLzz/SJOJk87Ft8PIIEdSTCcD7NhHHNrF6hSkV/dPsQr3t5at4/i5omq/3wjTJESPtJZXSpj44znS9aeYL0DlgYJ+c4otXVpIuOExWKbzUwFvPVl2/LfHxr064T3g/JGzRiSuw1oE/hZQz5XZdhf6XZjOnnXXaOn4j9e9I6i0O8blreNKA05gIQVrnf31XbSSlii0uhjfOnzRVFgTTsHD1oJr3tbHr+5vAEJ6jn99ugWtR91arNJEjduhbZttz4Sv7ODbfsXgjSjrA==
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -250,6 +250,97 @@ Get the current system timezone on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-user-by-name.api.mdx b/docs/docs/gen/api/get-node-user-by-name.api.mdx
index 5e597e1a1..b47ae718d 100644
--- a/docs/docs/gen/api/get-node-user-by-name.api.mdx
+++ b/docs/docs/gen/api/get-node-user-by-name.api.mdx
@@ -5,7 +5,7 @@ description: "Get a specific user account by name on the target node."
sidebar_label: "Get a user"
hide_title: true
hide_table_of_contents: true
-api: eJztWG1v2zYQ/isEP7UA7Tid020G9sFdX5ahK4o2RT9khkGLZ4uxRKrHUxbP0H8fjpRtxXbXtGmBDeinSPHd8bnnXnintTQQMrQVWe/kSL4AElqECjI7t5moA6DQWeZrR2K2Ek6XILwTlIMgjQsg4byB/p9OKkl6EeToUr4LgFPtzPQF+rqa/qGdXkAJjqbj1+dTNjn1FaDmI4OcKLl9OzcJwitvgK08Wb3SJUglA2Q1WlrJ0eVaPgGNgOOacj6N7Y0QtJGTZqJkpVGXQIAhyjJgOZK5D+SSKctuVppyqSTCh9oiGDkirEHtcXGRHNQLcCQ2FpRACIDXYAT6mqxbiGtd1CAeTLVbKTHVRfFQCY+i0DMoRIACMvIoHixhNYqiDxNdNz2vK9vLvIEFuB7cEOpe4nAtr3VhjSbGvgGpSut+OVXxl2kiXzZKhiyHUrMOrSqWD4TWLaSSpXUvwS2YptOmUVsyPpuId90sYO37OPA5mCeMLFTeBYhGHw0G/Odf0BkgbYu+VDLzjsARy+uqKmwWM+zkKrDS+hCCn11BRlLJCjkfyaYjr/xsas0xqHOPpSY5knVtjTxInhzElZ+J86dcREaQFxX6DEIQlNsgmBQIxEjhRpdVwbbPzgbw03Aw6MGjn2e94akZ9vSPp497w+Hjx2dnw+FgMBgwfwihLih0UGlEveKgEpThmFdHOCtsiPmbrIm5R+EdxEzvH/CwraAjTNy2/VsrKfw89olUP5RrEgiVR2I2mAJwhKt+zAfSVIdjpsHVJVe5XzLj2hbAVIelrSow3DsOWU/GNqdve0v0L56bHGxUbB33IHF8uz0eaYsHLN6NQY5OLLMI8lb2WUewADxQeVWXgJuGff40ai7upPkabalxJRbcrDequb9bpEsQxmJscCvBvSSFM4ei+LT6S7+wTkThnW6EcZegtEabfatv66oq4nWz84rJDNF84bMldGmZeV+Adgfg3udAOWDK4DbCNoik35dNoyRZilXL4Tp3c3+IpduaQkqQbv4BosdP8/SMxUQJIegFCNutqlQRCc6uh19277u2tia38T7j2pPNvt6msexJ/+oLvsWsd2/adsyqjZLDwemRhux0TblH+zcY0RPj1+diCSuxPeer9eY78jcWnfdNX4i6qSv5LKsRmcZuL34eqeW+jUBo4XrTWfopznzPHG1Ze4cbY/lRF+3dFISe+Zp2II4ea2rgox3QXx6XgmwJvk5Zw/ftHer6Yutk1rai7SFng0E3f2N+HQT2h8PAPvc4s8aAEz1x7kI9n9vMchpWgKUNIc5z36P7f4ju8CNzlPM8CNTOfMUR6nsgv1kgz44NxOm+aOngAY+Hgu/x/O/Hs1GyBMo9b8G83am0no3kCU+TJ+vNrd6ccERP1vE5bsd4nRbeyW5VfsvRTAHrLsxbB3KiSrarWByEopBU7cPzzXbz+/uLOF5YnnBYvYU/jgPIbrnne14qyUASE6f9QT9uK5UPVGq3m3/brwzsxD5/612S3u9bRHKS4IZOqkJbF0dpjFNpIvVSsrRUctQZllpIo/g6UXGOYtH1eqYDvMOiafjfH2rAVaL7WqPVM2bkci2NDfxs5Giui7C/R3d9e/CmnYYeim/8meEoE5vZ2vFkHaXlSEoll7Dqfi3hjwZf5NNHvhh8AZaEY8I7CWgDGHlOP42zDCrqKB00Nf6AsK2oF88upJL6dhXsZX20fhTQep0kLvwSXNNs8RG/M8Cm+Qcw/ar4
+api: eJztWN9vGzcM/lcEPbWA7Did020G9pCuP+ahLYo2RR8yw5BPtE/xnXSleFk84/73gdLZvtjumrYbsAJ5ih2TFPmR/ERxLQ2EDG1F1js5ki+AhBahgszObSbqACh0lvnakZithNMlCO8E5SBI4wJIOG+g/4eTSpJeBDm6lO8D4FQ7M32Bvq6mr7TTCyjB0fT8zXjKJqe+AtR8ZJATJbffxia58NobYCtPVq91CVLJAFmNllZydLmWT0Aj4HlNOZ/G9kYI2shJM1Gy0qhLIMAQZdlhOZK5D+SSKcthVppyqSTCx9oiGDkirEHtYXGRAtQLcCQ2FpRACIDXYAT6mqxbiGtd1CAeTLVbKTHVRfFQCY+i0DMoRIACMvIoHixhNYqiDxNcNz2vK9vLvIEFuB7cEOpewnAtr3VhjSb2feOkKq375VTFX6YJfNkoGbIcSs06tKpYPhBat5BKlta9BLdgmE6bRm3B+GIg3nergLW/JYAv8XnCnoXKuwDR6KPBgP/8g3cGSNuiL5XMvCNwxPK6qgqbxQo7uQqstD50wc+uICOpZIVcj2TTkVd+NrXmmKtzj6UmOZJ1bY08KJ4cxJWfifFTbiIjyIsKfQYhCMptEAwKBGJP4UaXVcG2z84G8NNwMOjBo59nveGpGfb0j6ePe8Ph48dnZ8PhYDAYMH4IoS4odLzSiHrFSSUow7GojmBW2BDrN1kTc4/CO4iV3j/AYdtBR5C4bfu3VlL4eeSJ1D+UaxIIlUdiNBgCcISrfqwH0lSHY6bB1SV3uV8y4toWwFCHpa0qMMwdh6gnY5vTt9wS44vnpgAbFanjG0A8v02PR2jxAMW7IcjZiW0WnbxVfdYRLAAPVF7XJeCGsMdPo+biTppv0JYaV2LBZL1Rzf3dMl2CMBYjwa0Ec0lKZw5F8Xn1l35hnYjCO93oxl2S0hpt9q2+q6uqiNfNLioGM0Tzhc+W0IVl5n0B2h049yEHygFTBbcZtkEk/b5sGiXJUuxaTtfYzf2hL11qCqlAuvUHiB4/j9MzFhMlhKAXIGy3q1JHJHd2HH7Zve/a3prc9vcZ955s9vU2xLIn/asv+Baz3r1t6ZhVGyWHxwj5iTYbehM90V4E3IEx3n+Rm++I37nofN/wQtRNrOSzrEZkGLtc/DxCy7yNQGjhesMs/ZRnvmeOUtbe4cZY/qiL9m4KQs98TTsnjh5rauCjHdCfHpeCbAm+TlXD9+0d+vpiG2TWUtH2kLPBoFu/sb4OEnt65KZ1uqbco/0LjOiJ8zdjsYSV2BbQfWK/h8T+cJjY5x5n1hhwoifGLtTzuc0s80sFWNoQ4qB+n93vIbvDTwzIzvOEVztzz7/fQyLPjl2saRBo4eDJnae9+3z+//PZKFkC5Z7XG/xsV+ndPZIn/Ew4WW/GteaEM3qyjp/j2gOv0yZjstuBvONspoR1NyHbAHKiSrZv7DjhRiGp2g/PN8/W3z9cxLnR8ujK6q3753Gy3G1t+J6XSrIjCYnT/qAfn6GVD1Rqt3vYtOsjDmIfv/WuSL9tyZSCJLihk6rQ1sU3EsbnRgL1UrK0VHLUmYJbl0bx60TFAZlF1+uZDvAei6bhf3+sAVcJ7muNVs8Ykcu1NDbwZyNHc12E/QVJN7YHb9tp6KH4j/dHR5HYPJocP5mitBxJqeQSVt01GG+DviqmT6yCvsKX5MeEH5ugDWDEOf10nmVQUUfpgNR4M7TtqBfPLqSS+nYX7FV9tH7UofU6SVz4Jbim2fpH/J0dbJq/AXhrT7Y=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -350,6 +350,97 @@ Get a specific user account by name on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-user-ssh-key.api.mdx b/docs/docs/gen/api/get-node-user-ssh-key.api.mdx
index d2c85cfbe..d07c0c68d 100644
--- a/docs/docs/gen/api/get-node-user-ssh-key.api.mdx
+++ b/docs/docs/gen/api/get-node-user-ssh-key.api.mdx
@@ -5,7 +5,7 @@ description: "List SSH authorized keys for a user on the target node."
sidebar_label: "List SSH authorized keys"
hide_title: true
hide_table_of_contents: true
-api: eJztV21v2zYQ/ivEfUoA2rFTO1sFDKi3JW3WbiiaFPuQGQYtnS3GEqmSpyyeof8+HCU7iq2u78A+9JMl+V6fe3jH20CCPna6IG0NRPBKexJXVy+EKim1Tv+DiVjh2ouFdUKJ0qMT1ghKUZBySyRhbIL9vwxIILX0EN3AW49upkwye+5sWcx+V0YtMUdDs8nryxmbmNkCnWKXHqYSdm+XCUTwHOkPmyBbubp68RLXIMFjXDpNa4huNvAzKoduUlLK3the5FAlMK2mEgrlVI6EzgdZo3KECFLrKTxK0JxmoSgFCQ7fldphAhG5EuUeFtd1gmqJhsTWghQOPbo7TISzJWmzFHcqK1EczZRZSzFTWXYshXUiU3PMhMcMY7JOHK1wHQXR4xqu+55Vhe7FNsElmh7ek1O9GsMN3KlMJ4o49m2QMtfmp6EM/8xq8KGS4OMUc8U6tC5Y3pPTZgkScm1eoVkyTMOqkjswPhkILoVQcWxLQ4K1vySBT4l5ypH5whqPwejpYMA/HZS1iy7W9kFCbA2hIdZTRZHpODDt5Naz8uYwFDu/xZhAQuGYl6Rr17d2PtNJV8gL63JFEEFZ6gQOSJSiuLVzcfkrH55EkBWFszF6LyjVXjA46IkjxXuVFxnbHo8H+ONoMOjh6dN5bzRMRj31w/CsNxqdnY3Ho9FgMBgwjg59mZFvRaWcU3xgNGHuu7J6HB1jtsK1yBjD2lpz0r02ywxr8vcP0Nidpw48DvPfSnOVuHM0RpkIpKj0XVbQlDkfb7tiiJXOkLH1K10UmHDTOHRTG9s62TWVkFDAmuMIbpkbHaAdYrPfBUPr0/4Blo/EeWI66CnQkFsfglub+hCwL3EtWEIcYX/Zl8L7tOe8qh8wOR2Ph0+PH9Oq9Q+jsNBmia5wuj4d/+3u6sXkdHwmWjpboFe4fuymFo3UPB6ePun3A+KxzXP8GD+cViMsjmhd6Fhl2ToMnmdcv72Ubm1qnmWqIFtAVUkgTXUMYXJcmoUNn9E56z7s/JzFRI7eqyUK3WKrqCnYD9YeuuVNe7I0ZJ7uR3HOZYZqX3N7eA/kf7EZzwxtzZum+bFyJWE0GB62v7emxaqemLy+DNzaefpqHfAjMZyI1vuWI0FXUKpI2DgunWMo23W8CPByd3RITuPd9jgH9iRISmedfWLPeZJoflSZaHSEmtuSHoLodJuUyK4N0t/WrQTpHG1JDXGT9mHUhnCJrrPN1UmywiMn48GgzczAsYPCPjks7IV1c50kaERPXBpfLhY61kzFAl2uvQ+3p+/V/f9Xd9x1a6lbDc9dvkI2c/hrXli+F/QbFbSSkCOllncVvoPL+hIdwQmvQieb7USoTnhonWzqZ569q2aXcXf1ejJ9WGyuuKp14drrzS6RlKiA5uLM7/MgBLJ5uNjeQX/78zqMKM2Tj9WbNCZhiD2sYjwnQAIHUiMy7A/64U5ZWE+5ClRr9oX37YT7qG4eqPtle2SdMuE9nRSZ0obDKl3GHmqob4ClQULUGr9skz9tp3ED+FSGGc1Km81ceXzrsqriz+9KdOu6DHfKaTVnpG42kGjPzwlEC5X5/W2oneXRm2bKHotvvCx2YrK9vhqmVZCGCCBcb9s7L69+n5XTe/a+z4iljmNaSUhRJegCzvVfkzjGglpKB02P18DdiXt+fg0S1OPTsXcagvXOgDabWuLartBU1S4+4ncOsKr+BWM63eE=
+api: eJztWOtv2zYQ/1eI+5QAsmOndrYKGFB36yNrNxRNgn3IDIMWzxZjiVTJUxbP0P8+HCU7iq2ub2AD+smUfM/fPXinDSj0idMFaWsghtfak7i4eClkSal1+m9UYoVrLxbWCSlKj05YIyhFQdItkYSxCvt/GoiA5NJDfA1XHt1MGjV74WxZzH6TRi4xR0OzyZvzGYuY2QKdZJUephHsns4VxPAC6XerkKVcXLx8hWuIwGNSOk1riK838BSlQzcpKWVtLC92KBVMq2kEhXQyR0LnA62ROUIMqfUUjhFodrOQlEIEDt+V2qGCmFyJ0R4Wl7WDcomGxFZCJBx6dLeohLMlabMUtzIrURzNpFlHYiaz7DgS1olMzjETHjNMyDpxtMJ1HEiPa7juelYWupdYhUs0PbwjJ3s1hhu4lZlWktj2rZFRrs1Pwyj8M6vBhyoCn6SYS+ahdcH0npw2S4gg1+Y1miXDNKyqaAfGJwPBoRAySWxpSDD3lzjwKTZP2TJfWOMxCD0dDPinI2Xtoitr+xBBYg2hIeaTRZHpJGTayY1n5s2hKXZ+gwlBBIXjvCRdq76x85lWXSYvrMslQQxlqRUcJFGK4sbOxfkvXDxKkBWFswl6LyjVXjA46IktxTuZFxnLHo8H+ONoMOjh6eN5bzRUo578YXjWG43Ozsbj0WgwGAwYR4e+zMi3rJLOSS4YTZj7Lq8eWseYrXAtMsawltZUutdmmWGd/P0DNHb11IHHof9bao4Sd45GKCcCSSp9lxQ0Zc7lbVcMsdQZMrZ+pYsCFTeNQzW1sK2SXVMJDgWs2Y6glnOjA7RDbPa7YGh92t/D8pE4T0xHego05NaH4NaiPgTsK1wLphBH2F/2I+F92nNe1gdUp+Px8PHxw7Rq/cMoLLRZoiucrqvj39VdvJycjs9Ei2cL9ArXD9XUpLGcJ8PTR/1+QDyxeY4fo4fdaojFEa0LncgsW4eL5wnHb8+lG5uaJ5ksyBZQVRGQptqGcHOcm4UNr9E56z6s/BmTiRy9l0sUupWtok7BfpB23y2v2zdLk8zTfSuecZih2ufcFu8B/c824ztDW/O2aX7MXEUw6mp/T6XaNhHRE03b5bQPPn/FDviRGE5E63mbI4FXUCpJ2CQpnWMo23F8HuDl7uiQnMbbbTmH7FFIUmedfWJPuVKajzITDY+Qc1vSvRGdalWJrNog/WXdSpDO0ZbUJK5qF6M2hEt0nW2udpIZHigZDwbtzAw5dhDY4WFgr0yrXfTE5M15aBq7FPoe2P9DYB8dBva5dXOtFBrRE+fGl4uFTjT3mAJdrr0PY/H36P73ozvu6sf1HcIDFe8GzYD1NSfR7wH9RgGtIsiRUstLKC9XUb0dxXDCO+7JZnvVVyc8jZxs6jMPVatmSXW39d45vd9YLziqdeDae+vOkZSogGYj4ud5IIKoOTzfLhe//nEZZg/NIw2zN25MwnRyv2PzPQERsCE1IsP+oB+WhcJ6ymVItWYRfN+yv4/q5j51v+wDQe0y4R2dFJnUhs0qXcYaaqivgakhgrg1V7FMfrUdsxrAp1EYvphps5lLj1cuqyp+/a5Et67DcCudlnNG6noDSns+K4gXMvP7a27by6O3zS17LL7xV4BOTLZ7ieG0CtQQA4S9pf0xg3f6z/LpPQv9Z9hS2zGtIkhRKnQB5/qvSZJgQS2mg6bH+/2u4l48u4QI5MPq2KuGIL3ToM2mpri0KzRVtbOP+JkNrKp/AL3Bgp8=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -314,6 +314,97 @@ List SSH authorized keys for a user on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/get-node-user.api.mdx b/docs/docs/gen/api/get-node-user.api.mdx
index f3de9db69..6ebec1eaa 100644
--- a/docs/docs/gen/api/get-node-user.api.mdx
+++ b/docs/docs/gen/api/get-node-user.api.mdx
@@ -5,7 +5,7 @@ description: "List all user accounts on the target node."
sidebar_label: "List all users"
hide_title: true
hide_table_of_contents: true
-api: eJztV0tv20YQ/iuLOSXASpZTOW0F9KA2j6pIgiCxkYMrCCtyJK5F7jKzQ9eqwP9ezK7eEhAXTYAechIpzvOb9wpyDBnZmq13MIA3NrAyZamagKRMlvnGcVDeKS5QsaE5snI+x+6fDjSwmQcY3MJNQJoYl09ek2/qyVvjzBwrdDwZvh9NRNbE10hGtAQYa9i+jXIYwGvkdz5HkQIaAmYNWV7C4HYFv6IhpGHDhegRSQNCk8O4HWuoDZkKGSlEWmcqhAEUPnB81GDFp9pwARoIPzeWMIcBU4P6yPHr5JqZo2O1kaAVYUC6x1yRb9i6ubo3ZYPqycS4pVYTU5ZPtfKkSjPFUgUsMWNP6skCl4NI+jQB9dDxpradzOc4R9fBBybTSeit4N6UNjcstm+M1JV1v1zq+GWSYIdWQ8gKrIzw8LIW+sBk3Rw0VNa9QTcXmC5bwYYw1N4FjBqe9XrycybWfnYY6i5oyLxjdCwcpq5Lm8VIXdwFYVudGuGnd5gxaKhJ4so2Kb3z04nNzxk781QZhgE0jc3hJBQFqjs/VaMXYlqu2KuafIYhKC5sUIIRBhZL8cFUdSmyr656+FO/1+vgs5+nnf5l3u+YHy+fd/r958+vrvr9Xq/XEwQJQ1Ny2LPKEJml5ApjFc55dWidJKkqbYjZkKSpmSflHca86Z7gsM3HM0gcyv59TSlRkXpL2ciFYUVYe2JBQyBAx7Tsxoxgw004JxpdU0nN+IUgbmyJAnVY2LrGXGrwFPUkbKN9W6PRv6g3OdjqWIj/AcThQdKday8nKD4OQYmOUCYjD7LPOsZ5bDCHLO+aCslmyaLRi8g5fxTne7KVoaWaS9PbsBb+cZGuUOWWYrtYKmlRKZwFluWX2d/4uXUqEu94oxmPCcpaaHss9WNT12Vs2zuvBMwQxZc+W+A+LFPvSzTuxLhPBXKBlDJ4HWEbVOLvQttqYMuxaiVcIzfzp7bcnM6f/fxDIk9fxumlkKkKQzBzVHa/qlJFJHN2o+F2f3qsa2t8aO9LqT1oj/k2jeWI+jdfykyw3n1YN2RhbTX0e5enLfnGmYYLT/ZvzFVHDd+P1AKXaqvnq/XmR+I3VHvvm74QeVNX8lnWEAmM+734VYRW+jYhk8X7TWfppjizseXZlnWkPM+tPJpSrXmUmfqGd0acVZs3KKod8l+eFopthb5JWSPj9xF1fb11Mlu3oq2Sq15vP39jfp0E9ofTwL7yNLV5jk511MiFZjazmZU0rJEqG0Lci75H9/8f3atzm1RqM5ulIM7Gr7hHfY/mN4pmq6FCLrycILJg63QqDOBCVpCL1WYUtBfN5jKh+3RsjHdnykcJY4rU/rGytbxgrmG9usexGYlArx9ebXbhPz5dx2FkZR4K+9ruYRxXu5NKpgJoEEMSBJfdXjfutrUPXBm325YOz7lwDN5ql6H/+vBLvjE+8EVdGuvivkVxdUkg3oJQg4bB3kSNOI51HLJCslpNTcAbKttW/v7cIC0TuveGrJkKALcryG2Q5xwGM1OG49tt340nH9aj8qn6xhfdWQQ2i5eTtStSwwBAwwKX+4dpO5ZFEU2OFP1Ln4dZhjXvMZ40Dbnrthn7+uU1aDCHyXaUXFH6WaNWq0Rx7Rfo2nZrI8u7GNi2/wAtDZKW
+api: eJztWG2PGkcM/isjf0qkgeNSLm2R+oE0L6VKoyi5Uz5cERp2DTvH7szG470eRfvfK8/wDlKuaiulUj6xC7bHfh7bY7OCHENGtmbrHQzgrQ2sTFmqJiApk2W+cRyUd4oLVGxojqycz7H7uwMNbOYBBrdwE5AmxuWTN+SbevKbcWaOFTqeDN+PJmJr4mskI6cEGGvYvo1yGMAb5Hc+R7ECGgJmDVlewuB2BS/QENKw4ULOEUsDQpPDuB1rqA2ZChkpRFlnKoQBFD5wfNRgJabacAEaCD83ljCHAVOD+ijw6xSamaNjtbGgFWFAusdckW/Yurm6N2WD6snEuKVWE1OWT7XypEozxVIFLDFjT+rJApeDKPo0AfXQ8aa2ncznOEfXwQcm00noreDelDY3LL5vnNSVdT9d6vjLJMEOrYaQFVgZ0eFlLfKBybo5aKise4tuLjBdtoINYai9CxhPeNbryccZrv3skOouaMi8Y3QsGqauS5tFpi7ugqitTp3w0zvMGDTUJLyyTYfe+enE5uecnXmqDMMAmsbmcEJFgerOT9XopbiWK/aqJp9hCIoLG5RghIHFU3wwVV2K7aurHv7Q7/U6+OzHaad/mfc75vvL551+//nzq6t+v9fr9QRBwtCUHPa8MkRmKbnCWIVzUR16J0mqShtiNiRrauZJeYcxb7onOGzz8QwSh7Z/WUsKK1JvKRu5MKwIa08saAgE6JiW3ZgRbLgJ50yjayqpGb8QxI0tUaAOC1vXmEsNnqKejG1O39ZojC+emwJsdSzEfwDi8CDpzrWXExQfh6CwI5LJyYPss45xHhvMocq7pkKyWfJo9DJqzh+l+Z5sZWip5tL0NqqFfxzTFarcUmwXSyUtKtFZYFl+Wf2tn1unovBON7rxGFLWRttjqx+bui5j295FJWCGaL702QL3YZl6X6JxJ859KpALpJTBa4ZtUEm/C22rgS3HqhW6Rm7mT325Ob1/9vMPiTx9GadXIqYqDMHMUdn9qkoVkdzZXQ23+7fHurbGh/6+ktqD9lhv01iOpH/2pdwJ1rsP64Ysqq2G/rmW/MLkm/amOmp9L0gFxnj/xd78SPyGau990xeibupKPssaIoFxvxe/jtBK3yZksni/6SzdxDMbW55tWUeH57mVR1OqtY4yU9/wzomzx+YNytEO+Q9PC8W2Qt+krJHr9xF1fb0NMlu3ou0hV73efv7G/Doh9vKU2BtnGi482T8xVx01fD9SC1yqbQJ9I/b/QOx3p8S+9jS1eY5OddTIhWY2s5mV/lIjVTaEOPB+Y/frZ/fqXD9O98dm2otDz7cm/PWz2WqokAsvu6VsTjrtgAO4kNnyYrW549uLZrNy0n3aIse7/fOj0JiY2t9Ct54XzDWsd7I4D0Uh0OuH15sl59dP13HKsDLoiPra72GcQ3a7stwKoEEcSRBcdnvduLTUPnBl3G4MPtzTwzF4q12G/u2NPsXG+MAXdWmsi4M0xZk0gXgLIg0aBnujUsRxrOP0JCKr1dQEvKGybeXrzw3SMqF7b8iaqQBwu4LcBnnOYTAzZTheyvfDePJhfVU+Vf/xqn4Wgc1E7WSejtIwANCwwOX+Pw7tWDYANDlSjC/9PMwyrHlP8aRpyMK+zdg3r65BgzlMtqPkitbPOrVaJYlrv0DXtlsfWd7Fwbb9C6+ON1Q=
sidebar_class_name: "get api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -345,6 +345,97 @@ List all user accounts on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/post-file.api.mdx b/docs/docs/gen/api/post-file.api.mdx
index bc46d5b93..0cf310b6c 100644
--- a/docs/docs/gen/api/post-file.api.mdx
+++ b/docs/docs/gen/api/post-file.api.mdx
@@ -5,7 +5,7 @@ description: "Upload a file to the Object Store."
sidebar_label: "Upload a file"
hide_title: true
hide_table_of_contents: true
-api: eJztWN9v2zYQ/lcIPm2A7DiuncYehiEdljUDigZNgj4kRnASTxYbiVRJKo5q6H8fjpT8O2sfVqAF8mJIFo/33X13x+MtuUCbGFk6qRWf8psy1yAYsFTmyJxmLkP2Pv6EiWNXThvs84g7mFs+veXnMsf7d6BgjgUqd392eXFPcve6RAO0o+WziK/eLgSf8kttHQnyiFtMKiNdzae3S/4GwaA5q1xGW9M204WRDvmsmUW8BAMFOjTWL1ZQIJ/yVJuENpIE/XOFpuYRN/i5kgYFn6aQW4z4U09DKXuJFjhH1cMnZ6AXbFjyR8ilAEe76UI6LEpX8ybaccvHDBVzpsKIxXUJ1nq/CDlH61iSYfLAQAkG+QJqyzxuv4LM6LMP6CqjLEsyUHMUv9NGzOAcjMjRWqZTtsjQZWi8UKKVQ+WYkGmKxrLU6MJ/wCdpnVRzpj0h/TtFTkwyLIBMcXVJZsRa5wj0SWAKVe5aRzTkR3IOWvdGi5pEtq28bhET75UPhP6WP70DeAuPxIsqd7IE445SbYqeAOeB7EEKeHnES0PB4CR63wcWV6usM1LN+a7vCRWtJDd1PmVSHYxMfIKizGkzNZfqqZ9olRKbLeb7oOlrGt/qxVqTzXSVCxYjcwbBoWCiIikmsMx13Wd33MDijgfWLYtr+gXbk/Y3dscponJweMeZQSWIz4V0GftbM4dP7qj7HuJnTrynkDgbyF0xSDrIPlUVlB7hrZPlsybyGXPINGIGaIdYKvAJ8gzprY/6vGk2Sb8NNLUKZk0TPttSKxtoHA6O92OJUrwNIhTMVkmC1qZVntfE00YMQVnmMvH14eiTJdnvHUArVD47/yNqbAbD8cnXFVy9PesNxycsA5ttRenKpZs68FU8SEaj4eQ0TY6T49EE0jgdJaeTyUkaT4aj4WvA0TGOTkaTePJqlMBoMp5MjuPXp+NhfDoee2Tyy6bhUjmco9kD5kmgtZQvPjC3oBwPhiNKjlCWnikhO2VwVaU2DewqW5+dU6WharafnwxygyBqlmEuGKi2ioV0oMWWOOp8GWpryIIVYCpA3zWb2S8GFkwb1qXWrzsIfOY9kyBtuLTsrP26A3gWcSed34z4CSfuhzaheMiv0WCwn1IXyh9WrK3hrIS6q9H/Uz6hMdp83aNnbOO9C3gvy1wGjukkqYxBsR335yBzFHS2GHRG4iMy68BVth/OWwcyt9+gXAhJj5CzVoZBrCu3BnFQraj8sabQLbR5YE4WqCvXD4eD+JZkul4ZSQJbSsaDAbHW0foXrdpj9ECRvFFQuUwb+QUF67Gzywv2gDVbxdYLsT8Dsa8OnH7axFIIVKzHLpSt0lQmkgpliaaQ1vrW+IXdn4HdyTO9TXea+aa8bepCx+4PxPbkZzcW2R/+nhLafqeZfkTjm8VwtrwEwY8eBONDp7Ff2PaS1EB0zeQLnT82nU3EC3SZpllEqa33PNDQgR+l3VjCPIZBw2w9o7gi3gI1m5OKFdTMubK7jfsW2i/iUftw3t3C/vl47ftHqVLtxVugZ/7qtx6mUDPAI05Ags3H/UF/QD4i0AWo9f1ne2iz66zlOiK/cboTDPK30zIHqUhpZXLaKnjqtr0LRjwjB05v+XIZg8UbkzcN/R1GMTSoEdJCnG8MY57F9gOPWA565AHrjQnUI+QVreE0ZHkEI8lqiqAm4hmCQOPdEYT+DNp717TvWvbQNKWJOqGzJMHSbSzfqy6kehXal++vrin62kFP4RPLDwP8vtH6MYCE7XDeCV8Pvv0Eqt5AsVyGFdf6AVXT8M4xjt55Q/OCfwEf8g+R
+api: eJztWG1v2zYQ/isEP22A7NiuncYegiEdljUDhgZNgn5IguAkniw2EqmSVGzV0H8fjpT8kjhoBqxAC+SLIVk88rnnnjuSt+ICbWJk6aRWfMavylyDYMBSmSNzmrkM2Yf4MyaOXThtsM8j7mBu+eyan8oc7/4BBXMsULm7k/OzO7K70yUaoBktv434+u1M8Bk/19aRIY+4xaQy0tV8dr3i7xAMmpPKZTQ1TTNbGOmQ3za3ES/BQIEOjfWDFRTIZzzVJqGJJEH/UqGpecQNfqmkQcFnKeQWI77saShlL9EC56h6uHQGesGHFX+AXApwNJsupMOidDVvoke0fMpQMWcqjFhcl2Ct50XIOVrHkgyTewZKMMgXUFvmcfsR5EaffURXGWVZkoGaozimiZjBORiRo7VMp2yRocvQeKNEK4fKMSHTFI1lqdGF/4BLaZ1Uc6Z9QPo3ikhMMiyAXHF1SW7EWucI9ElgClXuWiIa4pHIQeveaVGTya6Xly1iinvlhdDf4dMTwFt4ZF5UuZMlGHeQalP0BDgP5AmkgJdHvDQkBifRcx+iuB5lnZFqzh9zT6hoJNHUccqk2qtMXEJR5jSZmku17CdapfzlCuhcjQqpjodRAcvj0WTCm2bt9V3A+i3M7/Vig9VmusoFi5E5g+BQMFGRFRNY5rrusxtuYHHDg24si2v6BduT9jd2w0mTOTi84cygEqSIhXQZ+0szh0t30H0PCpyTclJInA3yWGuA1iCGVFVQgoW3zpbS9D+nSaQV6vTYwIKt5yGqyOl9FJFGgJDEUoFP1Wfk13Ld97Nt5HcdBNMucNs04bMttbJBUKPB8Kmqqdi0ckbBbJUkaG1a5XlNitlSM5RlLhNfqQ4+W7L93lJeo/J14jn9NhG3GYwmh99e4OL9SW80OWQZ2GwnX9aUbq+Bb+JBMh6PpkdpMkyG4ymkcTpOjqbTwzSejsajt4DjIY4Px9N4+macwHg6mU6H8dujySg+osSIuJVftx2XyuEczRNgPgg0ljLXC3wHynAwGlOShQL5TDF7VJDX9XLbwa7G9tkp1Tyqq08rBYPcIIiaZZgLBqqtpyGtaLClGHVchiofsmkNmErhd60K7BfKK23WqfXrIwQ+g59JkFYubXQ2vD4CfBtxJ52fjOIT9v6PbULxkF/jweBpSp0pXw9Yu5uwEuput/if8gmN0ebbjJ6wrfdO8N6WuQwc00lSGYNiV/enIHMUtMsZdEbiAzLrwFW2H3Z+BzK3L1hcCEmPkLPWhkGsK7cBsXdZUfkNVqFbaHPPnCxQV84vTbX3Bcl0uXaSDHYWmQwGFLUurH/SqCcR3VMkrxRULtNGfkXBeuzk/IzdY83W2noN7M8Q2Dd7dj9tYikEKtZjZ8pWaSoTSYWyRFNIa/0h/TW6P0N0p8+cbbrdzF8P2sNhuDv4DbHd+dmVRfa7vzGFC4jTTD+g8YfOsLe8iuBHF8Fk327sB7ZnSTpAdIfJ13D+2OFsIl6gyzR1RUptPfNA7Q9+kHYNEvMQWh63m27JBcUthGa7Z7KGmjlXdn0Bf4T2g3jUPpx2t7C/P13686NUqfbmLdATf4XctHXoMMAjTkCCz8P+oD8gjgh0AWpz/9ltHz0ma7VR5Av7TMEhf8stc5CKFq1MTlMFpq7bu2DEMyJwds1XqxgsXpm8aejv0BSilpGQFuJ8qy30LLYfuNmzl5F7rLd6YQ+QVzSGU7vnAYwkr0lBTcQzBIHG0xGM/gir9y5p3o3tvr5OE3VGJ0mCpdsa/qS60NJraZ9/uLgk9bUtp8Inlm8G+HmjzWMACbtyfiRfD779BKreQrFahRGX+h5V0/COGEfvvKF+wb99skCf
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -121,7 +121,7 @@ Upload a file to the Object Store.
required={true}
schemaName={"string"}
qualifierMessage={undefined}
- schema={{"type":"string","description":"The name of the file in the Object Store.","example":"nginx.conf"}}
+ schema={{"type":"string","description":"The name of the file in the Object Store.","example":"nginx.conf","x-oapi-codegen-extra-tags":{"validate":"required,min=1,max=255"}}}
>
diff --git a/docs/docs/gen/api/post-node-container-docker.api.mdx b/docs/docs/gen/api/post-node-container-docker.api.mdx
index 25c89cf61..a6f68a74b 100644
--- a/docs/docs/gen/api/post-node-container-docker.api.mdx
+++ b/docs/docs/gen/api/post-node-container-docker.api.mdx
@@ -5,7 +5,7 @@ description: "Create a new container on the target node. Returns a job ID for tr
sidebar_label: "Create a container"
hide_title: true
hide_table_of_contents: true
-api: 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
+api: eJztWFtv28oR/iuLfUoASqJsOU1Z5MFJnMLtaWM4zjloHcMYkSNxY3KXZ3coWxX434vZJSXq4tgpTotTIG+87Mx+c/tmd1YyQ5daVZEyWibynUUgFCA03ovUaAKl0QqjBeUoCOwcSWiT4VBcItVWOwHiq5mK8/diZqwgC+md0nO/HNxSp7k12tROmAot8C7DL1pGkmDuZHIt35v0Du3t30DDHEvUdHt6cX6bha9rGSdvIrl+O89kIi+Mo7+bDN91IIMmGUmHaW0VLWVyvZJvESza05py3i3oTe6tIpQ3zU0kK7BQIqF1frmGEmUic+PIP0ZSsVsqoFxG0uKvtbKYyYRsjdGO766Cd2COmkSnIRIWHdoFZsKamtg1CyhqFC9uQS8jcQtF8TISxooCplgIhwWmZKx4cYfLxC99GTz2MDBQqUFqMpyjHuADWRgEN67kAgqVATH2DmRUKv1mHPk/tyFysomkS3MsgWVoWfF6R1bpuYxkqfRPqOfsqXHDvmFN6OityZa8fidT1smRcs4oo8XGl8MDzuJsQk2sCaqqUKkXGn11rG61j8tMv2JKMpKV5ciTQm+pKmGOh+A/Bs8LCIsztKhTFC9wOB9G4ovUc6UfkgIIHX2RLxkzPkBZFay2//M/dr5smqhNqafwfvQPUAheHkopx00FboMrlwOP7zuAmVIRlhUte8hSU5agsx44sBaWB3zp1wkywtZaKL2PjZW7fSubHupr2WEeePMBS6OFmc3+JG94nV48CeRML5Q1mmlCLMAqmBboGM9fz/7x5ufTnz6fsedKoGdDuvh4efXmdfw6lpF8f/b285/fcLJ6QJWx5J6EdGEsiRKqSum5h8KFf8uyydpB/rVD5mv5WdgYVuKRvZ5MjpPJ5NjjWpiiLvFpZD/7daI0taYeMqC8jwwo/35kowwIktEC7KhQU//moUFN5tYRWOppmBpTIOg9fL/kSDlaziovsp1UQpUlZgoIi6WAGfV4Zije4wzqghzLcrwC9Cx87fjmuytDNlwUG9q6brnmJpKkyBde6DGhSV4GdmQpL+Yqo12Iy1F89CzChDTFijDjdP2N6PGrmd6q7BDfhCjLRNa1yvaicZVj18drh77WK2tSdE5Qrpxoe8E2D52cxPh6EscDPPrjdDAZZ5MB/GH8ajCZvHp1cjKZxHEcy+AcDteBlN1Nt7VV2+g+1WUJdimUDlZ4501NTQK2eWjbGes2/iT9svndamFm4fjCjXzoeyYB1QeqglmrLjlTzB17GFSB7Fp3p6oKM86c/W2Csm6T9aGm5XzlPA6/7eE4PtrnMtSkZmq3WcB4epQeZxM8mb2Sz+5HG728/pH2wxif147PfRP2mTVdfqu1bfXd1vXPgVtby11hwx9ecFu3rbVuycyXIH6Xf9dVS6pER1BW29qP4qPJIB4PxidX4zg5jpM4/qffKgc939rqSUbcyovSZBzVTLilIyw7w5iRrTX2aRPOeJko0TmOgeoltwgZO5S7xNc7/7a5v0eCly3h7bNmV+2HROqC3pmCj7jK6L6KJpKTON5nzXPtqbrjH1HBsjDwWzLmM714KnrvXfV6WUE5kDBpyjmYbSfFB+9gf3JCsgoXXf37AGZIoIqDxLKzeZap9nzYyrT0twZxcNusRt5aI90be+cT19SBW7gt9vZVmnDub0/7hBWMZIGtTU7imKPWhdhn2V5Ex/sR/ayhptxY9S/MxECcXpyLO1yKdQb9COz/Q2CP9wP7wdipyjLUYiDOtatnM5UqZpkKbamc8/f4H9H9/Uf35BARhy4SmqCeb7fvHyH9fYe0iWSJlBuem1XGDzT8RCuRI57ljVZdv29G67iOss08zS7CfOxmM1z7xDENYeuP2NZm5ESVbKdN/szjF8moffjQXUb+8suVP31wrlxu5k1nnW3rgc/uRKad1PVGIetxxrcmDe2g4fGb//rif/gC3rt/P3IP3r4Gs1I+JuuZ8d5pY3Tqj1+bqSe3QRlJ9nMI93gYD/3dieNVgq+j1uT1jHYdq91kWW0q8n840Q2BJ3ygUVWA0oy+tgXDCdl2LXkfGcmkd77cMiKk3E3kD6AssFpNweFnWzQNf/61RrsMidjNf/zYNlOOnzOZzKBwu5PZvjteXLbnjJfivzyvPeiP7vqr+fLrV8tEykje4bI/dm54mpIjZGi9feH3u2DF4IqVbMT3KLeJOolTP2D45tqbHjdcfPx0xSXaDnxLz0zSwj2Pc+E+QDVVmMgnq/BtJQvQ8zoUadDZhFlQnw926t9bddAZq1VYcWXuUDfN2jfE7+yYpvk3sIqJ5w==
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -131,7 +131,7 @@ Create a new container on the target node. Returns a job ID for tracking the asy
required={false}
schemaName={"string"}
qualifierMessage={undefined}
- schema={{"type":"string","description":"Optional name for the container.","example":"my-nginx"}}
+ schema={{"type":"string","description":"Optional name for the container.","example":"my-nginx","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=1"}}}
>
diff --git a/docs/docs/gen/api/post-node-group.api.mdx b/docs/docs/gen/api/post-node-group.api.mdx
index 0b204b5d0..cd512e011 100644
--- a/docs/docs/gen/api/post-node-group.api.mdx
+++ b/docs/docs/gen/api/post-node-group.api.mdx
@@ -5,7 +5,7 @@ description: "Create a new group on the target node."
sidebar_label: "Create a group"
hide_title: true
hide_table_of_contents: true
-api: eJztWNuO2zYQ/RWCTwkge72JN20F5GFza1006WLjIA9bwxiLY4lriVTJ0e66hv69GNLyHUkatEAK5MmSPJzLOTNDDldSoc+crklbI1P50iEQChAG70XubFMLawQVKAhcjiSMVdj/w8hEEuRepjfyg0c3BaOmP7P49C0YyLFCQ9PLq9E06JjaGh2wCS8nidy8jZRM5ZX19M4qDMtlIj1mjdO0lOnNSr5AcOguGyrYVOPRpfdOE8pJO0lkDQ4qJHQ+CBuoUKaysJ7CYyI1x1QDFTKRDv9stEMlU3INJgeBj2N4kKMh0WlIhEOP7g6VcLYhbXJxB2WD4tEUzDIRUyjLx4mwTpQww1J4LDEj68SjBS7TIPo4gvXQs1DrXmYV5mh6+EAOehHBlbyDUisg9r1zMqm0eX6ehH+mEXrZJtJnBVbAa2hZs7wnp00uE1lp8xuanHE6bxkb1oSeXli1ZPn9aAPWImOytTVii2P/BFCZNYSGWAvUdamzsOjs1rOq1bFPdnaLGe0puoncMGWO2SeNIfLI2HE0p7xl2f7XQ1nBw/OnT2TbJjLXaseoNoQ5uiOr75oKnc7WVTB61RejubCVJkKVhJLwS09YCfBe58YLa7AfSAqfdyzMrC0RzJGFTbGtFQVL/eAiaSqxCz3KXUdCZduygENfW+MjjE8Gg09yjIqB+2oe9zm7tbPpHoAb1ubWVUAylU2j1VG04wLFrZ2J0SvReFSCrKidzdB7QYX2Yp2w7Ck+QFWH+C8uBvjjcDDo4ZOfZr3huRr24IfzZ73h8Nmzi4vhcDAYDGSEoynJ73gFzsGSWwBh5U9Fte/ddVAg7FzAmvGIXCKaWoVf64TCEgnFpn+JuXVMe2gY/SOkNo3osxn+y1qS7XNmxTZEBVCHEQPGKG1sx1QjoMaf0o+mqbju7IKJAV0iM+IXuq5RcSEekxOVdS7sBxlsxyjb5CvKtk1kVoDJUX1BXXwskAp0B25UVum5RtVVC7sbNaNz1n3en9csJir0HnIUehfpCFAsvd2utbOVrKGeHNTm24aCezF/ZHuooUvMT6wLdbwu6+GpSh6Z0Na6ChE1LEsL/2ZNfyGCl2LnvUuUsDbmqs2yxrnYbbY1/CaAy/XukJzGuy7VAnkKCXR5MocPjCul+RFKsV4jYGYb2jpx0qxqkE0bpHvrFoJ0hbaJacxbyBdsBONNkLxgz8jFYLDbrUOGHTF6fszoBwMNFdbpv1CJnri8GokFLsUmcb4T+38g9ukxsW+sm2ml0IieGBnfzOc609xhanSV9j4cgb+z++2ze3GqEccdJB6bTd6d177T+a3T2SayQiosj5u19QF5HgpTecbz7Nmq2+fbs3wzhbq7OFdOtiPpeyYycrU7mG58L4jC2iDGB5wgJJP1w5vufPzrx3E4anCCXG/ntNddQJtRdkNCGFkG29mCJ7OW59u5DfbXoV+G08x2BOedRSaSI4konvcH/XBgZhgqMDu2NtNIB8Ee/qttkv+jS4IIDOEDndUlaMO2G1eywkjBjWRpmch057AVXZgk4QDGMqvVDDx+cGXb8uc/G3TLyM0dOA0zjv5mJZX2/KxkOofSHw75uzE8ul7vtY/Ffzz6n4SgG1IMjyhBWqZSJnKBy90bjHbSJrJAUOhCfPHvlzGK3piVbJcftZ426VZcZhnW9EnZyU6NXP3+fsxZu747qEKFSgf3PNTDfXTV1vFCJ13FbytZgskbyFk26uQch/0SOSiJENVJMFarKDG2CzRtu8GG+J2Badu/AacAgD0=
+api: eJztWG1v2zYQ/isEP7WA7Cit020G+iF92zysXZC66IfMMM7iWWIikSp5SuIZ+u/DkZbf0ZdgAzqgnyxZx3t5nrsjj0up0GdO16StkUP50iEQChAG70TubFMLawQVKAhcjiSMVdj/y8hEEuReDq/kB49uCkZNf2Xx6VswkGOFhqbnF6Np0DG1NTpgE15OErl+Gyk5lBfW0zurMCyXifSYNU7TQg6vlvIFgkN33lDBphqPbnjnNKGctJNE1uCgQkLng7CBCuVQFtZTeEyk5phqoEIm0uGnRjtUckiuwWQv8HEMD3I0JDoNiXDo0d2iEs42pE0ubqFsUDyaglkkYgpl+TgR1okSZlgKjyVmZJ14dIOLYRB9HMG671modS+zCnM0PbwnB72I4FLeQqkVEPveOZlU2jw/TcKXaYReton0WYEV8Bpa1CzvyWmTy0RW2vyBJmecTlvGhjWhpxdWLVh+N9qAtciYbG2N2ODYPwJUZg2hIdYCdV3qLCw6ufasannok51dY0Y7iq4iN0yZY/ZJY4g8MnYYzTFvWbb/cCgruH/+9Ils20TmWm0Z1YYwR3dg9V1TodPZqgpGr/piNBe20kSoklASfuEJKwHe69x4Yc03+ceqsKppERxMg2dR45ZzM2tLBHPg3LpOVz4EJx9kXbZsmDSV2EEdlV/GBOLvLXPpa2t8pO1Jmn42p1CxKw/Om90cubaz6Q5h6yyZW1cByaFsGq0OIBoXKK7tTIxeicajEmRF7WyG3gsqtBerAmFP8R6qOsR/dpbiz4M07eGTX2a9waka9OCn02e9weDZs7OzwSBN01RGOJqS/JZX4BwsuOUQVv5YVLveXQYFws4FrDIsIpeIplbh1zqhsERCse6XYm4dp1loUP0DpNaN74sV9dtKku1zJse2RwVQhxEDxiitbfdD/yGgxh/Tj6apuM7tDRMDukRmxN/oukbFhX9ITlTWubAbZLAdo2yTB7SJNpFZASZH9RXF9LFAKtDtuVFZpecaVVdi7G7UjM5Z92V/XrOYqNB7yFHobaQjQH0ZK2vTJbe2rhXUk73afNtQcC/mj2z3NXSJ+Zl1oY5XZT04VskjExpFVyGihkVp4d+s6a9E8FxsvXeJEtbGXLVZ1jgXu82mht8EcLneHZLTeNulWiBPIYEuj+bwnnGlND9CKVZrBMxsQxsnjppVDbJpg3Rn3Y0gXaFtYhpzU/6KjWe8DpIX7Bg5S9Ptbh0y7IDR00NGPxhoqLBO/41K9MT5xUjc4EKsE+cHsf8HYp8eEvvGuplWCo3oiZHxzXyuM80dpkZXae/DkfsHu98/u2fHGnHcQeIx3eSbQ94POr9vOttEVkiF5fG2tj4gz0PoUJ7w/Hyy7Pb59iRfT73uNs6xk80I/J6JjFxtD8Jr3wuisDaI8QEnCMlk9fCmOx///nEcjhqcIJebufB1F9B6dF6TEEakdDOQ8CTY8jw9t8H+KvTzcJrZjPy8s8hEciQRxdN+2g8HZoahArNlaz3CdBDs4L/cJPk3XUpEYAjv6aQuQRu23biSFUYKriRLy0QOtw5b0YVJEg5gLLNczsDjB1e2Lf/9qUG3iNzcgtMw4+ivllJpz89KDudQ+v1Lhe0YHl2u9trH4j++ajgKQTekGB5RgrQcSpnIG1xs35i0kzaRBYJCF+KLn1/GKHpjVrJZftB62qRbcZ5lWNNnZSdbNXLx5/sxZ+3qrqIKFSod3PElAtxFV20dL5CGy/jfUpZg8gZylo06Ocdht0T2SiJEdRSM5TJKjO0NmrZdY0P8zsC07T8gm6hA
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -131,7 +131,7 @@ Create a new group on the target node.
required={false}
schemaName={"integer"}
qualifierMessage={undefined}
- schema={{"type":"integer","description":"Numeric group ID. If omitted, the system assigns one."}}
+ schema={{"type":"integer","description":"Numeric group ID. If omitted, the system assigns one.","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=0"}}}
>
diff --git a/docs/docs/gen/api/post-node-package-update.api.mdx b/docs/docs/gen/api/post-node-package-update.api.mdx
index a4edd0399..83a248284 100644
--- a/docs/docs/gen/api/post-node-package-update.api.mdx
+++ b/docs/docs/gen/api/post-node-package-update.api.mdx
@@ -5,7 +5,7 @@ description: "Refresh package sources (apt update) on the target node."
sidebar_label: "Update package sources"
hide_title: true
hide_table_of_contents: true
-api: eJztV01v4zYQ/SvEnBKAdpSts20F9JCiDZqi2wa7CfaQGgYtji3GEqklR964hv57MaT8EdtoF+gu0MOeIsXz+d4jZ7QGjaHwpiHjLOTwFmceQykaVSzUHEVwrS8wiDPVkGgbrQjPhbOCShSk/BxJWKdx+KcFCaTmAfJHuEvOkzfKqjnWaGlyfXc76WNOXINecb4AYwnbt1sNOdy5QL87jX2Ih5gRJAQsWm9oBfnjGn5E5dFft1Rytj5s/tEbQhh3YwmN8qpGQh+ivVU1Qg6lCxQfJRjutVFUggSPH1rjUUNOvkV5AMh9alLN0ZLYRJDCY0C/RC28a8nYuViqqkVxNlF2JcVEVdW5FM6LSk2xEgErLMh5cbbAVR5NzxNkzwOnGjMonMY52gE+k1eDhOMalqoysf98W6Ssjf3hUsZfJokA6CSEosRasQ+tGrYP5I2dg4Ta2N/Qzhmqy46x8RgaZwPGDK+yjP+8bPnugPtEux6ChMJZQkvso5qmMkVk7uIpsOP6uAw3fcKCQELjmWcyKe2Tm06MPlXuzPlaEeTQtkbDERkliic3Fbc/iTagFuRE412BIQgqTRCMEgbiSvFZ1U3Fsa+uMvxulGUDfPX9dDC61KOB+vby9WA0ev366mo0yrIsYww9hraisFeV8l6tWC2EdTjV1eHZ4QDCzYTanh9jA6mqYsHUbolREwlPsRW+mDkvnMUor+ERWFvZnoDrZQG/9JZcAh/QJFoqFW1gYswYqG3uYVQPKWrDqfho25rPmFswN8pUyKSEhWka1Hx6j/lJwTYlvGwy5k5ddhI+ramNGtk6uhWlsnPcV8/UuQqVPXJ9XyKV6A8KqZ02M4NahFUgrGPBKTJ67/y/V/Qzm4kaQ4gM72OdIBpC1+3fK4/7V08P9lgCGYoC7Tt801IsMMkIusMYG33+o2c82uzbSRhll8eH+8GqlkrnzV+oxUBc392KBa7ENtFnO+OfCOa12HvfqCb6JuG6omi9T7fP7kzfRJz5/Hskb3C50V3kUSMpU50U9EFyrQ0/qkr0PkJNXUu7Ik6m1S1yaov00fmFIFOja5Om+SLfy2ss4Rz9yYssNckOL5JcZRmTt6E4iu2I2G+Oib1xfmq0RisG4taGdjYzhWFNNuhrE0Kct1/Z/f+ze3VqJqc7J04O3jYO1rPPOJq/EvuFiO0k1Eil4y23cSEizwtoDhe8QV+sNzOiu+jZvWh3269fpmV2vFuF3zGjibT9hXjbREnUQL8axikZjUD2DzebTevX9/dxXhk7c9G9b+E6TrTdDs+zAiRwIQmNy2E2jJsTt1OrKLN+1U57+6FMD/Fc70T7Hz88UseEz3TRVMpYrqr1FadIID8CW4OEfG8U97lAQo/0WMZJzebr9VQFfPBV1/G/P7ToVwn/pfJGTRmixzVoE/hZQz5TVTj8ethv8OxtP2LPxRf+pjiJxmaltbzQRmvIASQscLX/adSNOwklKo0+9pd+vi4KbGjP8eiG4S+Lrbzv/nh3DxLUSz0e6C+GP1nVep0s7t0CbddtiyR+5wq77m9lIRsL
+api: eJztV99v2zYQ/leIe0oA2nE6u9sE7MHFFizDugZtgj5khkGLZ4uxRKrkyY1n6H8fjpQdxza2AtuADshTpPh+ft9H6m4DGkPuTU3GWcjgPc49hkLUKl+qBYrgGp9jEGeqJtHUWhGeC2cFFShI+QWSsE5j/3cLEkgtAmT3cJOcp2+VVQus0NJ0fHM97WJOXY1ecb4AEwm7t2sNGdy4QL85jV2Iu5gRJATMG29oDdn9Bt6g8ujHDRWcrQubffaGECbtREKtvKqQ0Idob1WFkEHhAsVHCYZ7rRUVIMHjp8Z41JCRb1AeAHKbmlQLtCS2EaTwGNCvUAvvGjJ2IVaqbFCcTZVdSzFVZXkuhfOiVDMsRcASc3JenC1xnUXT8wTZY8+p2vRyp3GBtoeP5FUv4biBlSpN7D/bFSkrY3+4lPGXaSIAWgkhL7BS7EPrmu0DeWMXIKEy9le0C4bqsmVsPIba2YAxw6vBgP88b/nmgPtEu+6DhNxZQkvso+q6NHlk7uIhsOPmuAw3e8CcQELtmWcyKe2Dm02NPlXu3PlKEWTQNEbDERkFigc3E9c/iiagFuRE7V2OIQgqTBCMEgbiSvFRVXXJsUejAX43HAx6+Or7WW94qYc99e3l695w+Pr1aDQcDgaDAWPoMTQlhb2qlPdqzWohrMKprg7PDgcQbi7U7vwYG0iVJQumciuMmkh4ip3wxdx54SxGefWPwNrJ9gRczwv4ubPkEviAJtFSoWgLE2PGQO1y96N6SFETTsVH21R8xtySuVGmRCYlLE1do+bTe8xPCrYt4XmTMXfqspXwZU1t1cjW0S0vlF3gvnpmzpWo7JHrxwKpQH9QSOW0mRvUIqwDYRULTpHRe+f/vqKf2ExUGEJkeB/rBFEf2nb/Xrnfv3o6sCcSyFAUaNfh24ZigUlG0B7G2OrzLz3j0WbfVsLw1OF+o/T2mIie6G4YhiU2/y+e8S8Ecyz23reqib5JuC7PG+/T7fN0pq8iznz+PZI3uNrqLvKokZQpTwr6ILnWhh9VKTofoWauoaciTqbVDXJqi/TZ+aUgU6Frkqb5It/LayzhAv3Jiyw1yQ7PkowGAyZvS3EU2xGxl8fE3lnVUOG8+QO16InxzbVY4lrsFPRC7P+B2G+Oib1yfma0Rit64tqGZj43ueHLpkZfmRDiIPXC7tfP7ujUfZw+JnEk4DHyYO5+uY+/fmJbCRVS4Xh9qV2IyPNmkcEFr0YXm+3Hv73o2L1ontYav0pbyuRpx/nAjCbS9jedXRMFUQ3dzB/Hn2gEsnu42o7Qv3y8jYOIsXMX3bsWxnFUeVrO+FsBEriQhMZlf9CPIzG3U6kos26HSgvZoUwP8dw8ifYfbpSpY8JHuqhLZSxX1fiSUySQ74GtQUK2N2N1uUBCh/RExhGMzTebmQp458u25X9/atCvE/4r5Y2aMUT3G9Am8LOGbK7KcLgW7jd49r77xJ6L/3hZPInGdlexvKlEa8gAJCxxvb/ztpNWQoFKo4/9pZ/HeY417Tke3TC8Mu7kffPuwy1IUM/1eKC/GP5kVZtNsrh1S7RtuyuS+J0rbNs/AR0hv7o=
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -250,6 +250,97 @@ Refresh package sources (apt update) on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/post-node-service-disable.api.mdx b/docs/docs/gen/api/post-node-service-disable.api.mdx
index dcc190a37..d922c8736 100644
--- a/docs/docs/gen/api/post-node-service-disable.api.mdx
+++ b/docs/docs/gen/api/post-node-service-disable.api.mdx
@@ -5,7 +5,7 @@ description: "Disable a systemd service on the target node so it does not start
sidebar_label: "Disable a service"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe0oB2nE6p9sE7CFDWyzDugVtij5khkGLZ4uxRKrkKY1n6H8fjpQcxfawtmuBPfTJksy7++67n9yCxpB7U5NxFjJ4boJalCiUCJtAWGkR0N+ZHIWzggoUpPwKSVinUQQnDAntMAjrSARSnvjcwjka/2lBAqlVgOwG3iQl81fKqhVWaGl+cXU573TPXY1eMYIAMwm7t0sNGVy5QL87jZ2KDiBICJg33tAGspst/IzKo79oqGBznd7sgzeEMGtnEmrlVYWEPsTzVlUIGRQuUHyUYNj9WlEBEjy+b4xHDRn5BuUeR9eJArVCS6LXIIVHNotaeNeQsStxp8oGxclc2Y0Uc1WWT6RwXpRqgaUIWGJOzouTNW6yePRJ4ux+5FRtRrnTuEI7wnvyapSI3MKdKo1WxNh7kLIy9qczGf+Zp/BAKyHkBVaKZWhT8/lA3tgVSKiM/Q3tiqk6a1u5I+OTiehCIhprSLC0OMHxaiyFXRl7L0UIhf5PTn2KHzNGG2pnA0alTycT/jmOWKcs0mOQkDtLaIkPq7ouTR5z7/Q2sMT20L5b3GJOIKH2nKlkkr1bt5gbfQzn0vlKEWTQNEbDQTYVKG7dQlw+F01ALciJ2rscQxBUmCCYEQzESPFeVXXJus/PJ/jDdDIZ4dMfF6PpmZ6O1Pdnz0bT6bNn5+fT6WQymTB5HkNTUhigUt6rDUeZsArHvHqM7nVUINySO0JHXtVQpIiTWeXpqS9ZsXReOIuxLsYHJO3q7QhNjw3/0p1k09x3UrVRoainh7ligna2xzFdSFETjulH21TcHNyaY6JMiRyMsDZ1jZr7zmFckrIewmMno+3kZSvh45w6KJgomxfKrnCYOgvnSlT2QP5dgVSg30NTOW2WBnXXsiPqpBm9d/7fYb3gY6LCENQKhRkSnngaQ9sOm8HNsHF2jM8kkKGYnZ2br7o8eWHJb6DdV9Hn5j8Lvu7qmWVbCdPJ2WFFv7WqocJ58xdqMRIXV5dijRuxM/TF6vsjubwQg/c+c6JsSl6X5433qfM81PPLSDPXvkfyBu/63Ith1EjKlEeTes+41oYfVSk6GaEWrqEHEEfN6gbZtEX64PxakKnQNSmvuWEP7BpLuEJ/tIklJ1ngkZHzyYSD14c45tpBYL87DOxL5xdGa7RiJC5taJZLkxtOyRp9ZUKI28K36P7/o3t+bBCnlpPGMO9K3Wz5gvP4W0S/UkRbCRVS4Xg5r12IzPO2mMEp3wpOt/1saE+7qJ5u06se7O7+Lq3is4dF/g1HNgVvuM7vnCmIaugWwjgl4yGQ3cPLfs369d11nFfGLl0U71y5iBPt4QrCwwIkMJDEytl4Mo5rE7tVqZhu3W48uBcln/Yp3T7k7Re/RCX3Ce/ptC6VsQyx8SUbTczfAKsCCdlwLu+AZt2Xnv+ZjPOb5bbbhQr41pdty5/fN+g3KSp3ypt4mq9L/b4M2VKVYf8iMPT95HU3eZ+Ir3xPOkpLv+Va3nHjacgAJKxxM7zu8a3ns3z6hCvPZ+BL2GathAKVRh+5T39d5DnWNBA66I18A9oV5tUfb65BgnpcQXsVE9UfRbTdphPXbo22bXcAid8ZYdv+Dd7+nh0=
+api: eJztV21v2zYQ/ivEfUoB2nE6p9sE7EOKtliGdQvSFP2QGQYtni0mEqmSpzSeof8+HCk5iu1hbdcBHdBPkZx7ee65F91tQGPIvanJOAsZvDBBLUoUSoR1IKy0COjvTI7CWUEFClJ+hSSs0yiCE4aEdhiEdSQCKU8st3COxn9YkEBqFSC7hjfJyPy1smqFFVqan12czzvbc1ejV4wgwEzC9u1cQwYXLtBvTmNnogMIEgLmjTe0hux6A89RefRnDRXsrrObffCGEGbtTEKtvKqQ0Icob1WFkEHhAsVHCYbDrxUVIMHj+8Z41JCRb1DucHSVKFArtCR6C1J4ZLeohXcNGbsSd6psUBzNlV1LMVdl+UQK50WpFliKgCXm5Lw4usV1FkWfJM7uR07VZpQ7jSu0I7wnr0aJyA3cqdJoRYy9BykrY386kfE/85QeaCWEvMBKsQ6ta5YP5I1dgYTK2F/Rrpiqk7aVWzI+mYguJaKxhgRriyMcr8ZS2JWx91KEUOh/FdSnxDFjtKF2NmA0+nQy4T+HEetURXoMEnJnCS2xsKrr0uSx9o5vAmts9v27xQ3mBBJqz5VKJvm7cYu50YdwLp2vFEEGTWM07FVTgeLGLcT5C9EE1IKcqL3LMQRBhQmCGcFAjBTvVVWXbPv0dII/TCeTET79cTGanujpSH1/8mw0nT57dno6nU4mkwmT5zE0JYUBKuW9WnOWCatwKKrH6C6jAeGWPBE68qqGIkVczCpPT33LiqXzwlmMfTHeI2nbbwdoeuz4506SXfPcSd1GhaKeHuaKCdr6HsdyIUVNOGQfbVPxcHC3nBNlSuRkhFtT16h57uznJRnrITwOMvpOUbYSPi6ovYaJunmh7AqHpbNwrkRl9/TfFUgF+h00ldNmaVB3IzuiTpbRe+f/GdZLFhMVhqBWKMyQ8MTTGNp2OAyuh4OzY3wmgQzF6uzCfN3VyUtLfg3trom+Nv9e8bLrZ9ZtJUwPdfRzpfsWESPRTRJmJcb+Bfv7I7k8E4P3vnKibipel+eN92nyPPTzq0gz975H8gbv+tqLadRIypQHi3rHudaGH1UpOh2hFq6hBxAH3eoG2bVF+uD8rSBToWtSXfPAHvg1lnCF/uAQS0GywiMnp5MJJ69Pcay1vcSe7Cf2rVUNFc6bP1GLkTi7OBe3uBbbCvqW2P9DYr/bT+wr5xdGa7RiJM5taJZLkxueNTX6yoQQ18Bv2f36s3t6aB6nb0nar3gJ7paGb4P4689oK6FCKhxfXbULkXk+AzI45nPveNN/9NvjLqvHm/SqB0eZv0s31uzhQnvDmU3JG95p22AKohq6TT+uP1EIZPfwqt+ff3l3FRcRY5cuqnehnMVV5eG25I8FSGAgiZWT8WQc92EOq1Kx3LqjZ3Dwpph2Kd081O0Xv45T+IT3dFyXyliG2PiSnSbmr4FNgYRsuHBtgWbdLz3/MxkXM9bbbBYq4Ftfti3//L5Bv05ZuVPeRGm+g/tDCLKlKsPuhTeM/eiy+/I+Ef/xAXyQlv58sXy8RGnIACTc4np4x/M5+1kxfcIt+xn4ErZZK6FApdFH7tO/zvIcaxoo7c1GPm23jXnx+5srkKAed9BOx0TzBxFtNkniyt2ibdstQOJ3Rti2fwFbykLb
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Disable a systemd service on the target node so it does not start on boot.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/post-node-service-enable.api.mdx b/docs/docs/gen/api/post-node-service-enable.api.mdx
index 708ab4a04..9e00a6e73 100644
--- a/docs/docs/gen/api/post-node-service-enable.api.mdx
+++ b/docs/docs/gen/api/post-node-service-enable.api.mdx
@@ -5,7 +5,7 @@ description: "Enable a systemd service on the target node so it starts on boot."
sidebar_label: "Enable a service"
hide_title: true
hide_table_of_contents: true
-api: eJztV91v2zYQ/1eIe0oA2lE6p9sE7CHDWizDugZtij5khkGLZ4uxRKrkKY1n6H8fjpQ/YntY07XAHvpkyeLd/e53n1yBxlB405BxFnJ4YdW0QqFEWAbCWouA/t4UKJwVVKIg5edIwjqNIjhhSARSngJ/nzpHwz8tSCA1D5DfwtskPHmlrJpjjZYml9dXk17nxDXoFRsOMJawebvSkMO1C/SH09irSLhAQsCi9YaWkN+u4GdUHv1lSyVb69XmH70hhHE3ltAor2ok9CGet6pGyKF0geKjBMNON4pKkODxQ2s8asjJtyj3mLlJnqs5WhJrDVJ4ZLOohXctGTsX96pqUZxMlF1KMVFVdSqF86JSU6xEwAoLcl6cLHCZx6OnibKHgVONGRRO4xztAB/Iq0HicQX3qjJaEWNfg5S1sT+dy/hlkqICnYRQlFgrlqFlw+cDeWPnIKE29ne0c6bqvOvkhownE9FHRLTWkGBpcYLD+VAKOzf2QYoQSv2fnHqKH2NGGxpnA0alz7KMf44jxphEeggSCmcJLfFZ1TSVKWLmnd0FFlgdmnfTOywIJDSe85RMMnfnphOjj8GcOV8rghza1mg4SKYSxZ2biqtfRBtQC3Ki8a7AEASVJggmBAMxUnxQdVOx7ouLDH8YZdkAn/04HYzO9Wigvj9/PhiNnj+/uBiNsizLmDuPoa0o7KBS3qslB5mwDse8eozuTVQg3Iz7QM9d3VKkiHNZFelpXbBi5rxwFmNZDA9I2pTbEZoeG/61P8mmudukYqNS0Zoe5ooJ2tgexmwhRW04ph9tW3NvcAuOiTIVcjDCwjQNau46h3FJytYQHjsZbScvOwmf5tRBvUTZolR2jrupM3WuQmUP5N+XSCX6PTS102ZmUPeNOqJOmtF75/8d1gs+JmoMQc1RmF3CE09D6LrdXnC72zd7xscSyFDMzt7NV32evLDkl9Dtq1jn5j8LvunLmWU7CaPs/LCg31nVUum8+Qu1GIjL6yuxwKXYGPpi9f2JXF6Knfd15kTZlLyuKFrvU+fZ1vPLSDPXvkfyBu/XuRfDqJGUqY4m9Z5xrQ0/qkr0MkJNXUtbEEfN6hbZtEX66PxCkKnRtSmvuV/v2DWWcI7+aBNLTrLAIyMXWcbBW4c45tpBYL87DOxL56dGa7RiIK5saGczUxhOyQZ9bUKIu8K36P7/o3txbA6nlhOnMG9K/Wj5guP4W0C/UkA7CTVS6Xgzb1yIzPOumMMZXwXOVuvR0J31UT1bpVfcLu7+Pu3h4+0W/5YDm2K3u8tvfCmJGui3wTgj4yGQ/cPL9ZL12/ubOK2Mnbko3ntyGefZ9vrBowIkMJBEyvkwG8alib2qVcy2fjHeXoWSR/uErrZZ+6WuTclpwgc6ayplLANrfcW2Et23wCpAQr47izf48v6fnvSxjCObxVarqQr4zlddx39/aNEvUyjulTfxNF+QtAlxRYZ8pqqwv/rvenzyph+2p+Ir34yOsrJebC2vtfE05AASFrjcveDxPeezfHrCJecz8CVs405CiUqjj9ynT5dFgQ3tCB30Q77zbIrx+vXbG5CgHpfNXplE9UcRrVbpxI1boO26DUDid0bYdX8DzDmVIw==
+api: eJztV99v2zYQ/leIe0oB2nE6p9sE7CHFWizDugZpij5khkGLZ4uxRKrkKY1n6H8fjpRsx/awtuuADuiTJYt39913P3i3Bo0h96Ym4yxk8MKqWYlCibAKhJUWAf29yVE4K6hAQcovkIR1GkVwwpAIpDwF/j5zjoZ/WJBAahEgu4U3SXj6Slm1wAotTS+uLqedzqmr0Ss2HGAiYfN2qSGDKxfod6exU5FwgYSAeeMNrSC7XcNzVB79RUMFW+vUZh+8IYRJO5FQK68qJPQhnreqQsigcIHiowTDTteKCpDg8X1jPGrIyDco95i5SZ6rBVoSvQYpPLJZ1MK7hoxdiHtVNihOpsqupJiqsnwihfOiVDMsRcASc3JenCxxlcWjTxJlDwOnajPIncYF2gE+kFeDxOMa7lVptCLG3oOUlbE/ncn4ZZqiAq2EkBdYKZahVc3nA3ljFyChMvY3tAum6qxt5YaMTyaii4horCHB0uIEh4uhFHZh7IMUIRT6Xzn1KX5MGG2onQ0YlT4djfjnOGKMSaSHICF3ltASn1V1XZo8Zt7pXWCB9aF5N7vDnEBC7TlPySRzd242NfoYzLnzlSLIoGmMhoNkKlDcuZm4/Fk0AbUgJ2rvcgxBUGGCYEIwECPFB1XVJes+Px/hD+PRaIBPf5wNxmd6PFDfnz0bjMfPnp2fj8ej0WjE3HkMTUlhB5XyXq04yIRVOObVY3TXUYFwc+4DHXdVQ5EizmWVp6e+YMXceeEsxrIYHpC0KbcjND02/Et3kk1zt0nFRoWinh7migna2B7GbCFFTTimH21TcW9wS46JMiVyMMLS1DVq7jqHcUnKegiPnYy2k5ethI9z6qBeomxeKLvA3dSZOVeisgfy7wqkAv0emsppMzeou0YdUSfN6L3z/wzrBR8TFYagFijMLuGJpyG07W4vuN3tmx3jEwlkKGZn5+arLk9eWPIraPdV9Ln594LXXTmzbCthfKygnyvdl4gYiK6RMCvR9y9Y3x/J5YXYee8zJ8qm5HV53nifOs+2nl9Gmrn2PZI3eN/nXgyjRlKmPJrUe8a1NvyoStHJCDVzDW1BHDWrG2TTFumD80tBpkLXpLzmfr1j11jCBfqjTSw5yQKPjJyPRhy8PsQx1w4Ce3YY2LdWNVQ4b/5ELQbi4upSLHElNhn0LbD/h8B+dxjYl87PjNZoxUBc2tDM5yY33Gtq9JUJIQ6B36L79Uf3/Fg/TndJHK94BO5mhm99+OsPaCuhQiocr1y1C5F5XgIyOOUd73Td3/ntaRfV03V6xe1G5u/TgjXZrmdvOLApdrtL2saXgqiGbsyPw088BLJ7eNlPz7++u4ljiLFzF8U7Ty7ioLLdK/mqAAkMJJFyNhwN4zTMXlUqZlu38Wx33OTRPqHrbdZ+qX04OU34QKd1qYxlYI0v2Vai+xZYBUjIdoesDb6s+6cjfSLjLMZi6/VMBXzry7blv9836FcpFPfKm3iaN19tQtx9IJurMuzvdLsen1x3l+0T8R+vvEdZ6TcWy/tKPA0ZgIQlrnY3d15gP8unT9hePwNfwjZpJRSoNPrIffp0kedY047QQT/kZXZTjFev39yABPW4bPbKJKo/imi9Tidu3BJt224AEr8zwrb9C2miOeE=
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Enable a systemd service on the target node so it starts on boot.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/post-node-service-restart.api.mdx b/docs/docs/gen/api/post-node-service-restart.api.mdx
index 28880a26c..9c7813ba3 100644
--- a/docs/docs/gen/api/post-node-service-restart.api.mdx
+++ b/docs/docs/gen/api/post-node-service-restart.api.mdx
@@ -5,7 +5,7 @@ description: "Restart a systemd service on the target node."
sidebar_label: "Restart a service"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe0oB2nE6p9sE7CHDWizDugZtij5khkGLZ4uxRKrkKY1n6H8fjpQcxfawtmuBPfTJksy7++67n9yCxpB7U5NxFjJ4jYGUJ6FE2ATCSouA/s7kKJwVVKAg5VdIwjqN4z8tSCC1CpDdwJt0bv5SWbXCCi3NL64u55343NXoFRsJMJOwe7vUkMGVC/SH09ip6DCAhIB54w1tILvZws+oPPqLhgo21+nNPnhDCLN2JqFWXlVI6EM8b1WFkEHhAsVHCYY9rBUVIMHj+8Z41JCRb1Du0XCdvFQrtCR6DVJ4ZLOohXcNGbsSd6psUJzMld1IMVdl+UQK50WpFliKgCXm5Lw4WeMmi0efJM7uR07VZpQ7jSu0I7wnr0aJyC3cqdJoRYy9BykrY386k/GfeYoAtBJCXmClWIY2NZ8P5I1dgYTK2N/Rrpiqs7aVOzI+mYguJKKxhgRLixMcr8ZS2JWx91KEUOj/5NSn+DFjtKF2NmBU+nQy4Z/jiH3KItRjkJA7S2iJT6u6Lk0ek+/0NrDI9hCAW9xizhlYe05VMsngrVvMjT4GdOl8pQgyaBqj4SCdChS3biEufxFNQC3Iidq7HEMQVJggmBIMxEjxXlV1ybrPzyf4w3QyGeHTHxej6ZmejtT3Z89G0+mzZ+fn0+lkMpkwex5DU1IYoFLeqw2HmbAKx7w6qPmmJOGWXPUde1VDkSLOZpWnp75mxdJ54SzGwhgfkLQruCM0PTb8a3eSTXNvSeVGhaKeHuaKCdrZHsd8IUVNOKYfbVNxd3BrjokyJXIwwtrUNWpuPIdxScp6CI+djLaTl62Ej3PqoGKibF4ou8Jh6iycK1HZA/l3BVKBfg9N5bRZGtRdW46ok2b03vl/h/Wcj4kKQ1ArFGZIeOJpDG077AY3w87ZMT6TQIZidnZuvuzy5Lklv4F2X0Wfm/8s+LoraJZtJUwnZ4cl/daqhgrnzV+oxUhcXF2KNW7EztAXq++P5PJCDN77zImyKXldnjfep87zUM8vIs1c+x7JG7zrcy+GUSMpUx5N6j3jWht+VKXoZIRauIYeQBw1qxtk0xbpg/NrQaZC16S85o49sGss4Qr90SaWnGSBR0bOJxMOXh/imGsHgf3uMLAvnF8YrdGKkbi0oVkuTW44JWv0lQkhrgvfovv/j+75sUmcWk43h3lb6obLFxzI30L6lULaSqiQCsfree1CZJ73xQxOefU/3fbDoT3tonq6Ta9+sL37u7SMzx5W+Tcc2RS84UK/c6YgqqFbCeOYjIdAdg8v+j3rt3fXcWAZu3RRvHPlIo60h0sITwuQwEASK2fjyTjuTexWpWK6ddvx4PKTfNqndPuQt59zU0oeEt7TaV0qYxlF40vWm8i9AT4NErLh7N1hybovPcUzGWc0y223CxXwrS/blj+/b9BvEvF3yhu1YG5utqBN4GcN2VKVYX/bH7p38rqbrk/EV74MHaWl32Qt77HxNGQAEta4Gd7p+GrzWT59wr3mM/AlbLNWQoFKo4/cp78u8hxrGggdtD++5uxq7+rVm2uQoB4XyV5RRPVHEW236cS1W6Nt2x1A4ndG2LZ/A4a/i7s=
+api: eJztV21v2zYQ/ivEfUoB2nE6p9sE7EOKtViGdQvaFP2QGQYtni3GEqmSpzSeof8+HCk5iu1hbbcBHdBPkZx7ee65F91tQWPIvanJOAsZvMZAypNQImwCYaVFQH9nchTOCipQkPIrJGGdxvHvFiSQWgXIbuBNkpu/UlatsEJL84ury3mnPnc1esVOAswk7N4uNWRw5QL96jR2JjoMICFg3nhDG8hutvAclUd/0VDB7jq72QdvCGHWziTUyqsKCX2I8lZVCBkULlB8lGA4wlpRARI8vm+MRw0Z+QblHg3XKUq1QkuityCFR3aLWnjXkLErcafKBsXJXNmNFHNVlk+kcF6UaoGlCFhiTs6LkzVusij6JHF2P3KqNqPcaVyhHeE9eTVKRG7hTpVGK2LsPUhZGfvDmYz/macMQCsh5AVWinVoU7N8IG/sCiRUxv6CdsVUnbWt3JHxyUR0KRGNNSRYW5zgeDWWwq6MvZcihEL/o6A+JY4Zow21swGj0aeTCf85jtinKkI9Bgm5s4SWWFrVdWnyWHynt4FVtocA3OIWc67A2nOpkkkOb91ibvQxoEvnK0WQQdMYDQflVKC4dQtx+aNoAmpBTtTe5RiCoMIEwZRgIEaK96qqS7Z9fj7B76aTyQiffr8YTc/0dKS+PXs2mk6fPTs/n04nk8mE2fMYmpLCAJXyXm04zYRVOBbVQc83JQm35K7v2KsaihRxNas8PfU9K5bOC2cxNsb4gKRdwx2h6bHjnzpJds2zJbUbFYp6epgrJmjnexzrhRQ14Zh9tE3F08GtOSfKlMjJCGtT16h58BzmJRnrITwOMvpOUbYSPi6og46Junmh7AqHpbNwrkRlD/TfFUgF+j00ldNmaVB3YzmiTpbRe+f/HtYLFhMVhqBWKMyQ8MTTGNp2OA1uhpOzY3wmgQzF6uzCfNXVyQtLfgPtvom+Nv9a8XXX0KzbSpgea+nnSvctIkaiGyXMSoz9X+zvj+TyQgze+8qJuql4XZ433qfJ89DPLyPN3PseyRu862svplEjKVMeLeo951obflSl6HSEWriGHkAcdasbZNcW6YPza0GmQtekuuaJPfBrLOEK/dEhloJkhUdOzicTTl6f4lhrB4k9O0zsW6saKpw3f6AWI3FxdSnWuBG7Cvqa2P9DYr85TOxL5xdGa7RiJC5taJZLkxueNTX6yoQQ98Cv2f3ys3t+bB6nb0m3YPEa3G0NXyfxl5/SVkKFVDi+u2oXIvN8CGRwyjfd6bb/6renXVZPt+nVD84yf5eurNnDjfaGM5uSN7zUdsEURDV0u37cf6IQyO7hZb9A//zuOm4ixi5dVO9CuYi7ysN1yV8LkMBAEitn48k4LsQcVqViuXVnz+CqTTHtU7p9qNvPOYFThIT3dFqXylhG0fiS7SZyb4ClQUI2XKp2WLLul57imYzLF+tttwsV8K0v25Z/ft+g3yTi75Q3asHc3GxBm8DPGrKlKsP+GTcM7+R193V9Iv7jK/coLf2JYvlAidKQAUhY42Z4rPPN+lkxfcLB+hn4ErZZK6FApdFH7tO/LvIcaxooHYw/vl93vXf125trkKAeN8leU0TzRxFtt0ni2q3Rtu0OIPE7I2zbPwGoOTB5
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Restart a systemd service on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/post-node-service-start.api.mdx b/docs/docs/gen/api/post-node-service-start.api.mdx
index 77da2b375..e0383d9b4 100644
--- a/docs/docs/gen/api/post-node-service-start.api.mdx
+++ b/docs/docs/gen/api/post-node-service-start.api.mdx
@@ -5,7 +5,7 @@ description: "Start a systemd service on the target node."
sidebar_label: "Start a service"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe0oB2lE6J9sE7CHDGizDugZNij5khkGLZ4uxRKrkKY1n6H8fjpQdx/awpmuBPfQpVHw/vvvujndcgcZQeNOQcRZyuCblSSgRloGw1iKgvzcFCmcFlShI+TmSsE7j8E8LEkjNA+S3cJ3kJq+VVXOs0dLk/Opy0qtPXINesYsAYwmbr0sNOVy5QH84jb2JiAAkBCxab2gJ+e0Kfkbl0Z+3VLKz3mr+0RtCGHdjCY3yqkZCH6K8VTVCDqULFI8SDEfXKCpBgscPrfGoISffotyh4CbFqOZoSawtSOGR3aIW3rVk7Fzcq6pFcTRRdinFRFXVCymcF5WaYiUCVliQ8+Jogcs8ir5IjD0MnGrMoHAa52gH+EBeDRKNK7hXldGKGPsapKyN/elExl8miX/oJISixFqxDi0blg/kjZ2DhNrY39HOmaqTrpMbMp5NRJ8Q0VpDgrXFEQ7nQyns3NgHKUIo9X8K6jlxjBltaJwNGI2+zDL+cxhx4BpCPQQJhbOEllhWNU1lilh4x3eBFVb77t30Dguuv8ZzmZJJ7u7cdGL0IZgz52tFkEPbGg17xVSiuHNTcfmLaANqQU403hUYgqDSBMGEYCBGig+qbiq2fXqa4Q+jLBvgyx+ng9GJHg3U9ydng9Ho7Oz0dDTKsixj7jyGtqKwhUp5r5acZMI6HIrqKbq30YBwM+74nru6pUgR17Iq0mndr2LmvHAWY1sM90jatNsBmp46/rWXZNd8r6Rmo1LRmh7migna+B7GaiFFbThkH21b893gFpwTZSrkZISFaRrUfOns5yUZW0N4GmT0naLsJHxaUHv9EnWLUtk5bpfO1LkKld3Tf18ileh30NROm5lB3V/JEXWyjN47/++wXrGYqDEENUdhtglPPA2h67bvgtvte7NnfCyBDMXq7MN83dfJK0t+Cd2uiXVt/rPi276dWbeTMMpO9hv6nVUtlc6bv1CLgTi/uhQLXIqNoy/W35/I5bnY+l5XTtRNxeuKovU+3TyP/XwRaebe90je4P269mIaNZIy1cGi3nGuteGjqkSvI9TUtfQI4qBb3SK7tkgfnV8IMjW6NtU139dbfo0lnKM/eImlIFnhiZPTLOPkrVMca20vsd/tJ/bC+anRGq0YiEsb2tnMFIZLskFfmxDiqvAtu///7J4emsPpyolTmDelfrR8wXH8LaFfKaGdhBqpdLyYNy5E5nlXzOGYl/7j1Xo0dMd9Vo9X/edmb/f3aQ0fPy7x15zXlLrtVX4TSknUQL8MxhEZhUD2h4v1jvXb+5s4rIyduajeB3Iex9nj44MnBUhgIImTk2E2jDsTB1WrWGz9Xrx58qR4dulcPdbs819HKTrCBzpuKmUsI2h9xVYTrbfA0iAh3565GyT54xT2xLOUpVhrtZqqgO981XX87w8t+mWi/F55o6bMyu0KtAl81pDPVBV2N/zt0I7e9jP1hfjKD6CDpKz3V8vba5SGHEDCApfb7zh+znxWTM94y3wGvoRt3EkoUWn0kfv003lRYENbSnvXHj9tNj139eb6BiSop+2x0w7R/EFEq1WSuHELtF23AUj8zQi77m+iE4UD
+api: eJztV21v2zYQ/ivEfUoB2nE6p9sE7EOKNViGdQuaFP2QGQYtniXGEqmSpzSeof8+HCk7ju1hTbcBHZBPkeJ7ee65F92tQGPIvWnIOAsZXJHyJJQIy0BYaxHQ35kchbOCShSkfIEkrNM4/N2CBFJFgOwGrpLc9K2yqsAaLU3PLi+mvfrUNegVuwgwkbB5u9CQwaUL9KvT2JuICEBCwLz1hpaQ3azgNSqP/qylkp31VrNP3hDCpJtIaJRXNRL6EOWtqhEyKF2g+CjBcHSNohIkePzYGo8aMvItyh0KrlOMqkBLYm1BCo/sFrXwriVjC3GnqhbF0VTZpRRTVVUvpHBeVGqGlQhYYU7Oi6MFLrMo+iIxdj9wqjGD3Gks0A7wnrwaJBpXcKcqoxUx9jVIWRv7w4mMv0wT/9BJCHmJtWIdWjYsH8gbW4CE2thf0BZM1UnXyQ0ZTyaiT4horSHB2uIIh8VQClsYey9FCKX+R0E9JY4Jow2NswGj0ZejEf85jDhwDaEegoTcWUJLLKuapjJ5LLzj28AKq333bnaLOddf47lMySR3t242NfoQzLnztSLIoG2Nhr1iKlHcupm4+FG0AbUgJxrvcgxBUGmCYEIwECPFe1U3Fds+PR3hd+PRaIAvv58Nxid6PFDfnrwajMevXp2ejsej0WjE3HkMbUVhC5XyXi05yYR1OBTVY3TvogHh5tzxPXd1S5EirmWVp6d1v4q588JZjG0x3CNp024HaHrs+Kdekl3zXEnNRqWiNT3MFRO08T2M1UKK2nDIPtq25tngFpwTZSrkZISFaRrUPHT285KMrSE8DjL6TlF2Ej4vqL1+ibp5qWyB26Uzc65CZff0P5RIJfodNLXTZm5Q9yM5ok6W0Xvn/x7WGxYTNYagChRmm/DE0xC6bnsW3GzPzZ7xiQQyFKuzD/NtXydvLPkldLsm1rX514rv+nZm3U7C+FBDv1Z63SJiIPpBwqzE2P/F/v5MLs/E1vu6cqJuKl6X5633afI89PN5pJl73yN5g3fr2otp1EjKVAeLese51oYfVSV6HaFmrqUHEAfd6hbZtUX65PxCkKnRtamueV5v+TWWsEB/cIilIFnhkZPT0YiTt05xrLW9xJ7sJ/a9VS2Vzps/UIuBOLu8EAtcik0FPSf2/5DYb/YTe+78zGiNVgzEhQ3tfG5yw7OmQV+bEOIO+Jzdrz+7p4fmcfqWxPWKV+B+Z3iew19/QjsJNVLp+OJqXIjM8xGQwTFfc8er9Te/O+6zerzqXzcHmb9L99Xk4Tq74rym1G3faJtQSqIG+i0/7j5RCGT/cL5enn/+cB23EGPnLqr3gZzFPeXhquQvBUhgIImTk+FoGJdhDqpWsdj6g2dzy6Z4dulcPdTs08/eFB3hPR03lTKWEbS+YquJ1htgaZCQbS9TGyTZw3rliZcklmKt1WqmAr73Vdfxvz+26JeJ8jvljZoxKzcr0Cbws4Zsrqqwe7pth3b0rv+mvhD/8WV7kJT1YWL5LInSkAFIWOBy+0DnO/WLYnrCkfoF+BK2SSehRKXRR+7TT2d5jg1tKe2NPb5ZNz13+dvVNUhQj9tjpx2i+YOIVqskce0WaLtuA5D4nRF23Z+sVSnB
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Start a systemd service on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/post-node-service-stop.api.mdx b/docs/docs/gen/api/post-node-service-stop.api.mdx
index 8b828f15d..5d0171dbe 100644
--- a/docs/docs/gen/api/post-node-service-stop.api.mdx
+++ b/docs/docs/gen/api/post-node-service-stop.api.mdx
@@ -5,7 +5,7 @@ description: "Stop a systemd service on the target node."
sidebar_label: "Stop a service"
hide_title: true
hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe0oB2nE6J9sE7CHDGizDugZNij5khkGLZ4uxRKrkKY1n6H8fjpQcx/awpmuBPfQpVHw/vvvujndcg8aQe1OTcRYyuCZXCyXCKhBWWgT09yZH4aygAgUpv0AS1mkc/mlBAqlFgOwWrpPc9LWyaoEVWpqeX11OO/Wpq9Er9hBgImHzdakhgysX6A+nsTPBAEBCwLzxhlaQ3a7hZ1Qe/XlDBfvqjGYfvSGESTuRUCuvKiT0IcpbVSFkULhA8SjBcGy1ogIkePzQGI8aMvINyh0CblKIaoGWRG9BCo/sFrXwriFjF+JelQ2Ko6myKymmqixfSOG8KNUMSxGwxJycF0dLXGVR9EUi7GHgVG0GudO4QDvAB/JqkFhcw70qjVbE2HuQsjL2pxMZf5km+qGVEPICK8U6tKpZPpA3dgESKmN/R7tgqk7aVm7IeDYRXT5EYw0J1hZHOFwMpbALYx+kCKHQ/ymo58QxYbShdjZgNPpyNOI/hxEHcnWNeggScmcJLbGsquvS5LHuju8CK6z33bvZHeYEEmrPVUomubtzs6nRh2DOna8UQQZNYzTsFVOB4s7NxOUvogmoBTlRe5djCIIKEwQTgoEYKT6oqi7Z9unpCH8Yj0YDfPnjbDA+0eOB+v7kbDAen52dno7Ho9FoxNx5DE1JYQuV8l6tOMmEVTgU1VN0b6MB4ebc8B13VUORIq5lladT365i7rxwFmNbDPdI2rTbAZqeOv61k2TXfK2kZqNCUU8Pc8UEbXwPY7WQoiYcso+2qfhucEvOiTIlcjLC0nAh8J2zn5dkrIfwNMjoO0XZSvi0oPb6JermhbIL3C6dmXMlKrun/75AKtDvoKmcNnODuruRI+pkGb13/t9hvWIxUWEIaoHCbBOeeBpC227fBbfb92bH+EQCGYrV2YX5uquTV5b8CtpdE31t/rPi266dWbeVMB6d7Df0O6saKpw3f6EWA3F+dSmWuBIbR1+svz+Ry3Ox9d1XTtRNxevyvPE+3TyP/XwRaebe90je4H1fezGNGkmZ8mBR7zjX2vBRlaLTEWrmGnoEcdCtbpBdW6SPzi8FmQpdk+qa7+stv8YSLtAfvMRSkKzwxMnpaMTJ61Mca20vsd/tJ/bC+ZnRGq0YiEsbmvnc5IZLskZfmRDipvAtu///7J4emsPpyolTmDelbrR8wXH8LaFfKaGthAqpcLyX1y5E5nlXzOCYd/7jdT8a2uMuq8fr7rNf2/192sInjzv8Nac1ZW57k99EUhBF3SjGEzIKgewOF/2K9dv7mzirjJ27qN7FcR6n2ePTgwcFSGAgiZKT4WgYVyaOqVKx1rq1uH/vpGh2yVw/VuyzX0YpNsIHOq5LZSz7b3zJRhOnt8DSICHbHrgbINlmBLua5ygLsdJ6PVMB3/mybfnfHxr0q8T3vfJGzZiS2zVoE/isIZurMuxu99uBHb3t5ukL8ZUfPwc56XdXy5trlIYMQMISV9tvOH7KfFZMz3jHfAa+hG3SSihQafSR+/TTeZ5jTVtKe1ceP2s2/Xb15voGJKinvbHTC9H8QUTrdZK4cUu0bbsBSPzNCNv2b3DKgqM=
+api: eJztV21v2zYQ/ivEfUoB2nE6p9sE7EOKNViGdQuaFP2QGQYtni3GEqmSpzSeof8+HCk5ju1hTbcBHZBPkeJ7ee65F92tQWPIvanJOAsZXJGrhRJhFQgrLQL6O5OjcFZQgYKUXyAJ6zQOf7cggdQiQHYDV0lu+lZZtcAKLU3PLi+mnfrU1egVewgwkbB5u9CQwaUL9KvT2JlgACAhYN54QyvIbtbwGpVHf9ZQwb46o9knbwhh0k4k1MqrCgl9iPJWVQgZFC5QfJRgOLZaUQESPH5sjEcNGfkG5Q4B1ylEtUBLorcghUd2i1p415CxC3GnygbF0VTZlRRTVZYvpHBelGqGpQhYYk7Oi6MlrrIo+iIRdj9wqjaD3GlcoB3gPXk1SCyu4U6VRiti7D1IWRn7w4mMv0wT/dBKCHmBlWIdWtUsH8gbuwAJlbG/oF0wVSdtKzdkPJmILh+isYYEa4sjHC6GUtiFsfdShFDofxTUU+KYMNpQOxswGn05GvGfw4gDubpGPQQJubOEllhW1XVp8lh3x7eBFdb77t3sFnMCCbXnKiWT3N262dToQzDnzleKIIOmMRr2iqlAcetm4uJH0QTUgpyovcsxBEGFCYIJwUCMFO9VVZds+/R0hN+NR6MBvvx+Nhif6PFAfXvyajAev3p1ejoej0ajEXPnMTQlhS1Uynu14iQTVuFQVI/RvYsGhJtzw3fcVQ1FiriWVZ6e+nYVc+eFsxjbYrhH0qbdDtD02PFPnSS75rGSmo0KRT09zBUTtPE9jNVCippwyD7apuLZ4JacE2VK5GSEpeFC4Jmzn5dkrIfwOMjoO0XZSvi8oPb6JermhbIL3C6dmXMlKrun/6FAKtDvoKmcNnODupvIEXWyjN47//ew3rCYqDAEtUBhtglPPA2hbbdnwc323OwYn0ggQ7E6uzDfdnXyxpJfQbtroq/Nv1Z817Uz67YSxoca+rXSfYuIgegGCbMSY/8X+/szuTwTW+995UTdVLwuzxvv0+R56OfzSDP3vkfyBu/62otp1EjKlAeLese51oYfVSk6HaFmrqEHEAfd6gbZtUX65PxSkKnQNamueV5v+TWWcIH+4BBLQbLCIyenoxEnr09xrLW9xJ7sJ/a9VQ0Vzps/UIuBOLu8EEtciU0FPSf2/5DYb/YTe+78zGiNVgzEhQ3NfG5yw7OmRl+ZEOIK+Jzdrz+7p4fmcfqWxPWKV+BuZ3iew19/QlsJFVLh+OCqXYjM8xGQwTEfc8fr/pvfHndZPV53r/095u/SeTV5OM6uOK0pc9sn2iaSgijqRjFefaIQyO7hvN+df/5wHZcQY+cuqndxnMU15eGm5A8FSGAgiZKT4WgYd2GOqVKx1rp7pz9kUzS7ZK4fKvbJJ2+KjfCejutSGcv+G1+y0cTpDbA0SMi2N6kNkGyzW7maFyQWYqX1eqYCvvdl2/K/PzboV4nvO+WNmjElN2vQJvCzhmyuyrB7tm0HdvSu+56+EP/xVXuQk/4osXySRGnIACQscbV9nPON+kUxPeFA/QJ8CduklVCg0ugj9+mnszzHmraU9kYe36ubfrv87eoaJKjHvbHTC9H8QUTrdZK4dku0bbsBSPzOCNv2T3aMJ2E=
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -255,6 +255,97 @@ Stop a systemd service on the target node.
+
+
+
+ Bad request - validation error.
+
+
+
+
+
+
+
+
+
+
+ Schema
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docs/gen/api/post-node-user.api.mdx b/docs/docs/gen/api/post-node-user.api.mdx
index 8a26ae366..e533b6140 100644
--- a/docs/docs/gen/api/post-node-user.api.mdx
+++ b/docs/docs/gen/api/post-node-user.api.mdx
@@ -5,7 +5,7 @@ description: "Create a new user account on the target node."
sidebar_label: "Create a user"
hide_title: true
hide_table_of_contents: true
-api: eJztWG1v2zYQ/isEPyWA7Dit020G+iF92zy0XZCk6IfMMM7iWWIikSpfkniG/vtwpCTLsbtm3QZ0QD9Zlo7Hu+fuOfJuzQXa1MjKSa34hL80CA4ZMIV3zFs0DNJUe+WYVszlyByYDB1TWuDwd8UT7iCzfHLFP1g0c1Bi/rPRvpq/AwUZlqjc/PRsOidVc12hAdrI8lnCu39TwSf8TFv3XgskNTzhFlNvpFvxydWav0AwaE69y2kjUjW5M9Ihn9WzhFdgoESHxgZhBSXyCc+1deEx4ZIcq8DlPOEGP3lpUPCJMx6TB95fRucgQ+VYqyFhBi2aWxTMaO+kytgtFB7ZwRzUKmFzKIrDhGnDClhgwSwWmDpt2MENriZB9DBCdT/QUMlBqgVmqAZ47wwMIn5rfguFFODI9tbIpJTq+XESvswj8LxOuE1zLIHWuFVF8tYZqTKe8FKqt6gywum4JmxIE1r3QosVyW97+6Ef3pQCL7ViGziHe/BKtXKoHCmDqipkGhYdXVvSuN41TS+uMXVbiq5iiChyhnLASQwAxMDtOrVrNEmypTYhISlRGyeGX49xCffPnz7hdZ1wL0XPDKkcZiElt+1470s0Mo0cmb4asumS6VI6hyIJdtmVdVgysFZmyjKtcEjByx6l/czIEsyKZcSlHfXQvC/BpTnlI+3nW2CkjcFEETbM9WNg/UWXyIQ0IXNXjNgSVtsci+LLy9/qTCoWhDdrg5G2txiMgRUR0mFpd5XWD7Ve+KoqQg3ZYEEu2qC+AmvvtBFftm6qpJNAlsUV7KAqgKC/dwnLweYo2GIVUAzUP4yuhwD2tC+0LhDUjvquZrYhb7ORsslJV2CTt1HwPHKS1zV9N2grrWykwJPR6DM07SL6Dyi4TbdrvZjLveAttSnB8Qn3RIWdGpkju9YLNn1FKSeY06wyOkVrmculZU3JIUvxHsoqeH9yMsIfx6PRAJ/8tBiMj8V4AD8cPxuMx8+enZyMx6PRaMQjGr5wj8mZzqtt686DAqaXDCI1I3AJ85UIvwILpF9tNunQnUShqGiFofYPdyDrzpRH0ClKkiFdWjGXg2vBIuQIrm7vmHMOnN9DjYSj8iXVTn1DEQJZIIXG3siqQkHFdDdKUVlrwraTYe/oZZ38zdIblqQ5qAzFI+jxMUeXo3lgRKmFXEoULWnI2KgZjdHmy9a8JjFWorWQIZN9nCM8kX/9c6d3J2iAnm0T9J13wbqYRbx+qKBNz88vC1xuqD3ex+apCodQSxNWwarQ8G8S+5H4nbLe/zZJwtqYpzpNvTGx5GyI/CZAS6Q36IzE2zbNhrF8O5DF3vx9sLkQkh6hYM0aBgvt3caIvdsKj7S1QnenzQ1zskTtYwrTgf+Ig/Wyc5IWbG1yMhr1C3bIr52IHu+pzwq8y7WRf6BgA3Z6NmU3uGJd3nwP7P8hsE93A/tGm4UUAhUbsKmyfrmUqaT6UqEppbWhkfke3W8/uif7CnE8P2Lbo7JwWfhehL/9aNYJL9HlmmYGlbYBeWrtJ/yIZhJH6/aQr498O0owt3E4MNvMFS4ojjFU/elCZ3ruXMWbVjtcboIQT5qHN+0V+dePl+GaQflxvmm2X7f+dPOILgahvRw1jeCo7c8235uOa/OibaOu2lezfu/TW9j0K9So1zT1WOrgUAPlabgabcYydFDxhBM0MSrHw9EwXMIJ1hJUz/iuw2kg3QrnesOZrxkfRbypFzsKXRlZ4E3oOWNgrzhJ84RPeve3YMgsCVc6ElmvF2Dxgynqml5/8mhWMeK3YCQsCIKrNRfS0rPgkyUU9uH8p+/JwXlzfh+y/3gqtBeBtvtR1PsEaT7hPOE3uOoPt+oZdfgIAk3wL35+Gb0YXJKSzfKdelYn7YrTNMXK/aXsrEe8s98uLokLzVipDLTnBu5o0AN30VRdxVHfZB3frXkBKvOQkWzUScyBbeI9IFrwai8Y63WUuNQ3qOq6w8bRfwKmrv8EtIM8/Q==
+api: eJztWG1v2zYQ/isEPyWA7Cit020G+iF92zysXZCm6IfMMM7iWWIikSpJJdEM/ffhSEmWY3dNXwZ0QD9Zlo7H5557Ie/WXKBNjCyd1IpP+XOD4JABU3jLKouGQZLoSjmmFXMZMgcmRceUFjj+S/GIO0gtn17ydxbNApRY/Gp0VS5eg4IUC1RucXo2W5CqhS7RAG1k+Tzi/b+Z4FN+pq17owWSGh5xi0llpKv59HLNnyEYNKeVy2gjUjW9NdIhnzfziJdgoECHxnphBQXyKc+0df4x4pIMK8FlPOIGP1TSoOBTZyqM7ll/EYyDFJVjnYaIGbRoblAwoysnVcpuIK+QHSxA1RFbQJ4fRkwblsMSc2Yxx8Rpww6usZ560cNA1d1IQylHiRaYohrhnTMwCvyt+Q3kUoAj7B3IqJDq6XHkvywC8byJuE0yLIDWuLokeeuMVCmPeCHVH6hS4um4IW5IE1r3TIua5LetfTd0b0KOl1qxDZ3jPXwlWjlUjpRBWeYy8YuOrixpXO9C08srTNyWosvgIvKcoRhwEj0BwXG7Ru2CJkm20sYHJAVqa8T4yzku4O7p40e8aSJeSTGAIZXD1IfkNo43VYFGJiFHZi/GbLZiupDOoYg8LltbhwUDa2WqLNMKPwceqcKidLXHF3tg6YOAnRlZgKlZSmm4gwza9wW4JKNQJqhVx6m0IQ5QfC3WTD/Emb/pApmQxudLzShHv3zjY7+xzTDPP73zHzqVinnhb7KtZ9UO9gVjoKbi47Cwu3ia+4DeVmWZ+3q5cR75xI5JtgRrb7URnzZspqSTQEaFFeygzIFi5c5FLAOboWDL2rvdl7nDrybcx/kA2FLrHEHtIOuPli4zPj9p+/15Q1s76XJsa0LQfh7qHX1uqObYUisbysujOP5ICRyE/BeXt+1SdqWXC7nXWSttCnB8yisqMzvnT4bsSi/Z7AXlpGBOs9LoBK1lLpOWteWckOIdFKW3/uQkxp8ncTzCR78sR5NjMRnBT8dPRpPJkycnJ5NJHMcxD2xUuXtIjPZWbaM79wqYXjEIZS8QF7GqFP5XYI70q80m/PpT3hdsrdCfq+Mdyvrz+gFFI0gSkD6MmcvAdWQRc0RXv7fPIevAVXtSMeKoqoLOJX1NHgKZI7nGXsuyREEH1a6XgrIOwraRfu9gZRN95rHmlyQZqBTFA3LqfYYuQ3MPRKGFXEkUXaYR2KAZjdHm02hekhgr0FpIkckhz4GeMQ/5tTnTB/etluj5doK+rpxHF6KIN/cVdOH58WU+l9vUnuzL5pnytaJLE1ZCnWv4lon9QP5O2eB/FyR+bYhTnSSVMaHkbBL5laeWkt6gMxJvujAbh+PCgcz3xu+9zYWQ9Ag5a9cwWOrKbUDs3VZUSFsrdLfaXDMnC9RVCGGqyw+4eVz0RtKCrU1O4nhYsH187Xj0eE99VlC5TBv5Nwo2YqdnM3aNNevj5odj/w+Ofbzr2FfaLKUQqNiIzZStViuZSKovJZpCWuubxB/e/f69e7KvEIfzI7SUKvWXhR9F+Pv3ZhPxAl2maR5TauuZp7HJlB/RvOdo3R3yzVHVjWnMTRi8zDczm7fkx+Cq4eSmh545V/J2jOEvN16IR+3Dq+6K/Pv7C3/NoPg43wwyXnb29LOe3ge+dY/bTjnuutDN97Y53Lzo2rbL7tV82GsNFrZNDg1BGpoorbQ3qKXy1F+NNiMvOqh4xIma4JXjcTz2l3CitQA1AN+3RS2lW+5cb3LmS0ZzgW/q/Y58F0gIKuPb4+DYS07SPOLTwf3NA5lH/kpHIuv1Eiy+M3nT0OsPFZo6ePwGjIQlUXC55kJaehZ8uoLc3p+tDS05OG/P70P2H0/c9jLQdT+Keh8vzaecR/wa6+HgsJnTHANBoPH2hc/PgxWjC1KyWb5Tz5qoW3GaJFi6f5WdDxLv7M+3F5QL7ciu8GnPDdzSEA1uA1RdhjHqdB3erXkOKq0gJdmgkzIHthPvXqJ5q/aSsV4HiQt9jappem4c/SdimuYf+hy4ww==
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -131,7 +131,7 @@ Create a new user account on the target node.
required={false}
schemaName={"integer"}
qualifierMessage={undefined}
- schema={{"type":"integer","description":"Numeric user ID. If omitted, the system assigns one."}}
+ schema={{"type":"integer","description":"Numeric user ID. If omitted, the system assigns one.","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=0"}}}
>
diff --git a/docs/docs/gen/api/put-node-user.api.mdx b/docs/docs/gen/api/put-node-user.api.mdx
index e5401cec2..466983930 100644
--- a/docs/docs/gen/api/put-node-user.api.mdx
+++ b/docs/docs/gen/api/put-node-user.api.mdx
@@ -5,7 +5,7 @@ description: "Update an existing user account on the target node."
sidebar_label: "Update a user"
hide_title: true
hide_table_of_contents: true
-api: eJztWFFv2zYQ/isEnxpAdpzO6TYBe0i3dsvQFkGaoA+ZYdDiWWIskSp5TOIJ+u/DkZLt2E6bdh2wAnmyJB+Pd993dzxewyW4zKoaldE85Ze1FAhMaAZ3yqHSOfMOLBNZZrxGZjTDAhgKmwMybSQM/9I84Shyx9MrfunAToWW09+t8fX0rdAihwo0Tk/OTqekampqsIK2c3yS8NXbqeQpP/P4zkggLTzhDjJvFS55etXwlyAs2BOPBe1DmtJbqxD4pJ0kvBZWVIBgXRDWogKe8sI4DI8JV+RdLbDgCbfw0SsLkqdoPSRbEFxE30QOGlmvIWEWHNgbkMwaH3C5EaUH9mwq9DJhU1GWBwkzlpViBiVzUEKGxrJnC1imQfQgInU3MKJWg8xIyEEP4A6tGET4Gn4jSkUE8HRlZFIp/ctREv6ZRtx5m3CXFVAJWoPLmuQdWqVznvBK6Tegc8LpqG2TFRhfDMTlJvG0+t848CU2T6Jl4PClkUuS/4RhPkbsOgCGexzLjEbQSKpEXZcqCyF3eO1IX7NrmJldQ4Y84bWlAEUFwTtXQFnus/++fe/glpUmV5qFBYzQHhIAhSEmHrOcJJlUNgTRcq0hp7RyGzqEtWJJtCJUbld3u638va/rMmSksEsW1AVuHXtmoS5FBm6V+gdhy9Jkiw3FM2NKEHrH6jcmW1D8e00LQpXoKBrytk04KiyhIy9WmfPIMW9b+t+Cq412Eejno9EDtEe6JZH8jUi9NrOpkvtomRtbCeQp917JHYcvCmDXZsZOf6MSKRkaVluTgXMMC+VYF8JkKdyJqg7eHx+P4KfxaDSA5z/PBuMjOR6IH49eDMbjFy+Oj8fj0Wg04hENX+JjiF55dd+686CAmTkTsYJnFgRC0gGYMAkl0K+xrBbO3Ror2aoYs7mxzGgI9W+4A9mqrn42lv/oJMmQEBKhqmIhsAeLkCO4VnuHoHMo0O+J54SD9hWdAGZBDAlVAlHjFqquQdKJsstSVNabcN/JsHf0sk3445yiQAz1kJZkhdA5yEdkyIcCsAC7ZURlpJorkMwtHUIVjI2awVpjP2/NKxJjFTgncmBqE+cIT8y/dUm82jwXO6An9xP0rcdgXYwi3m4r6MPz4WUhl7vUHu/L5lMdzoo+TVgtlqUR3zKxH4nfCdt474MkrI1xarLMWxtLzjqRXwdoKektoFVw04fZMNZcFKrcG79bm0up6FGUrFvDxMx4XBuxd1vpgbbWgLfGLhiqCoyPIUzn8sa+SiPkoZvazYvoJC24t8nxaLRZsEN87TB6tKc+a+GxMFb9DZIN2MnZKVvAkq3i5onY74HYH3aJfW3sTEkJmg3YqXZ+PleZovpSg62Uc6GXf2L3e2B3/EBbpQ2yufH6qf5+F0Qe7ztRYyMQ+rv+3v7E5v+fzTbhFWBhaP5R+wA83c5TfkjjlcOmb9baQ2L0sAnPYTpib+K8Y7IelbwnNiNhmwOTlQMFYs27m3joVYMQT7qH1/2N588PF6FrpCg5X9/FX/Vere7Cayri5Xb93l9Vr/pPk/4uSXfyliYRcxNM66A5CT3remREHQRPODkZUT4ajobhdlQbh5UI4dsNN/q5VYj6bXqadQ58/YAr4odwh4d1KZQmO7wN04DI1xUnaZ7wdKO97sxJw+skCZ03iTbNTDi4tGXb0uePHuwyMnkjrBIzAuSq4VI5epY8nYvSbU9oNv16dt61WQfsPx5g7UWiv6RquqIGaZ5ynvAFLDfncDSO+iqfHphFfYUt0Y4JTWNASLAB5/jXr3HnwQUpWC/dqZrkRVxxkmVQ4ydlJxvpfXZ5QanWDbWqUFu4Fbc0sRK30UpTx9lo2sRvDS+Fzr3ISTaqpMQU9/N6K4+DU3txaJoocWEWoNt2BQvSO+HStv8Ad3CpOg==
+api: eJztWN9v2zYQ/lcIPiWA7Did020C9pBuzZahLYI0QR8yw6DFs8RYIlXymMQz9L8PR0q2YzttmnXAAuTJkny8H999dyRvwSW4zKoaldE85Ze1FAhMaAZ3yqHSOfMOLBNZZrxGZjTDAhgKmwMybST0/9I84Shyx9MrfunAjoWW49+t8fX4vdAihwo0jo/PTsekamxqsILMOT5K+PLtVPKUn3n8YCSQFp5wB5m3Cuc8vVrwNyAs2GOPBdkhTemtVQh81IwSXgsrKkCwLghrUQFPeWEchseEK4quFljwhFv47JUFyVO0HpINCC5ibCIHjazTkDALDuwNSGaND7jciNID2xsLPU/YWJTlfsKMZaWYQMkclJChsWxvBvM0iO5HpO56RtSqlxkJOege3KEVvQjfgt+IUlECeLp0MqmU/uUwCf+MI+68SbjLCqgErcF5TfIOrdI5T3il9DvQOeF02DTJEoxvBuJyPfG0+t8E8C0+j6Jn4PCNkXOS/4JjPjJ2RYD+jsAyoxE0kipR16XKAuUOrh3pW2w7ZibXkCFPeG2JoKggROcKKMtd/t/37wPcstLkSrOwgBHa/W9AzlQKoapx3kHXJLwwlMTHWCZJJpUN/Jt/F+M5FbNbMy+sFXMiE0Lltt1qNv366Ou6DH1A2DkL6gKjHNuzUJciA7dsOPt9Wl+abLameGJMCUJvBfzOZDOqOq9pQehNLTGeFDNvKFxUWELLs9gQzyMd6e+G2OVqo13kxKvB4AGGRmZKcuQ78e/aTMZK7qLB1NhKIE+590puoXRRALs2E3b6G3VzydCw2poMnGNYKMfaaiNP4U5UdYj+6GgAPw0Hgx68+nnSGx7KYU/8ePi6Nxy+fn10NBwOBoMBj2j4Eh/DjmVU9707DwqYmTIRN5vMgkBIWgATJqEE+jWW1cK5W2MlW+4bbGosMxpCq+5vQbbcAr5aO3+0kuRI4FHYALAQ2IFFyBFcS9uBqQ4F+h1FkHDQvqLNyswoQ0KVQKlxM1XXIGnz285SVNa5cD/IYDtG2ST8cUEREUPrpiVZIXQO8hFl9akALMBuOFEZqaYKJHNzh1AFZ6NmsNbYr3vzlsRYBc6JHJhaxznC0+exvrrufbW+hbdAj+4X6HuPwbvIIt5sKujo+fCyUMttaQ93VfOpDr2iKxNWi3lpxPcs7Efid8zW3juShLWRpybLvLWx5awK+SRAS0VvAa2Cm45m/dioUahyJ383jEup6FGUrF3DxMR4XDmx06z0QKY14K2xM4aqAuMjhakvr9lVGiEPB7/tuohB0oJ7Ro4Gg/WGHfi1ldHDHf1ZC4+FsepvkKzHjs9O2QzmbMmbl8Q+h8T+sJ3YE2MnSkrQrMdOtfPTqcoU9ZcabKWcC9eOl+w+h+wOHzhWaYNsarx+6b/PIpFHu3bUeBAI57tuxPCSzf9/NpuEV4CFoVFN7QPwNEhI+QFNgg4W3WGtOaCMHizCcxjk2Js4mhmtpjofKZsxYeuznWUABWLN26FBOKsGIZ60DyfdjefPTxfh1EgsOV+NDd52US2v7atUxMv06r273151n0bdBZTGBw0NTaYmuNZCcxzOrKvpFp0geMIpyIjyYX/QD7ej2jisRKBvO4fpRmyB9ZvpWaxq4OmzuIgfwh0e1KVQmvzwNgwuYr6uOEnzhKdrx+vWnTS8jpJw8ibRxWIiHFzasmno82cPdh4zeSOsEhMC5GrBpXL0LHk6FaXbHCatx7V33h6z9tl/PGvbiUR3SdV0RQ3SPOU84TOYr48MaXL2pJgeGJs9wZfox4imPyAk2IBz/OvXaLl3QQpWS7e6JkURVxxnGdT4RdnRWnmfXV5QqbXztyr0Fm7FLQ3XxG300tRxjJsu4rcFL4XOvchJNqqkwhT363qjjkNQO3FYLKLEhZmBbpolLEjvhEvT/AO3XuYv
sidebar_class_name: "put api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
@@ -127,7 +127,7 @@ Update an existing user account on the target node.
required={false}
schemaName={"string"}
qualifierMessage={undefined}
- schema={{"type":"string","description":"New login shell path."}}
+ schema={{"type":"string","description":"New login shell path.","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=1"}}}
>
diff --git a/docs/docs/sidebar/development/development.md b/docs/docs/sidebar/development/development.md
index ead66020a..bd5f831f4 100644
--- a/docs/docs/sidebar/development/development.md
+++ b/docs/docs/sidebar/development/development.md
@@ -108,6 +108,58 @@ single table — never split into separate `TestFoo`, `TestFooError`,
Avoid generic file names like `helpers.go` or `utils.go`. Name files after what
they contain.
+## Input Validation
+
+All user input is validated through the `internal/validation` package, which
+wraps `go-playground/validator`. Validation rules are declared in OpenAPI specs
+via `x-oapi-codegen-extra-tags` and enforced at runtime by handler calls to
+`validation.Struct()` or `validation.Var()`.
+
+### Validation rules
+
+- **Required fields** use `validate: "required,..."` — the field must be present
+ and non-zero.
+- **Optional fields** use `validate: "omitempty,..."` — validation is skipped
+ when the field is absent or zero-valued.
+- **Enum constraints** use `validate: "oneof=a b c"` to restrict values.
+- **Cross-field validation** uses `required_without` / `excluded_with` for
+ mutually exclusive fields (e.g., cron `schedule` vs `interval`).
+
+### Update endpoints with all-optional fields
+
+When a PUT endpoint has all optional fields (e.g., user update, group update,
+cron update), use `validation.AtLeastOneField(request.Body)` to reject empty
+bodies with a 400. This prevents clients from sending meaningless no-op updates
+or, worse, triggering destructive defaults. Place this call after
+`validation.Struct()`:
+
+```go
+if errMsg, ok := validation.Struct(request.Body); !ok {
+ return gen.PutXxx400JSONResponse{Error: &errMsg}, nil
+}
+
+if errMsg, ok := validation.AtLeastOneField(request.Body); !ok {
+ return gen.PutXxx400JSONResponse{Error: &errMsg}, nil
+}
+```
+
+### Defense-in-depth pattern
+
+When `validation.Struct()` cannot currently fail (all fields use `omitempty`),
+keep the call with a comment explaining why. This guards against future field
+additions breaking validation silently:
+
+```go
+// Defense in depth: current fields use omitempty so validation
+// always passes, but guards against future field additions.
+if errMsg, ok := validation.Struct(request.Body); !ok {
+ return gen.PostXxx400JSONResponse{Error: &errMsg}, nil
+}
+```
+
+This pattern applies to action endpoints (power, docker stop) where an empty
+body is valid — unlike update endpoints which must use `AtLeastOneField`.
+
## Before committing
Run `just ready` before committing to ensure generated code, package docs,
diff --git a/internal/controller/api/file/file_upload.go b/internal/controller/api/file/file_upload.go
index 583f1bc0d..05ac7db67 100644
--- a/internal/controller/api/file/file_upload.go
+++ b/internal/controller/api/file/file_upload.go
@@ -42,9 +42,8 @@ func (f *File) PostFile(
ctx context.Context,
request gen.PostFileRequestObject,
) (gen.PostFileResponseObject, error) {
- // Defense-in-depth: the OpenAPI validator handles param validation before
- // Defense in depth: current params cannot fail validation, but
- // guards against future parameter additions.
+ // Defense in depth: current params use omitempty so validation
+ // always passes, but guards against future parameter additions.
if errMsg, ok := validation.Struct(request.Params); !ok {
return gen.PostFile400JSONResponse{Error: &errMsg}, nil
}
diff --git a/internal/controller/api/file/gen/api.yaml b/internal/controller/api/file/gen/api.yaml
index fc78b6288..102092b38 100644
--- a/internal/controller/api/file/gen/api.yaml
+++ b/internal/controller/api/file/gen/api.yaml
@@ -64,6 +64,10 @@ paths:
type: string
description: The name of the file in the Object Store.
example: "nginx.conf"
+ # NOTE: multipart form fields are parsed manually in
+ # the handler; these tags are for documentation only.
+ x-oapi-codegen-extra-tags:
+ validate: "required,min=1,max=255"
content_type:
type: string
description: >
@@ -74,6 +78,10 @@ paths:
enum:
- raw
- template
+ # NOTE: multipart form fields are parsed manually in
+ # the handler; these tags are for documentation only.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,oneof=raw template"
file:
type: string
format: binary
diff --git a/internal/controller/api/file/gen/file.gen.go b/internal/controller/api/file/gen/file.gen.go
index 9c68bd1ac..4625e6c33 100644
--- a/internal/controller/api/file/gen/file.gen.go
+++ b/internal/controller/api/file/gen/file.gen.go
@@ -105,13 +105,13 @@ type FileName = string
// PostFileMultipartBody defines parameters for PostFile.
type PostFileMultipartBody struct {
// ContentType How the file should be treated during deploy. "raw" writes bytes as-is; "template" renders with Go text/template and agent facts.
- ContentType *PostFileMultipartBodyContentType `json:"content_type,omitempty"`
+ ContentType *PostFileMultipartBodyContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"`
// File The file content.
File openapi_types.File `json:"file"`
// Name The name of the file in the Object Store.
- Name string `json:"name"`
+ Name string `json:"name" validate:"required,min=1,max=255"`
}
// PostFileParams defines parameters for PostFile.
diff --git a/internal/controller/api/gen/api.yaml b/internal/controller/api/gen/api.yaml
index 12a0e68f9..e94723259 100644
--- a/internal/controller/api/gen/api.yaml
+++ b/internal/controller/api/gen/api.yaml
@@ -555,6 +555,8 @@ paths:
type: string
description: The name of the file in the Object Store.
example: nginx.conf
+ x-oapi-codegen-extra-tags:
+ validate: required,min=1,max=255
content_type:
type: string
description: >
@@ -565,6 +567,8 @@ paths:
enum:
- raw
- template
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,oneof=raw template
file:
type: string
format: binary
@@ -1360,6 +1364,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CertificateCACollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -1507,6 +1517,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CertificateCAMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -2426,6 +2442,8 @@ paths:
description: >
Return log entries since this time. Accepts systemd time
specifications (e.g., "1h", "2026-01-01 00:00:00").
+ x-oapi-codegen-extra-tags:
+ validate: omitempty
schema:
type: string
- name: priority
@@ -2434,6 +2452,8 @@ paths:
description: >
Filter by log priority level (e.g., "err", "warning", "info",
"debug").
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,oneof=emerg alert crit err warning notice info debug
schema:
type: string
responses:
@@ -2443,6 +2463,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/LogCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -2483,6 +2509,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/LogSourceCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -2534,6 +2566,8 @@ paths:
description: >
Return log entries since this time. Accepts systemd time
specifications (e.g., "1h", "2026-01-01 00:00:00").
+ x-oapi-codegen-extra-tags:
+ validate: omitempty
schema:
type: string
- name: priority
@@ -2542,6 +2576,8 @@ paths:
description: >
Filter by log priority level (e.g., "err", "warning", "info",
"debug").
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,oneof=emerg alert crit err warning notice info debug
schema:
type: string
responses:
@@ -2551,6 +2587,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/LogCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -2760,6 +2802,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/NtpCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -2905,6 +2953,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/NtpDeleteResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -2950,6 +3004,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3040,6 +3100,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3084,6 +3150,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3129,6 +3201,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3166,6 +3244,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UpdateCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3311,6 +3395,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ProcessCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3351,6 +3441,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ProcessGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3455,6 +3551,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CronCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3545,6 +3647,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CronGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3646,6 +3754,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CronDeleteResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3691,6 +3805,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceListResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3781,6 +3901,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3882,6 +4008,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3922,6 +4054,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -3962,6 +4100,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4002,6 +4146,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4042,6 +4192,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4083,6 +4239,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4122,6 +4284,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SysctlCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4214,6 +4382,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SysctlGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4317,6 +4491,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SysctlDeleteResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4362,6 +4542,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/TimezoneCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4452,6 +4638,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UserCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4542,6 +4734,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UserCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4643,6 +4841,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UserMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4748,6 +4952,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SSHKeyCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4841,6 +5051,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SSHKeyMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4880,6 +5096,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/GroupCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -4970,6 +5192,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/GroupCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -5071,6 +5299,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/GroupMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -6564,6 +6798,8 @@ components:
type: string
description: Optional name for the container.
example: my-nginx
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=1
command:
type: array
description: Command to run in the container.
@@ -6604,6 +6840,8 @@ components:
Whether to start the container immediately after creation. Defaults
to true.
default: true
+ x-oapi-codegen-extra-tags:
+ validate: omitempty
required:
- image
DockerStopRequest:
@@ -6641,6 +6879,8 @@ components:
type: string
description: Working directory inside the container.
example: /app
+ x-oapi-codegen-extra-tags:
+ validate: omitempty
required:
- command
DockerPullRequest:
@@ -8755,17 +8995,25 @@ components:
uid:
type: integer
description: Numeric user ID. If omitted, the system assigns one.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=0
gid:
type: integer
description: >-
Primary group ID. If omitted, a group matching the username is
created.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=0
home:
type: string
description: Home directory path.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=1
shell:
type: string
description: Login shell path.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=1
groups:
type: array
items:
@@ -8774,18 +9022,26 @@ components:
password:
type: string
description: Initial password (plaintext, hashed by the agent).
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=1
system:
type: boolean
description: Create a system account.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty
UserUpdateRequest:
type: object
properties:
shell:
type: string
description: New login shell path.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=1
home:
type: string
description: New home directory path.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=1
groups:
type: array
items:
@@ -8794,6 +9050,8 @@ components:
lock:
type: boolean
description: Lock or unlock the account.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty
UserPasswordRequest:
type: object
required:
@@ -8817,9 +9075,13 @@ components:
gid:
type: integer
description: Numeric group ID. If omitted, the system assigns one.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty,min=0
system:
type: boolean
description: Create a system group.
+ x-oapi-codegen-extra-tags:
+ validate: omitempty
GroupUpdateRequest:
type: object
properties:
diff --git a/internal/controller/api/job/job_list.go b/internal/controller/api/job/job_list.go
index b89820dcf..496d11c9e 100644
--- a/internal/controller/api/job/job_list.go
+++ b/internal/controller/api/job/job_list.go
@@ -36,8 +36,6 @@ func (j *Job) GetJob(
ctx context.Context,
request gen.GetJobRequestObject,
) (gen.GetJobResponseObject, error) {
- // Defense in depth: current params cannot fail validation, but
- // guards against future parameter additions.
if errMsg, ok := validation.Struct(request.Params); !ok {
return gen.GetJob400JSONResponse{Error: &errMsg}, nil
}
@@ -51,12 +49,6 @@ func (j *Job) GetJob(
if request.Params.Limit != nil {
limit = *request.Params.Limit
}
- // Defense-in-depth: the OpenAPI validator rejects out-of-range limits
- // before the handler runs, but we cap here too in case validation is
- // ever misconfigured. ListJobs also caps internally.
- if limit <= 0 || limit > client.MaxPageSize {
- limit = client.DefaultPageSize
- }
offset := 0
if request.Params.Offset != nil {
diff --git a/internal/controller/api/node/certificate/ca_delete.go b/internal/controller/api/node/certificate/ca_delete.go
index 058c7f7d4..d2afa4dc2 100644
--- a/internal/controller/api/node/certificate/ca_delete.go
+++ b/internal/controller/api/node/certificate/ca_delete.go
@@ -38,7 +38,7 @@ func (s *Certificate) DeleteNodeCertificateCa(
request gen.DeleteNodeCertificateCaRequestObject,
) (gen.DeleteNodeCertificateCaResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeCertificateCa500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeCertificateCa400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/certificate/ca_delete_public_test.go b/internal/controller/api/node/certificate/ca_delete_public_test.go
index fb89d0d4a..2e2f2aecd 100644
--- a/internal/controller/api/node/certificate/ca_delete_public_test.go
+++ b/internal/controller/api/node/certificate/ca_delete_public_test.go
@@ -164,7 +164,7 @@ func (s *CADeletePublicTestSuite) TestDeleteNodeCertificateCa() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeCertificateCaResponseObject) {
- r, ok := resp.(gen.DeleteNodeCertificateCa500JSONResponse)
+ r, ok := resp.(gen.DeleteNodeCertificateCa400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -437,7 +437,7 @@ func (s *CADeletePublicTestSuite) TestDeleteNodeCertificateCaValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/certificate/ca_list_get.go b/internal/controller/api/node/certificate/ca_list_get.go
index f847cb952..e0c4acd24 100644
--- a/internal/controller/api/node/certificate/ca_list_get.go
+++ b/internal/controller/api/node/certificate/ca_list_get.go
@@ -38,7 +38,7 @@ func (s *Certificate) GetNodeCertificateCa(
request gen.GetNodeCertificateCaRequestObject,
) (gen.GetNodeCertificateCaResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeCertificateCa500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeCertificateCa400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/certificate/ca_list_get_public_test.go b/internal/controller/api/node/certificate/ca_list_get_public_test.go
index fae3319bc..f54243fc7 100644
--- a/internal/controller/api/node/certificate/ca_list_get_public_test.go
+++ b/internal/controller/api/node/certificate/ca_list_get_public_test.go
@@ -156,7 +156,7 @@ func (s *CAListGetPublicTestSuite) TestGetNodeCertificateCa() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeCertificateCaResponseObject) {
- r, ok := resp.(gen.GetNodeCertificateCa500JSONResponse)
+ r, ok := resp.(gen.GetNodeCertificateCa400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -418,7 +418,7 @@ func (s *CAListGetPublicTestSuite) TestGetNodeCertificateCaValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/certificate/ca_update_put_public_test.go b/internal/controller/api/node/certificate/ca_update_put_public_test.go
index 746c42790..19cfc7c78 100644
--- a/internal/controller/api/node/certificate/ca_update_put_public_test.go
+++ b/internal/controller/api/node/certificate/ca_update_put_public_test.go
@@ -531,6 +531,16 @@ func (s *CAUpdatePutPublicTestSuite) TestPutNodeCertificateCaValidationHTTP() {
wantCode: http.StatusOK,
wantContains: []string{`"job_id"`, `"results"`},
},
+ {
+ name: "when missing object",
+ path: "/node/server1/certificate/ca/my-ca",
+ body: `{}`,
+ setupJobMock: func() *jobmocks.MockJobClient {
+ return jobmocks.NewMockJobClient(s.mockCtrl)
+ },
+ wantCode: http.StatusBadRequest,
+ wantContains: []string{`"error"`, "Object", "required"},
+ },
{
name: "when target agent not found",
path: "/node/nonexistent/certificate/ca/my-ca",
diff --git a/internal/controller/api/node/certificate/gen/api.yaml b/internal/controller/api/node/certificate/gen/api.yaml
index 85e68da01..c44abf652 100644
--- a/internal/controller/api/node/certificate/gen/api.yaml
+++ b/internal/controller/api/node/certificate/gen/api.yaml
@@ -51,6 +51,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CertificateCACollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -202,6 +208,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CertificateCAMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/certificate/gen/certificate.gen.go b/internal/controller/api/node/certificate/gen/certificate.gen.go
index e1e8a88df..d922c0703 100644
--- a/internal/controller/api/node/certificate/gen/certificate.gen.go
+++ b/internal/controller/api/node/certificate/gen/certificate.gen.go
@@ -299,6 +299,15 @@ func (response GetNodeCertificateCa200JSONResponse) VisitGetNodeCertificateCaRes
return json.NewEncoder(w).Encode(response)
}
+type GetNodeCertificateCa400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeCertificateCa400JSONResponse) VisitGetNodeCertificateCaResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeCertificateCa401JSONResponse externalRef0.ErrorResponse
func (response GetNodeCertificateCa401JSONResponse) VisitGetNodeCertificateCaResponse(w http.ResponseWriter) error {
@@ -398,6 +407,15 @@ func (response DeleteNodeCertificateCa200JSONResponse) VisitDeleteNodeCertificat
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeCertificateCa400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeCertificateCa400JSONResponse) VisitDeleteNodeCertificateCaResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeCertificateCa401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeCertificateCa401JSONResponse) VisitDeleteNodeCertificateCaResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/docker/gen/api.yaml b/internal/controller/api/node/docker/gen/api.yaml
index 7bea97d5e..b4a6aa681 100644
--- a/internal/controller/api/node/docker/gen/api.yaml
+++ b/internal/controller/api/node/docker/gen/api.yaml
@@ -633,6 +633,8 @@ components:
type: string
description: Optional name for the container.
example: "my-nginx"
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=1"
command:
type: array
description: Command to run in the container.
@@ -665,6 +667,8 @@ components:
Whether to start the container immediately after creation.
Defaults to true.
default: true
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty"
required:
- image
@@ -702,6 +706,8 @@ components:
type: string
description: Working directory inside the container.
example: "/app"
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty"
required:
- command
diff --git a/internal/controller/api/node/docker/gen/docker.gen.go b/internal/controller/api/node/docker/gen/docker.gen.go
index d3446c5a4..c7a2e87e9 100644
--- a/internal/controller/api/node/docker/gen/docker.gen.go
+++ b/internal/controller/api/node/docker/gen/docker.gen.go
@@ -103,7 +103,7 @@ type DockerActionResultItemStatus string
// DockerCreateRequest defines model for DockerCreateRequest.
type DockerCreateRequest struct {
// AutoStart Whether to start the container immediately after creation. Defaults to true.
- AutoStart *bool `json:"auto_start,omitempty"`
+ AutoStart *bool `json:"auto_start,omitempty" validate:"omitempty"`
// Command Command to run in the container.
Command *[]string `json:"command,omitempty"`
@@ -115,7 +115,7 @@ type DockerCreateRequest struct {
Image string `json:"image" validate:"required,min=1"`
// Name Optional name for the container.
- Name *string `json:"name,omitempty"`
+ Name *string `json:"name,omitempty" validate:"omitempty,min=1"`
// Ports Port mappings in host_port:container_port format.
Ports *[]string `json:"ports,omitempty"`
@@ -195,7 +195,7 @@ type DockerExecRequest struct {
Env *[]string `json:"env,omitempty"`
// WorkingDir Working directory inside the container.
- WorkingDir *string `json:"working_dir,omitempty"`
+ WorkingDir *string `json:"working_dir,omitempty" validate:"omitempty"`
}
// DockerExecResultItem Result of a command execution inside a container.
diff --git a/internal/controller/api/node/log/gen/api.yaml b/internal/controller/api/node/log/gen/api.yaml
index 1817683df..6a85e8392 100644
--- a/internal/controller/api/node/log/gen/api.yaml
+++ b/internal/controller/api/node/log/gen/api.yaml
@@ -60,6 +60,8 @@ paths:
description: >
Return log entries since this time. Accepts systemd time
specifications (e.g., "1h", "2026-01-01 00:00:00").
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty"
schema:
type: string
- name: priority
@@ -68,6 +70,8 @@ paths:
description: >
Filter by log priority level (e.g., "err", "warning", "info",
"debug").
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,oneof=emerg alert crit err warning notice info debug"
schema:
type: string
responses:
@@ -77,6 +81,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/LogCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -117,6 +127,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/LogSourceCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -168,6 +184,8 @@ paths:
description: >
Return log entries since this time. Accepts systemd time
specifications (e.g., "1h", "2026-01-01 00:00:00").
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty"
schema:
type: string
- name: priority
@@ -176,6 +194,8 @@ paths:
description: >
Filter by log priority level (e.g., "err", "warning", "info",
"debug").
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,oneof=emerg alert crit err warning notice info debug"
schema:
type: string
responses:
@@ -185,6 +205,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/LogCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/log/gen/log.gen.go b/internal/controller/api/node/log/gen/log.gen.go
index c7ee53d44..0dfa1f8db 100644
--- a/internal/controller/api/node/log/gen/log.gen.go
+++ b/internal/controller/api/node/log/gen/log.gen.go
@@ -120,10 +120,10 @@ type GetNodeLogParams struct {
Lines *int `form:"lines,omitempty" json:"lines,omitempty" validate:"omitempty,min=1,max=10000"`
// Since Return log entries since this time. Accepts systemd time specifications (e.g., "1h", "2026-01-01 00:00:00").
- Since *string `form:"since,omitempty" json:"since,omitempty"`
+ Since *string `form:"since,omitempty" json:"since,omitempty" validate:"omitempty"`
// Priority Filter by log priority level (e.g., "err", "warning", "info", "debug").
- Priority *string `form:"priority,omitempty" json:"priority,omitempty"`
+ Priority *string `form:"priority,omitempty" json:"priority,omitempty" validate:"omitempty,oneof=emerg alert crit err warning notice info debug"`
}
// GetNodeLogUnitParams defines parameters for GetNodeLogUnit.
@@ -132,10 +132,10 @@ type GetNodeLogUnitParams struct {
Lines *int `form:"lines,omitempty" json:"lines,omitempty" validate:"omitempty,min=1,max=10000"`
// Since Return log entries since this time. Accepts systemd time specifications (e.g., "1h", "2026-01-01 00:00:00").
- Since *string `form:"since,omitempty" json:"since,omitempty"`
+ Since *string `form:"since,omitempty" json:"since,omitempty" validate:"omitempty"`
// Priority Filter by log priority level (e.g., "err", "warning", "info", "debug").
- Priority *string `form:"priority,omitempty" json:"priority,omitempty"`
+ Priority *string `form:"priority,omitempty" json:"priority,omitempty" validate:"omitempty,oneof=emerg alert crit err warning notice info debug"`
}
// ServerInterface represents all server handlers.
@@ -316,6 +316,15 @@ func (response GetNodeLog200JSONResponse) VisitGetNodeLogResponse(w http.Respons
return json.NewEncoder(w).Encode(response)
}
+type GetNodeLog400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeLog400JSONResponse) VisitGetNodeLogResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeLog401JSONResponse externalRef0.ErrorResponse
func (response GetNodeLog401JSONResponse) VisitGetNodeLogResponse(w http.ResponseWriter) error {
@@ -360,6 +369,15 @@ func (response GetNodeLogSource200JSONResponse) VisitGetNodeLogSourceResponse(w
return json.NewEncoder(w).Encode(response)
}
+type GetNodeLogSource400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeLogSource400JSONResponse) VisitGetNodeLogSourceResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeLogSource401JSONResponse externalRef0.ErrorResponse
func (response GetNodeLogSource401JSONResponse) VisitGetNodeLogSourceResponse(w http.ResponseWriter) error {
@@ -406,6 +424,15 @@ func (response GetNodeLogUnit200JSONResponse) VisitGetNodeLogUnitResponse(w http
return json.NewEncoder(w).Encode(response)
}
+type GetNodeLogUnit400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeLogUnit400JSONResponse) VisitGetNodeLogUnitResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeLogUnit401JSONResponse externalRef0.ErrorResponse
func (response GetNodeLogUnit401JSONResponse) VisitGetNodeLogUnitResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/log/log_query_get.go b/internal/controller/api/node/log/log_query_get.go
index 218188e38..95809b30c 100644
--- a/internal/controller/api/node/log/log_query_get.go
+++ b/internal/controller/api/node/log/log_query_get.go
@@ -30,6 +30,7 @@ import (
"github.com/retr0h/osapi/internal/controller/api/node/log/gen"
"github.com/retr0h/osapi/internal/job"
logProv "github.com/retr0h/osapi/internal/provider/node/log"
+ "github.com/retr0h/osapi/internal/validation"
)
// GetNodeLog returns system log entries from a target node.
@@ -38,7 +39,11 @@ func (s *Log) GetNodeLog(
request gen.GetNodeLogRequestObject,
) (gen.GetNodeLogResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeLog500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeLog400JSONResponse{Error: &errMsg}, nil
+ }
+
+ if errMsg, ok := validation.Struct(request.Params); !ok {
+ return gen.GetNodeLog400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/log/log_query_get_public_test.go b/internal/controller/api/node/log/log_query_get_public_test.go
index 8df14d26d..d7e8d484c 100644
--- a/internal/controller/api/node/log/log_query_get_public_test.go
+++ b/internal/controller/api/node/log/log_query_get_public_test.go
@@ -158,12 +158,28 @@ func (s *LogQueryPublicTestSuite) TestGetNodeLog() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeLogResponseObject) {
- r, ok := resp.(gen.GetNodeLog500JSONResponse)
+ r, ok := resp.(gen.GetNodeLog400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
},
},
+ {
+ name: "validation error invalid priority",
+ request: gen.GetNodeLogRequestObject{
+ Hostname: "server1",
+ Params: gen.GetNodeLogParams{
+ Priority: stringPtr("bogus"),
+ },
+ },
+ setupMock: func() {},
+ validateFunc: func(resp gen.GetNodeLogResponseObject) {
+ r, ok := resp.(gen.GetNodeLog400JSONResponse)
+ s.True(ok)
+ s.Require().NotNil(r.Error)
+ s.Contains(*r.Error, "oneof")
+ },
+ },
{
name: "success with nil response data",
request: gen.GetNodeLogRequestObject{
@@ -381,9 +397,18 @@ func (s *LogQueryPublicTestSuite) TestGetNodeLogHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target", "not found"},
},
+ {
+ name: "when invalid priority returns 400",
+ path: "/node/server1/log?priority=bogus",
+ setupJobMock: func() *jobmocks.MockJobClient {
+ return jobmocks.NewMockJobClient(s.mockCtrl)
+ },
+ wantCode: http.StatusBadRequest,
+ wantContains: []string{`"error"`, "oneof"},
+ },
}
for _, tc := range tests {
diff --git a/internal/controller/api/node/log/log_source_get.go b/internal/controller/api/node/log/log_source_get.go
index 01adedc9c..f60fc2cc5 100644
--- a/internal/controller/api/node/log/log_source_get.go
+++ b/internal/controller/api/node/log/log_source_get.go
@@ -37,7 +37,7 @@ func (s *Log) GetNodeLogSource(
request gen.GetNodeLogSourceRequestObject,
) (gen.GetNodeLogSourceResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeLogSource500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeLogSource400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/log/log_source_get_public_test.go b/internal/controller/api/node/log/log_source_get_public_test.go
index f0335c24f..bfc58f15a 100644
--- a/internal/controller/api/node/log/log_source_get_public_test.go
+++ b/internal/controller/api/node/log/log_source_get_public_test.go
@@ -121,7 +121,7 @@ func (s *LogSourcePublicTestSuite) TestGetNodeLogSource() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeLogSourceResponseObject) {
- r, ok := resp.(gen.GetNodeLogSource500JSONResponse)
+ r, ok := resp.(gen.GetNodeLogSource400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -342,7 +342,7 @@ func (s *LogSourcePublicTestSuite) TestGetNodeLogSourceHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target", "not found"},
},
}
diff --git a/internal/controller/api/node/log/log_unit_get.go b/internal/controller/api/node/log/log_unit_get.go
index 7b99dd597..7787fe167 100644
--- a/internal/controller/api/node/log/log_unit_get.go
+++ b/internal/controller/api/node/log/log_unit_get.go
@@ -30,6 +30,7 @@ import (
"github.com/retr0h/osapi/internal/controller/api/node/log/gen"
"github.com/retr0h/osapi/internal/job"
logProv "github.com/retr0h/osapi/internal/provider/node/log"
+ "github.com/retr0h/osapi/internal/validation"
)
// unitQueryPayload is the JSON payload sent to the agent for unit log queries.
@@ -46,7 +47,11 @@ func (s *Log) GetNodeLogUnit(
request gen.GetNodeLogUnitRequestObject,
) (gen.GetNodeLogUnitResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeLogUnit500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeLogUnit400JSONResponse{Error: &errMsg}, nil
+ }
+
+ if errMsg, ok := validation.Struct(request.Params); !ok {
+ return gen.GetNodeLogUnit400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/log/log_unit_get_public_test.go b/internal/controller/api/node/log/log_unit_get_public_test.go
index b0831bc5f..ac1f5090a 100644
--- a/internal/controller/api/node/log/log_unit_get_public_test.go
+++ b/internal/controller/api/node/log/log_unit_get_public_test.go
@@ -149,12 +149,29 @@ func (s *LogUnitPublicTestSuite) TestGetNodeLogUnit() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeLogUnitResponseObject) {
- r, ok := resp.(gen.GetNodeLogUnit500JSONResponse)
+ r, ok := resp.(gen.GetNodeLogUnit400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
},
},
+ {
+ name: "validation error invalid priority",
+ request: gen.GetNodeLogUnitRequestObject{
+ Hostname: "server1",
+ Name: "sshd.service",
+ Params: gen.GetNodeLogUnitParams{
+ Priority: stringPtr("bogus"),
+ },
+ },
+ setupMock: func() {},
+ validateFunc: func(resp gen.GetNodeLogUnitResponseObject) {
+ r, ok := resp.(gen.GetNodeLogUnit400JSONResponse)
+ s.True(ok)
+ s.Require().NotNil(r.Error)
+ s.Contains(*r.Error, "oneof")
+ },
+ },
{
name: "success with nil response data",
request: gen.GetNodeLogUnitRequestObject{
@@ -377,9 +394,18 @@ func (s *LogUnitPublicTestSuite) TestGetNodeLogUnitHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target", "not found"},
},
+ {
+ name: "when invalid priority returns 400",
+ path: "/node/server1/log/unit/sshd.service?priority=bogus",
+ setupJobMock: func() *jobmocks.MockJobClient {
+ return jobmocks.NewMockJobClient(s.mockCtrl)
+ },
+ wantCode: http.StatusBadRequest,
+ wantContains: []string{`"error"`, "oneof"},
+ },
}
for _, tc := range tests {
diff --git a/internal/controller/api/node/ntp/gen/api.yaml b/internal/controller/api/node/ntp/gen/api.yaml
index 02a95a7ac..49ce5e70b 100644
--- a/internal/controller/api/node/ntp/gen/api.yaml
+++ b/internal/controller/api/node/ntp/gen/api.yaml
@@ -49,6 +49,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/NtpCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -197,6 +203,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/NtpDeleteResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/ntp/gen/ntp.gen.go b/internal/controller/api/node/ntp/gen/ntp.gen.go
index c723fa1bc..c83d68940 100644
--- a/internal/controller/api/node/ntp/gen/ntp.gen.go
+++ b/internal/controller/api/node/ntp/gen/ntp.gen.go
@@ -279,6 +279,15 @@ func (response DeleteNodeNtp200JSONResponse) VisitDeleteNodeNtpResponse(w http.R
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeNtp400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeNtp400JSONResponse) VisitDeleteNodeNtpResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeNtp401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeNtp401JSONResponse) VisitDeleteNodeNtpResponse(w http.ResponseWriter) error {
@@ -332,6 +341,15 @@ func (response GetNodeNtp200JSONResponse) VisitGetNodeNtpResponse(w http.Respons
return json.NewEncoder(w).Encode(response)
}
+type GetNodeNtp400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeNtp400JSONResponse) VisitGetNodeNtpResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeNtp401JSONResponse externalRef0.ErrorResponse
func (response GetNodeNtp401JSONResponse) VisitGetNodeNtpResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/ntp/ntp_delete.go b/internal/controller/api/node/ntp/ntp_delete.go
index e9b5bd5b7..33cba2705 100644
--- a/internal/controller/api/node/ntp/ntp_delete.go
+++ b/internal/controller/api/node/ntp/ntp_delete.go
@@ -39,7 +39,7 @@ func (s *Ntp) DeleteNodeNtp(
request gen.DeleteNodeNtpRequestObject,
) (gen.DeleteNodeNtpResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeNtp500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeNtp400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/ntp/ntp_delete_public_test.go b/internal/controller/api/node/ntp/ntp_delete_public_test.go
index e89f992cd..49efd9c73 100644
--- a/internal/controller/api/node/ntp/ntp_delete_public_test.go
+++ b/internal/controller/api/node/ntp/ntp_delete_public_test.go
@@ -126,7 +126,7 @@ func (s *NtpDeletePublicTestSuite) TestDeleteNodeNtp() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeNtpResponseObject) {
- r, ok := resp.(gen.DeleteNodeNtp500JSONResponse)
+ r, ok := resp.(gen.DeleteNodeNtp400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -397,7 +397,7 @@ func (s *NtpDeletePublicTestSuite) TestDeleteNodeNtpValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/ntp/ntp_get.go b/internal/controller/api/node/ntp/ntp_get.go
index ae92f4751..caa62f800 100644
--- a/internal/controller/api/node/ntp/ntp_get.go
+++ b/internal/controller/api/node/ntp/ntp_get.go
@@ -38,7 +38,7 @@ func (s *Ntp) GetNodeNtp(
request gen.GetNodeNtpRequestObject,
) (gen.GetNodeNtpResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeNtp500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeNtp400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/ntp/ntp_get_public_test.go b/internal/controller/api/node/ntp/ntp_get_public_test.go
index 7a492add1..1a7465ce9 100644
--- a/internal/controller/api/node/ntp/ntp_get_public_test.go
+++ b/internal/controller/api/node/ntp/ntp_get_public_test.go
@@ -267,7 +267,7 @@ func (s *NtpGetPublicTestSuite) TestGetNodeNtp() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeNtpResponseObject) {
- r, ok := resp.(gen.GetNodeNtp500JSONResponse)
+ r, ok := resp.(gen.GetNodeNtp400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -374,7 +374,7 @@ func (s *NtpGetPublicTestSuite) TestGetNodeNtpValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/package/gen/api.yaml b/internal/controller/api/node/package/gen/api.yaml
index 46fe72917..439570bc4 100644
--- a/internal/controller/api/node/package/gen/api.yaml
+++ b/internal/controller/api/node/package/gen/api.yaml
@@ -51,6 +51,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -144,6 +150,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -189,6 +201,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -236,6 +254,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PackageMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -274,6 +298,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UpdateCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/package/gen/package.gen.go b/internal/controller/api/node/package/gen/package.gen.go
index 4cd2cba61..e17a9935a 100644
--- a/internal/controller/api/node/package/gen/package.gen.go
+++ b/internal/controller/api/node/package/gen/package.gen.go
@@ -372,6 +372,15 @@ func (response GetNodePackage200JSONResponse) VisitGetNodePackageResponse(w http
return json.NewEncoder(w).Encode(response)
}
+type GetNodePackage400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodePackage400JSONResponse) VisitGetNodePackageResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodePackage401JSONResponse externalRef0.ErrorResponse
func (response GetNodePackage401JSONResponse) VisitGetNodePackageResponse(w http.ResponseWriter) error {
@@ -470,6 +479,15 @@ func (response GetNodePackageUpdate200JSONResponse) VisitGetNodePackageUpdateRes
return json.NewEncoder(w).Encode(response)
}
+type GetNodePackageUpdate400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodePackageUpdate400JSONResponse) VisitGetNodePackageUpdateResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodePackageUpdate401JSONResponse externalRef0.ErrorResponse
func (response GetNodePackageUpdate401JSONResponse) VisitGetNodePackageUpdateResponse(w http.ResponseWriter) error {
@@ -514,6 +532,15 @@ func (response PostNodePackageUpdate200JSONResponse) VisitPostNodePackageUpdateR
return json.NewEncoder(w).Encode(response)
}
+type PostNodePackageUpdate400JSONResponse externalRef0.ErrorResponse
+
+func (response PostNodePackageUpdate400JSONResponse) VisitPostNodePackageUpdateResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type PostNodePackageUpdate401JSONResponse externalRef0.ErrorResponse
func (response PostNodePackageUpdate401JSONResponse) VisitPostNodePackageUpdateResponse(w http.ResponseWriter) error {
@@ -559,6 +586,15 @@ func (response DeleteNodePackage200JSONResponse) VisitDeleteNodePackageResponse(
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodePackage400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodePackage400JSONResponse) VisitDeleteNodePackageResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodePackage401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodePackage401JSONResponse) VisitDeleteNodePackageResponse(w http.ResponseWriter) error {
@@ -613,6 +649,15 @@ func (response GetNodePackageByName200JSONResponse) VisitGetNodePackageByNameRes
return json.NewEncoder(w).Encode(response)
}
+type GetNodePackageByName400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodePackageByName400JSONResponse) VisitGetNodePackageByNameResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodePackageByName401JSONResponse externalRef0.ErrorResponse
func (response GetNodePackageByName401JSONResponse) VisitGetNodePackageByNameResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/package/package_get.go b/internal/controller/api/node/package/package_get.go
index 5b21d654a..ca070da48 100644
--- a/internal/controller/api/node/package/package_get.go
+++ b/internal/controller/api/node/package/package_get.go
@@ -39,7 +39,7 @@ func (p *Package) GetNodePackageByName(
request gen.GetNodePackageByNameRequestObject,
) (gen.GetNodePackageByNameResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodePackageByName500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodePackageByName400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/package/package_get_public_test.go b/internal/controller/api/node/package/package_get_public_test.go
index 60c593331..3b7f645d0 100644
--- a/internal/controller/api/node/package/package_get_public_test.go
+++ b/internal/controller/api/node/package/package_get_public_test.go
@@ -177,7 +177,7 @@ func (s *PackageGetPublicTestSuite) TestGetNodePackageByName() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodePackageByNameResponseObject) {
- r, ok := resp.(gen.GetNodePackageByName500JSONResponse)
+ r, ok := resp.(gen.GetNodePackageByName400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -364,7 +364,7 @@ func (s *PackageGetPublicTestSuite) TestGetNodePackageByNameValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/package/package_list_get.go b/internal/controller/api/node/package/package_list_get.go
index 80f3a68e0..bf7fa3bcb 100644
--- a/internal/controller/api/node/package/package_list_get.go
+++ b/internal/controller/api/node/package/package_list_get.go
@@ -38,7 +38,7 @@ func (p *Package) GetNodePackage(
request gen.GetNodePackageRequestObject,
) (gen.GetNodePackageResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodePackage500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodePackage400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/package/package_list_get_public_test.go b/internal/controller/api/node/package/package_list_get_public_test.go
index 4b58e3aae..390cf2ac0 100644
--- a/internal/controller/api/node/package/package_list_get_public_test.go
+++ b/internal/controller/api/node/package/package_list_get_public_test.go
@@ -154,7 +154,7 @@ func (s *PackageListGetPublicTestSuite) TestGetNodePackage() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodePackageResponseObject) {
- r, ok := resp.(gen.GetNodePackage500JSONResponse)
+ r, ok := resp.(gen.GetNodePackage400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -384,7 +384,7 @@ func (s *PackageListGetPublicTestSuite) TestGetNodePackageValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/package/package_remove.go b/internal/controller/api/node/package/package_remove.go
index 8488aa1c2..8ba34cf6b 100644
--- a/internal/controller/api/node/package/package_remove.go
+++ b/internal/controller/api/node/package/package_remove.go
@@ -39,7 +39,7 @@ func (p *Package) DeleteNodePackage(
request gen.DeleteNodePackageRequestObject,
) (gen.DeleteNodePackageResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodePackage500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodePackage400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/package/package_remove_public_test.go b/internal/controller/api/node/package/package_remove_public_test.go
index f463a5eb3..813da2d7e 100644
--- a/internal/controller/api/node/package/package_remove_public_test.go
+++ b/internal/controller/api/node/package/package_remove_public_test.go
@@ -172,7 +172,7 @@ func (s *PackageRemovePublicTestSuite) TestDeleteNodePackage() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodePackageResponseObject) {
- r, ok := resp.(gen.DeleteNodePackage500JSONResponse)
+ r, ok := resp.(gen.DeleteNodePackage400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -353,7 +353,7 @@ func (s *PackageRemovePublicTestSuite) TestDeleteNodePackageValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/package/package_update_get.go b/internal/controller/api/node/package/package_update_get.go
index 105643a47..a03a4bd16 100644
--- a/internal/controller/api/node/package/package_update_get.go
+++ b/internal/controller/api/node/package/package_update_get.go
@@ -38,7 +38,7 @@ func (p *Package) GetNodePackageUpdate(
request gen.GetNodePackageUpdateRequestObject,
) (gen.GetNodePackageUpdateResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodePackageUpdate500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodePackageUpdate400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/package/package_update_get_public_test.go b/internal/controller/api/node/package/package_update_get_public_test.go
index 296adda2a..5d94fd726 100644
--- a/internal/controller/api/node/package/package_update_get_public_test.go
+++ b/internal/controller/api/node/package/package_update_get_public_test.go
@@ -154,7 +154,7 @@ func (s *PackageUpdateGetPublicTestSuite) TestGetNodePackageUpdate() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodePackageUpdateResponseObject) {
- r, ok := resp.(gen.GetNodePackageUpdate500JSONResponse)
+ r, ok := resp.(gen.GetNodePackageUpdate400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -334,7 +334,7 @@ func (s *PackageUpdateGetPublicTestSuite) TestGetNodePackageUpdateValidationHTTP
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/package/package_update_post.go b/internal/controller/api/node/package/package_update_post.go
index a7d5261e0..0757b7159 100644
--- a/internal/controller/api/node/package/package_update_post.go
+++ b/internal/controller/api/node/package/package_update_post.go
@@ -38,7 +38,7 @@ func (p *Package) PostNodePackageUpdate(
request gen.PostNodePackageUpdateRequestObject,
) (gen.PostNodePackageUpdateResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.PostNodePackageUpdate500JSONResponse{Error: &errMsg}, nil
+ return gen.PostNodePackageUpdate400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/package/package_update_post_public_test.go b/internal/controller/api/node/package/package_update_post_public_test.go
index 8d01d6b64..c01889fd2 100644
--- a/internal/controller/api/node/package/package_update_post_public_test.go
+++ b/internal/controller/api/node/package/package_update_post_public_test.go
@@ -121,7 +121,7 @@ func (s *PackageUpdatePostPublicTestSuite) TestPostNodePackageUpdate() {
},
setupMock: func() {},
validateFunc: func(resp gen.PostNodePackageUpdateResponseObject) {
- r, ok := resp.(gen.PostNodePackageUpdate500JSONResponse)
+ r, ok := resp.(gen.PostNodePackageUpdate400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -297,7 +297,7 @@ func (s *PackageUpdatePostPublicTestSuite) TestPostNodePackageUpdateValidationHT
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/process/gen/api.yaml b/internal/controller/api/node/process/gen/api.yaml
index 614691ae4..c660e4292 100644
--- a/internal/controller/api/node/process/gen/api.yaml
+++ b/internal/controller/api/node/process/gen/api.yaml
@@ -49,6 +49,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ProcessCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -89,6 +95,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ProcessGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/process/gen/process.gen.go b/internal/controller/api/node/process/gen/process.gen.go
index 48e8a4620..606abb961 100644
--- a/internal/controller/api/node/process/gen/process.gen.go
+++ b/internal/controller/api/node/process/gen/process.gen.go
@@ -322,6 +322,15 @@ func (response GetNodeProcess200JSONResponse) VisitGetNodeProcessResponse(w http
return json.NewEncoder(w).Encode(response)
}
+type GetNodeProcess400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeProcess400JSONResponse) VisitGetNodeProcessResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeProcess401JSONResponse externalRef0.ErrorResponse
func (response GetNodeProcess401JSONResponse) VisitGetNodeProcessResponse(w http.ResponseWriter) error {
@@ -367,6 +376,15 @@ func (response GetNodeProcessByPid200JSONResponse) VisitGetNodeProcessByPidRespo
return json.NewEncoder(w).Encode(response)
}
+type GetNodeProcessByPid400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeProcessByPid400JSONResponse) VisitGetNodeProcessByPidResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeProcessByPid401JSONResponse externalRef0.ErrorResponse
func (response GetNodeProcessByPid401JSONResponse) VisitGetNodeProcessByPidResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/process/process_get.go b/internal/controller/api/node/process/process_get.go
index 457edccca..2651dd13b 100644
--- a/internal/controller/api/node/process/process_get.go
+++ b/internal/controller/api/node/process/process_get.go
@@ -39,7 +39,7 @@ func (s *Process) GetNodeProcessByPid(
request gen.GetNodeProcessByPidRequestObject,
) (gen.GetNodeProcessByPidResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeProcessByPid500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeProcessByPid400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/process/process_get_public_test.go b/internal/controller/api/node/process/process_get_public_test.go
index 383ce3aa4..3554cda45 100644
--- a/internal/controller/api/node/process/process_get_public_test.go
+++ b/internal/controller/api/node/process/process_get_public_test.go
@@ -126,7 +126,7 @@ func (s *ProcessGetPublicTestSuite) TestGetNodeProcessByPid() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeProcessByPidResponseObject) {
- r, ok := resp.(gen.GetNodeProcessByPid500JSONResponse)
+ r, ok := resp.(gen.GetNodeProcessByPid400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -370,7 +370,7 @@ func (s *ProcessGetPublicTestSuite) TestGetNodeProcessByPidValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target", "not found"},
},
}
diff --git a/internal/controller/api/node/process/process_list_get.go b/internal/controller/api/node/process/process_list_get.go
index 85370595c..51a842c24 100644
--- a/internal/controller/api/node/process/process_list_get.go
+++ b/internal/controller/api/node/process/process_list_get.go
@@ -38,7 +38,7 @@ func (s *Process) GetNodeProcess(
request gen.GetNodeProcessRequestObject,
) (gen.GetNodeProcessResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeProcess500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeProcess400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/process/process_list_get_public_test.go b/internal/controller/api/node/process/process_list_get_public_test.go
index a3786f075..8a36abd65 100644
--- a/internal/controller/api/node/process/process_list_get_public_test.go
+++ b/internal/controller/api/node/process/process_list_get_public_test.go
@@ -127,7 +127,7 @@ func (s *ProcessListPublicTestSuite) TestGetNodeProcess() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeProcessResponseObject) {
- r, ok := resp.(gen.GetNodeProcess500JSONResponse)
+ r, ok := resp.(gen.GetNodeProcess400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -377,7 +377,7 @@ func (s *ProcessListPublicTestSuite) TestGetNodeProcessValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target", "not found"},
},
}
diff --git a/internal/controller/api/node/schedule/cron_delete.go b/internal/controller/api/node/schedule/cron_delete.go
index 72cdc41f9..185c96550 100644
--- a/internal/controller/api/node/schedule/cron_delete.go
+++ b/internal/controller/api/node/schedule/cron_delete.go
@@ -39,7 +39,7 @@ func (s *Schedule) DeleteNodeScheduleCron(
request gen.DeleteNodeScheduleCronRequestObject,
) (gen.DeleteNodeScheduleCronResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeScheduleCron500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeScheduleCron400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/schedule/cron_delete_public_test.go b/internal/controller/api/node/schedule/cron_delete_public_test.go
index 828270b40..d46653c87 100644
--- a/internal/controller/api/node/schedule/cron_delete_public_test.go
+++ b/internal/controller/api/node/schedule/cron_delete_public_test.go
@@ -293,7 +293,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) {
- r, ok := resp.(gen.DeleteNodeScheduleCron500JSONResponse)
+ r, ok := resp.(gen.DeleteNodeScheduleCron400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -454,7 +454,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/schedule/cron_get.go b/internal/controller/api/node/schedule/cron_get.go
index 7cf398117..e21cd6265 100644
--- a/internal/controller/api/node/schedule/cron_get.go
+++ b/internal/controller/api/node/schedule/cron_get.go
@@ -39,7 +39,7 @@ func (s *Schedule) GetNodeScheduleCronByName(
request gen.GetNodeScheduleCronByNameRequestObject,
) (gen.GetNodeScheduleCronByNameResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeScheduleCronByName500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeScheduleCronByName400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/schedule/cron_get_public_test.go b/internal/controller/api/node/schedule/cron_get_public_test.go
index d12438947..18efcf8f1 100644
--- a/internal/controller/api/node/schedule/cron_get_public_test.go
+++ b/internal/controller/api/node/schedule/cron_get_public_test.go
@@ -296,7 +296,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) {
- r, ok := resp.(gen.GetNodeScheduleCronByName500JSONResponse)
+ r, ok := resp.(gen.GetNodeScheduleCronByName400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -477,7 +477,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/schedule/cron_list_get.go b/internal/controller/api/node/schedule/cron_list_get.go
index 233fcdb48..9f856e81b 100644
--- a/internal/controller/api/node/schedule/cron_list_get.go
+++ b/internal/controller/api/node/schedule/cron_list_get.go
@@ -38,7 +38,7 @@ func (s *Schedule) GetNodeScheduleCron(
request gen.GetNodeScheduleCronRequestObject,
) (gen.GetNodeScheduleCronResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeScheduleCron500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeScheduleCron400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/schedule/cron_list_get_public_test.go b/internal/controller/api/node/schedule/cron_list_get_public_test.go
index aa8305b87..b014fe3c2 100644
--- a/internal/controller/api/node/schedule/cron_list_get_public_test.go
+++ b/internal/controller/api/node/schedule/cron_list_get_public_test.go
@@ -193,7 +193,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) {
- r, ok := resp.(gen.GetNodeScheduleCron500JSONResponse)
+ r, ok := resp.(gen.GetNodeScheduleCron400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -454,7 +454,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/schedule/cron_update.go b/internal/controller/api/node/schedule/cron_update.go
index 24025269a..ee875b8b2 100644
--- a/internal/controller/api/node/schedule/cron_update.go
+++ b/internal/controller/api/node/schedule/cron_update.go
@@ -47,6 +47,10 @@ func (s *Schedule) PutNodeScheduleCron(
return gen.PutNodeScheduleCron400JSONResponse{Error: &errMsg}, nil
}
+ if errMsg, ok := validation.AtLeastOneField(request.Body); !ok {
+ return gen.PutNodeScheduleCron400JSONResponse{Error: &errMsg}, nil
+ }
+
entry := cronProv.Entry{
Name: request.Name,
}
diff --git a/internal/controller/api/node/schedule/cron_update_public_test.go b/internal/controller/api/node/schedule/cron_update_public_test.go
index 4554b67a8..a3bf4fbf9 100644
--- a/internal/controller/api/node/schedule/cron_update_public_test.go
+++ b/internal/controller/api/node/schedule/cron_update_public_test.go
@@ -131,38 +131,18 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() {
},
},
{
- name: "success with nil optional fields",
+ name: "when empty body returns 400",
request: gen.PutNodeScheduleCronRequestObject{
Hostname: "server1",
Name: "backup",
Body: &gen.PutNodeScheduleCronJSONRequestBody{},
},
- setupMock: func() {
- s.mockJobClient.EXPECT().
- Modify(
- gomock.Any(),
- "server1",
- "schedule",
- job.OperationCronUpdate,
- gomock.Any(),
- ).
- Return(
- "550e8400-e29b-41d4-a716-446655440000",
- &job.Response{
- JobID: "550e8400-e29b-41d4-a716-446655440000",
- Hostname: "agent1",
- Changed: boolPtr(false),
- Data: json.RawMessage(`{"name":"backup","changed":false}`),
- },
- nil,
- )
- },
+ setupMock: func() {},
validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) {
- r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse)
+ r, ok := resp.(gen.PutNodeScheduleCron400JSONResponse)
s.True(ok)
- s.Require().Len(r.Results, 1)
- s.Require().NotNil(r.Results[0].Changed)
- s.False(*r.Results[0].Changed)
+ s.Require().NotNil(r.Error)
+ s.Contains(*r.Error, "at least one field")
},
},
{
@@ -547,6 +527,26 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronValidationHTTP() {
wantCode: http.StatusOK,
wantContains: []string{`"job_id"`, `"results"`},
},
+ {
+ name: "when empty body returns 400",
+ path: "/node/server1/schedule/cron/backup",
+ body: `{}`,
+ setupJobMock: func() *jobmocks.MockJobClient {
+ return jobmocks.NewMockJobClient(s.mockCtrl)
+ },
+ wantCode: http.StatusBadRequest,
+ wantContains: []string{`"error"`, "at least one field"},
+ },
+ {
+ name: "when invalid cron schedule",
+ path: "/node/server1/schedule/cron/backup",
+ body: `{"schedule":"not-a-cron"}`,
+ setupJobMock: func() *jobmocks.MockJobClient {
+ return jobmocks.NewMockJobClient(s.mockCtrl)
+ },
+ wantCode: http.StatusBadRequest,
+ wantContains: []string{`"error"`, "Schedule"},
+ },
{
name: "when target agent not found",
path: "/node/nonexistent/schedule/cron/backup",
diff --git a/internal/controller/api/node/schedule/gen/api.yaml b/internal/controller/api/node/schedule/gen/api.yaml
index f150d775e..92b06b481 100644
--- a/internal/controller/api/node/schedule/gen/api.yaml
+++ b/internal/controller/api/node/schedule/gen/api.yaml
@@ -51,6 +51,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CronCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -144,6 +150,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CronGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -247,6 +259,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/CronDeleteResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/schedule/gen/schedule.gen.go b/internal/controller/api/node/schedule/gen/schedule.gen.go
index f14f4f67e..e7b7215e0 100644
--- a/internal/controller/api/node/schedule/gen/schedule.gen.go
+++ b/internal/controller/api/node/schedule/gen/schedule.gen.go
@@ -411,6 +411,15 @@ func (response GetNodeScheduleCron200JSONResponse) VisitGetNodeScheduleCronRespo
return json.NewEncoder(w).Encode(response)
}
+type GetNodeScheduleCron400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeScheduleCron400JSONResponse) VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeScheduleCron401JSONResponse externalRef0.ErrorResponse
func (response GetNodeScheduleCron401JSONResponse) VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error {
@@ -510,6 +519,15 @@ func (response DeleteNodeScheduleCron200JSONResponse) VisitDeleteNodeScheduleCro
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeScheduleCron400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeScheduleCron400JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeScheduleCron401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeScheduleCron401JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error {
@@ -564,6 +582,15 @@ func (response GetNodeScheduleCronByName200JSONResponse) VisitGetNodeScheduleCro
return json.NewEncoder(w).Encode(response)
}
+type GetNodeScheduleCronByName400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeScheduleCronByName400JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeScheduleCronByName401JSONResponse externalRef0.ErrorResponse
func (response GetNodeScheduleCronByName401JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/service/gen/api.yaml b/internal/controller/api/node/service/gen/api.yaml
index dee26b665..15f7edf8a 100644
--- a/internal/controller/api/node/service/gen/api.yaml
+++ b/internal/controller/api/node/service/gen/api.yaml
@@ -51,6 +51,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceListResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -144,6 +150,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -247,6 +259,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -289,6 +307,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -329,6 +353,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -369,6 +399,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -409,6 +445,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -450,6 +492,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/service/gen/service.gen.go b/internal/controller/api/node/service/gen/service.gen.go
index 74f02518c..a8283ea99 100644
--- a/internal/controller/api/node/service/gen/service.gen.go
+++ b/internal/controller/api/node/service/gen/service.gen.go
@@ -508,6 +508,15 @@ func (response GetNodeService200JSONResponse) VisitGetNodeServiceResponse(w http
return json.NewEncoder(w).Encode(response)
}
+type GetNodeService400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeService400JSONResponse) VisitGetNodeServiceResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeService401JSONResponse externalRef0.ErrorResponse
func (response GetNodeService401JSONResponse) VisitGetNodeServiceResponse(w http.ResponseWriter) error {
@@ -607,6 +616,15 @@ func (response DeleteNodeService200JSONResponse) VisitDeleteNodeServiceResponse(
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeService400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeService400JSONResponse) VisitDeleteNodeServiceResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeService401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeService401JSONResponse) VisitDeleteNodeServiceResponse(w http.ResponseWriter) error {
@@ -652,6 +670,15 @@ func (response GetNodeServiceByName200JSONResponse) VisitGetNodeServiceByNameRes
return json.NewEncoder(w).Encode(response)
}
+type GetNodeServiceByName400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeServiceByName400JSONResponse) VisitGetNodeServiceByNameResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeServiceByName401JSONResponse externalRef0.ErrorResponse
func (response GetNodeServiceByName401JSONResponse) VisitGetNodeServiceByNameResponse(w http.ResponseWriter) error {
@@ -770,6 +797,15 @@ func (response PostNodeServiceDisable200JSONResponse) VisitPostNodeServiceDisabl
return json.NewEncoder(w).Encode(response)
}
+type PostNodeServiceDisable400JSONResponse externalRef0.ErrorResponse
+
+func (response PostNodeServiceDisable400JSONResponse) VisitPostNodeServiceDisableResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type PostNodeServiceDisable401JSONResponse externalRef0.ErrorResponse
func (response PostNodeServiceDisable401JSONResponse) VisitPostNodeServiceDisableResponse(w http.ResponseWriter) error {
@@ -815,6 +851,15 @@ func (response PostNodeServiceEnable200JSONResponse) VisitPostNodeServiceEnableR
return json.NewEncoder(w).Encode(response)
}
+type PostNodeServiceEnable400JSONResponse externalRef0.ErrorResponse
+
+func (response PostNodeServiceEnable400JSONResponse) VisitPostNodeServiceEnableResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type PostNodeServiceEnable401JSONResponse externalRef0.ErrorResponse
func (response PostNodeServiceEnable401JSONResponse) VisitPostNodeServiceEnableResponse(w http.ResponseWriter) error {
@@ -860,6 +905,15 @@ func (response PostNodeServiceRestart200JSONResponse) VisitPostNodeServiceRestar
return json.NewEncoder(w).Encode(response)
}
+type PostNodeServiceRestart400JSONResponse externalRef0.ErrorResponse
+
+func (response PostNodeServiceRestart400JSONResponse) VisitPostNodeServiceRestartResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type PostNodeServiceRestart401JSONResponse externalRef0.ErrorResponse
func (response PostNodeServiceRestart401JSONResponse) VisitPostNodeServiceRestartResponse(w http.ResponseWriter) error {
@@ -905,6 +959,15 @@ func (response PostNodeServiceStart200JSONResponse) VisitPostNodeServiceStartRes
return json.NewEncoder(w).Encode(response)
}
+type PostNodeServiceStart400JSONResponse externalRef0.ErrorResponse
+
+func (response PostNodeServiceStart400JSONResponse) VisitPostNodeServiceStartResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type PostNodeServiceStart401JSONResponse externalRef0.ErrorResponse
func (response PostNodeServiceStart401JSONResponse) VisitPostNodeServiceStartResponse(w http.ResponseWriter) error {
@@ -950,6 +1013,15 @@ func (response PostNodeServiceStop200JSONResponse) VisitPostNodeServiceStopRespo
return json.NewEncoder(w).Encode(response)
}
+type PostNodeServiceStop400JSONResponse externalRef0.ErrorResponse
+
+func (response PostNodeServiceStop400JSONResponse) VisitPostNodeServiceStopResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type PostNodeServiceStop401JSONResponse externalRef0.ErrorResponse
func (response PostNodeServiceStop401JSONResponse) VisitPostNodeServiceStopResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/service/service_create_post_public_test.go b/internal/controller/api/node/service/service_create_post_public_test.go
index 7fd9c2bdb..031026255 100644
--- a/internal/controller/api/node/service/service_create_post_public_test.go
+++ b/internal/controller/api/node/service/service_create_post_public_test.go
@@ -502,6 +502,16 @@ func (s *ServiceCreatePostPublicTestSuite) TestPostNodeServiceValidationHTTP() {
wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
+ {
+ name: "when invalid body empty name",
+ path: "/node/server1/service",
+ body: `{"name":"","object":"my-app-unit-object"}`,
+ setupJobMock: func() *jobmocks.MockJobClient {
+ return jobmocks.NewMockJobClient(s.mockCtrl)
+ },
+ wantCode: http.StatusBadRequest,
+ wantContains: []string{`"error"`},
+ },
}
for _, tc := range tests {
diff --git a/internal/controller/api/node/service/service_delete.go b/internal/controller/api/node/service/service_delete.go
index 46e208724..89562c5bf 100644
--- a/internal/controller/api/node/service/service_delete.go
+++ b/internal/controller/api/node/service/service_delete.go
@@ -38,7 +38,7 @@ func (s *Service) DeleteNodeService(
request gen.DeleteNodeServiceRequestObject,
) (gen.DeleteNodeServiceResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeService500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeService400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_delete_public_test.go b/internal/controller/api/node/service/service_delete_public_test.go
index da5a13d7d..b9859eb1f 100644
--- a/internal/controller/api/node/service/service_delete_public_test.go
+++ b/internal/controller/api/node/service/service_delete_public_test.go
@@ -133,7 +133,7 @@ func (s *ServiceDeletePublicTestSuite) TestDeleteNodeService() {
request: gen.DeleteNodeServiceRequestObject{Hostname: "", Name: "my-app.service"},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeServiceResponseObject) {
- _, ok := resp.(gen.DeleteNodeService500JSONResponse)
+ _, ok := resp.(gen.DeleteNodeService400JSONResponse)
s.True(ok)
},
},
@@ -315,7 +315,7 @@ func (s *ServiceDeletePublicTestSuite) TestDeleteNodeServiceValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_disable_post.go b/internal/controller/api/node/service/service_disable_post.go
index 2b037919b..6f80a1aea 100644
--- a/internal/controller/api/node/service/service_disable_post.go
+++ b/internal/controller/api/node/service/service_disable_post.go
@@ -38,7 +38,7 @@ func (s *Service) PostNodeServiceDisable(
request gen.PostNodeServiceDisableRequestObject,
) (gen.PostNodeServiceDisableResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.PostNodeServiceDisable500JSONResponse{Error: &errMsg}, nil
+ return gen.PostNodeServiceDisable400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_disable_post_public_test.go b/internal/controller/api/node/service/service_disable_post_public_test.go
index eedbecfc7..2016b252e 100644
--- a/internal/controller/api/node/service/service_disable_post_public_test.go
+++ b/internal/controller/api/node/service/service_disable_post_public_test.go
@@ -133,7 +133,7 @@ func (s *ServiceDisablePostPublicTestSuite) TestPostNodeServiceDisable() {
request: gen.PostNodeServiceDisableRequestObject{Hostname: "", Name: "nginx.service"},
setupMock: func() {},
validateFunc: func(resp gen.PostNodeServiceDisableResponseObject) {
- _, ok := resp.(gen.PostNodeServiceDisable500JSONResponse)
+ _, ok := resp.(gen.PostNodeServiceDisable400JSONResponse)
s.True(ok)
},
},
@@ -330,7 +330,7 @@ func (s *ServiceDisablePostPublicTestSuite) TestPostNodeServiceDisableValidation
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_enable_post.go b/internal/controller/api/node/service/service_enable_post.go
index 44cbd3be2..f23304d65 100644
--- a/internal/controller/api/node/service/service_enable_post.go
+++ b/internal/controller/api/node/service/service_enable_post.go
@@ -38,7 +38,7 @@ func (s *Service) PostNodeServiceEnable(
request gen.PostNodeServiceEnableRequestObject,
) (gen.PostNodeServiceEnableResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.PostNodeServiceEnable500JSONResponse{Error: &errMsg}, nil
+ return gen.PostNodeServiceEnable400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_enable_post_public_test.go b/internal/controller/api/node/service/service_enable_post_public_test.go
index b710edc4f..091c46866 100644
--- a/internal/controller/api/node/service/service_enable_post_public_test.go
+++ b/internal/controller/api/node/service/service_enable_post_public_test.go
@@ -133,7 +133,7 @@ func (s *ServiceEnablePostPublicTestSuite) TestPostNodeServiceEnable() {
request: gen.PostNodeServiceEnableRequestObject{Hostname: "", Name: "nginx.service"},
setupMock: func() {},
validateFunc: func(resp gen.PostNodeServiceEnableResponseObject) {
- _, ok := resp.(gen.PostNodeServiceEnable500JSONResponse)
+ _, ok := resp.(gen.PostNodeServiceEnable400JSONResponse)
s.True(ok)
},
},
@@ -330,7 +330,7 @@ func (s *ServiceEnablePostPublicTestSuite) TestPostNodeServiceEnableValidationHT
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_get.go b/internal/controller/api/node/service/service_get.go
index f5ffc6d88..d7203d273 100644
--- a/internal/controller/api/node/service/service_get.go
+++ b/internal/controller/api/node/service/service_get.go
@@ -39,7 +39,7 @@ func (s *Service) GetNodeServiceByName(
request gen.GetNodeServiceByNameRequestObject,
) (gen.GetNodeServiceByNameResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeServiceByName500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeServiceByName400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_get_public_test.go b/internal/controller/api/node/service/service_get_public_test.go
index 69fb22ea9..2bf2b285d 100644
--- a/internal/controller/api/node/service/service_get_public_test.go
+++ b/internal/controller/api/node/service/service_get_public_test.go
@@ -164,7 +164,7 @@ func (s *ServiceGetPublicTestSuite) TestGetNodeServiceByName() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeServiceByNameResponseObject) {
- _, ok := resp.(gen.GetNodeServiceByName500JSONResponse)
+ _, ok := resp.(gen.GetNodeServiceByName400JSONResponse)
s.True(ok)
},
},
@@ -451,7 +451,7 @@ func (s *ServiceGetPublicTestSuite) TestGetNodeServiceByNameValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_list_get.go b/internal/controller/api/node/service/service_list_get.go
index 9cdb2ed92..460c5308c 100644
--- a/internal/controller/api/node/service/service_list_get.go
+++ b/internal/controller/api/node/service/service_list_get.go
@@ -38,7 +38,7 @@ func (s *Service) GetNodeService(
request gen.GetNodeServiceRequestObject,
) (gen.GetNodeServiceResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeService500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeService400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_list_get_public_test.go b/internal/controller/api/node/service/service_list_get_public_test.go
index 43b4dd730..689be59d1 100644
--- a/internal/controller/api/node/service/service_list_get_public_test.go
+++ b/internal/controller/api/node/service/service_list_get_public_test.go
@@ -162,7 +162,7 @@ func (s *ServiceListGetPublicTestSuite) TestGetNodeService() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeServiceResponseObject) {
- _, ok := resp.(gen.GetNodeService500JSONResponse)
+ _, ok := resp.(gen.GetNodeService400JSONResponse)
s.True(ok)
},
},
@@ -393,7 +393,7 @@ func (s *ServiceListGetPublicTestSuite) TestGetNodeServiceValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_restart_post.go b/internal/controller/api/node/service/service_restart_post.go
index 442bf4c89..c68e7eb6b 100644
--- a/internal/controller/api/node/service/service_restart_post.go
+++ b/internal/controller/api/node/service/service_restart_post.go
@@ -38,7 +38,7 @@ func (s *Service) PostNodeServiceRestart(
request gen.PostNodeServiceRestartRequestObject,
) (gen.PostNodeServiceRestartResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.PostNodeServiceRestart500JSONResponse{Error: &errMsg}, nil
+ return gen.PostNodeServiceRestart400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_restart_post_public_test.go b/internal/controller/api/node/service/service_restart_post_public_test.go
index 75a64bc32..76417eb5f 100644
--- a/internal/controller/api/node/service/service_restart_post_public_test.go
+++ b/internal/controller/api/node/service/service_restart_post_public_test.go
@@ -133,7 +133,7 @@ func (s *ServiceRestartPostPublicTestSuite) TestPostNodeServiceRestart() {
request: gen.PostNodeServiceRestartRequestObject{Hostname: "", Name: "nginx.service"},
setupMock: func() {},
validateFunc: func(resp gen.PostNodeServiceRestartResponseObject) {
- _, ok := resp.(gen.PostNodeServiceRestart500JSONResponse)
+ _, ok := resp.(gen.PostNodeServiceRestart400JSONResponse)
s.True(ok)
},
},
@@ -330,7 +330,7 @@ func (s *ServiceRestartPostPublicTestSuite) TestPostNodeServiceRestartValidation
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_start_post.go b/internal/controller/api/node/service/service_start_post.go
index 4d6cf4871..4a4d6e248 100644
--- a/internal/controller/api/node/service/service_start_post.go
+++ b/internal/controller/api/node/service/service_start_post.go
@@ -38,7 +38,7 @@ func (s *Service) PostNodeServiceStart(
request gen.PostNodeServiceStartRequestObject,
) (gen.PostNodeServiceStartResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.PostNodeServiceStart500JSONResponse{Error: &errMsg}, nil
+ return gen.PostNodeServiceStart400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_start_post_public_test.go b/internal/controller/api/node/service/service_start_post_public_test.go
index 5c730047b..b7d562c12 100644
--- a/internal/controller/api/node/service/service_start_post_public_test.go
+++ b/internal/controller/api/node/service/service_start_post_public_test.go
@@ -133,7 +133,7 @@ func (s *ServiceStartPostPublicTestSuite) TestPostNodeServiceStart() {
request: gen.PostNodeServiceStartRequestObject{Hostname: "", Name: "nginx.service"},
setupMock: func() {},
validateFunc: func(resp gen.PostNodeServiceStartResponseObject) {
- _, ok := resp.(gen.PostNodeServiceStart500JSONResponse)
+ _, ok := resp.(gen.PostNodeServiceStart400JSONResponse)
s.True(ok)
},
},
@@ -315,7 +315,7 @@ func (s *ServiceStartPostPublicTestSuite) TestPostNodeServiceStartValidationHTTP
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_stop_post.go b/internal/controller/api/node/service/service_stop_post.go
index c8d024218..3c2e51059 100644
--- a/internal/controller/api/node/service/service_stop_post.go
+++ b/internal/controller/api/node/service/service_stop_post.go
@@ -38,7 +38,7 @@ func (s *Service) PostNodeServiceStop(
request gen.PostNodeServiceStopRequestObject,
) (gen.PostNodeServiceStopResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.PostNodeServiceStop500JSONResponse{Error: &errMsg}, nil
+ return gen.PostNodeServiceStop400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/service/service_stop_post_public_test.go b/internal/controller/api/node/service/service_stop_post_public_test.go
index ef3d83b8e..d6016bb1c 100644
--- a/internal/controller/api/node/service/service_stop_post_public_test.go
+++ b/internal/controller/api/node/service/service_stop_post_public_test.go
@@ -133,7 +133,7 @@ func (s *ServiceStopPostPublicTestSuite) TestPostNodeServiceStop() {
request: gen.PostNodeServiceStopRequestObject{Hostname: "", Name: "nginx.service"},
setupMock: func() {},
validateFunc: func(resp gen.PostNodeServiceStopResponseObject) {
- _, ok := resp.(gen.PostNodeServiceStop500JSONResponse)
+ _, ok := resp.(gen.PostNodeServiceStop400JSONResponse)
s.True(ok)
},
},
@@ -315,7 +315,7 @@ func (s *ServiceStopPostPublicTestSuite) TestPostNodeServiceStopValidationHTTP()
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/service/service_update_put_public_test.go b/internal/controller/api/node/service/service_update_put_public_test.go
index 20f575111..66c944e58 100644
--- a/internal/controller/api/node/service/service_update_put_public_test.go
+++ b/internal/controller/api/node/service/service_update_put_public_test.go
@@ -408,6 +408,16 @@ func (s *ServiceUpdatePutPublicTestSuite) TestPutNodeServiceValidationHTTP() {
wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
+ {
+ name: "when invalid body empty object",
+ path: "/node/server1/service/my-app.service",
+ body: `{}`,
+ setupJobMock: func() *jobmocks.MockJobClient {
+ return jobmocks.NewMockJobClient(s.mockCtrl)
+ },
+ wantCode: http.StatusBadRequest,
+ wantContains: []string{`"error"`},
+ },
}
for _, tc := range tests {
diff --git a/internal/controller/api/node/sysctl/gen/api.yaml b/internal/controller/api/node/sysctl/gen/api.yaml
index 3af31ba22..a8c8b757b 100644
--- a/internal/controller/api/node/sysctl/gen/api.yaml
+++ b/internal/controller/api/node/sysctl/gen/api.yaml
@@ -51,6 +51,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SysctlCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -146,6 +152,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SysctlGetResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -251,6 +263,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SysctlDeleteResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/sysctl/gen/sysctl.gen.go b/internal/controller/api/node/sysctl/gen/sysctl.gen.go
index aaa83966a..d2f1ba036 100644
--- a/internal/controller/api/node/sysctl/gen/sysctl.gen.go
+++ b/internal/controller/api/node/sysctl/gen/sysctl.gen.go
@@ -332,6 +332,15 @@ func (response GetNodeSysctl200JSONResponse) VisitGetNodeSysctlResponse(w http.R
return json.NewEncoder(w).Encode(response)
}
+type GetNodeSysctl400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeSysctl400JSONResponse) VisitGetNodeSysctlResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeSysctl401JSONResponse externalRef0.ErrorResponse
func (response GetNodeSysctl401JSONResponse) VisitGetNodeSysctlResponse(w http.ResponseWriter) error {
@@ -431,6 +440,15 @@ func (response DeleteNodeSysctl200JSONResponse) VisitDeleteNodeSysctlResponse(w
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeSysctl400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeSysctl400JSONResponse) VisitDeleteNodeSysctlResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeSysctl401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeSysctl401JSONResponse) VisitDeleteNodeSysctlResponse(w http.ResponseWriter) error {
@@ -485,6 +503,15 @@ func (response GetNodeSysctlByKey200JSONResponse) VisitGetNodeSysctlByKeyRespons
return json.NewEncoder(w).Encode(response)
}
+type GetNodeSysctlByKey400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeSysctlByKey400JSONResponse) VisitGetNodeSysctlByKeyResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeSysctlByKey401JSONResponse externalRef0.ErrorResponse
func (response GetNodeSysctlByKey401JSONResponse) VisitGetNodeSysctlByKeyResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/sysctl/sysctl_delete.go b/internal/controller/api/node/sysctl/sysctl_delete.go
index f9c006c06..052341f52 100644
--- a/internal/controller/api/node/sysctl/sysctl_delete.go
+++ b/internal/controller/api/node/sysctl/sysctl_delete.go
@@ -39,7 +39,7 @@ func (s *Sysctl) DeleteNodeSysctl(
request gen.DeleteNodeSysctlRequestObject,
) (gen.DeleteNodeSysctlResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeSysctl500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeSysctl400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/sysctl/sysctl_delete_public_test.go b/internal/controller/api/node/sysctl/sysctl_delete_public_test.go
index 67e57ccc2..a2d0cc609 100644
--- a/internal/controller/api/node/sysctl/sysctl_delete_public_test.go
+++ b/internal/controller/api/node/sysctl/sysctl_delete_public_test.go
@@ -129,7 +129,7 @@ func (s *SysctlDeletePublicTestSuite) TestDeleteNodeSysctl() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeSysctlResponseObject) {
- r, ok := resp.(gen.DeleteNodeSysctl500JSONResponse)
+ r, ok := resp.(gen.DeleteNodeSysctl400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -410,7 +410,7 @@ func (s *SysctlDeletePublicTestSuite) TestDeleteNodeSysctlValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/sysctl/sysctl_get.go b/internal/controller/api/node/sysctl/sysctl_get.go
index e29f1c29d..2e2842a42 100644
--- a/internal/controller/api/node/sysctl/sysctl_get.go
+++ b/internal/controller/api/node/sysctl/sysctl_get.go
@@ -39,7 +39,7 @@ func (s *Sysctl) GetNodeSysctlByKey(
request gen.GetNodeSysctlByKeyRequestObject,
) (gen.GetNodeSysctlByKeyResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeSysctlByKey500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeSysctlByKey400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/sysctl/sysctl_get_public_test.go b/internal/controller/api/node/sysctl/sysctl_get_public_test.go
index bab69322e..f718d97f8 100644
--- a/internal/controller/api/node/sysctl/sysctl_get_public_test.go
+++ b/internal/controller/api/node/sysctl/sysctl_get_public_test.go
@@ -294,7 +294,7 @@ func (s *SysctlGetPublicTestSuite) TestGetNodeSysctlByKey() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeSysctlByKeyResponseObject) {
- r, ok := resp.(gen.GetNodeSysctlByKey500JSONResponse)
+ r, ok := resp.(gen.GetNodeSysctlByKey400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -475,7 +475,7 @@ func (s *SysctlGetPublicTestSuite) TestGetNodeSysctlByKeyValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/sysctl/sysctl_list_get.go b/internal/controller/api/node/sysctl/sysctl_list_get.go
index edf442f33..8031fda2a 100644
--- a/internal/controller/api/node/sysctl/sysctl_list_get.go
+++ b/internal/controller/api/node/sysctl/sysctl_list_get.go
@@ -38,7 +38,7 @@ func (s *Sysctl) GetNodeSysctl(
request gen.GetNodeSysctlRequestObject,
) (gen.GetNodeSysctlResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeSysctl500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeSysctl400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/sysctl/sysctl_list_get_public_test.go b/internal/controller/api/node/sysctl/sysctl_list_get_public_test.go
index 6faa6316f..001aeb1f0 100644
--- a/internal/controller/api/node/sysctl/sysctl_list_get_public_test.go
+++ b/internal/controller/api/node/sysctl/sysctl_list_get_public_test.go
@@ -151,7 +151,7 @@ func (s *SysctlListGetPublicTestSuite) TestGetNodeSysctl() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeSysctlResponseObject) {
- r, ok := resp.(gen.GetNodeSysctl500JSONResponse)
+ r, ok := resp.(gen.GetNodeSysctl400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -412,7 +412,7 @@ func (s *SysctlListGetPublicTestSuite) TestGetNodeSysctlValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/timezone/gen/api.yaml b/internal/controller/api/node/timezone/gen/api.yaml
index c4186ed9d..32c744916 100644
--- a/internal/controller/api/node/timezone/gen/api.yaml
+++ b/internal/controller/api/node/timezone/gen/api.yaml
@@ -49,6 +49,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/TimezoneCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
diff --git a/internal/controller/api/node/timezone/gen/timezone.gen.go b/internal/controller/api/node/timezone/gen/timezone.gen.go
index 85088f9cc..b2bb5a6ab 100644
--- a/internal/controller/api/node/timezone/gen/timezone.gen.go
+++ b/internal/controller/api/node/timezone/gen/timezone.gen.go
@@ -206,6 +206,15 @@ func (response GetNodeTimezone200JSONResponse) VisitGetNodeTimezoneResponse(w ht
return json.NewEncoder(w).Encode(response)
}
+type GetNodeTimezone400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeTimezone400JSONResponse) VisitGetNodeTimezoneResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeTimezone401JSONResponse externalRef0.ErrorResponse
func (response GetNodeTimezone401JSONResponse) VisitGetNodeTimezoneResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/timezone/timezone_get.go b/internal/controller/api/node/timezone/timezone_get.go
index 004eca874..7274f7470 100644
--- a/internal/controller/api/node/timezone/timezone_get.go
+++ b/internal/controller/api/node/timezone/timezone_get.go
@@ -38,7 +38,7 @@ func (s *Timezone) GetNodeTimezone(
request gen.GetNodeTimezoneRequestObject,
) (gen.GetNodeTimezoneResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeTimezone500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeTimezone400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/timezone/timezone_get_public_test.go b/internal/controller/api/node/timezone/timezone_get_public_test.go
index 9d0870639..1f54dc4e5 100644
--- a/internal/controller/api/node/timezone/timezone_get_public_test.go
+++ b/internal/controller/api/node/timezone/timezone_get_public_test.go
@@ -265,7 +265,7 @@ func (s *TimezoneGetPublicTestSuite) TestGetNodeTimezone() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeTimezoneResponseObject) {
- r, ok := resp.(gen.GetNodeTimezone500JSONResponse)
+ r, ok := resp.(gen.GetNodeTimezone400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -372,7 +372,7 @@ func (s *TimezoneGetPublicTestSuite) TestGetNodeTimezoneValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/user/gen/api.yaml b/internal/controller/api/node/user/gen/api.yaml
index e215349a8..368b100be 100644
--- a/internal/controller/api/node/user/gen/api.yaml
+++ b/internal/controller/api/node/user/gen/api.yaml
@@ -54,6 +54,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UserCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -147,6 +153,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UserCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -250,6 +262,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/UserMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -359,6 +377,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SSHKeyCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -453,6 +477,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SSHKeyMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -494,6 +524,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/GroupCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -587,6 +623,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/GroupCollectionResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -690,6 +732,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/GroupMutationResponse'
+ '400':
+ description: Bad request - validation error.
+ content:
+ application/json:
+ schema:
+ $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
@@ -805,15 +853,23 @@ components:
uid:
type: integer
description: Numeric user ID. If omitted, the system assigns one.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=0"
gid:
type: integer
description: Primary group ID. If omitted, a group matching the username is created.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=0"
home:
type: string
description: Home directory path.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=1"
shell:
type: string
description: Login shell path.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=1"
groups:
type: array
items:
@@ -822,9 +878,13 @@ components:
password:
type: string
description: Initial password (plaintext, hashed by the agent).
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=1"
system:
type: boolean
description: Create a system account.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty"
UserUpdateRequest:
type: object
@@ -832,9 +892,13 @@ components:
shell:
type: string
description: New login shell path.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=1"
home:
type: string
description: New home directory path.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=1"
groups:
type: array
items:
@@ -843,6 +907,8 @@ components:
lock:
type: boolean
description: Lock or unlock the account.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty"
UserPasswordRequest:
type: object
@@ -868,9 +934,13 @@ components:
gid:
type: integer
description: Numeric group ID. If omitted, the system assigns one.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty,min=0"
system:
type: boolean
description: Create a system group.
+ x-oapi-codegen-extra-tags:
+ validate: "omitempty"
GroupUpdateRequest:
type: object
diff --git a/internal/controller/api/node/user/gen/user.gen.go b/internal/controller/api/node/user/gen/user.gen.go
index ff1b9b731..f1c71bd35 100644
--- a/internal/controller/api/node/user/gen/user.gen.go
+++ b/internal/controller/api/node/user/gen/user.gen.go
@@ -75,13 +75,13 @@ type GroupCollectionResponse struct {
// GroupCreateRequest defines model for GroupCreateRequest.
type GroupCreateRequest struct {
// Gid Numeric group ID. If omitted, the system assigns one.
- Gid *int `json:"gid,omitempty"`
+ Gid *int `json:"gid,omitempty" validate:"omitempty,min=0"`
// Name Group name.
Name string `json:"name" validate:"required,min=1,max=32"`
// System Create a system group.
- System *bool `json:"system,omitempty"`
+ System *bool `json:"system,omitempty" validate:"omitempty"`
}
// GroupEntry Group listing result for one host.
@@ -226,28 +226,28 @@ type UserCollectionResponse struct {
// UserCreateRequest defines model for UserCreateRequest.
type UserCreateRequest struct {
// Gid Primary group ID. If omitted, a group matching the username is created.
- Gid *int `json:"gid,omitempty"`
+ Gid *int `json:"gid,omitempty" validate:"omitempty,min=0"`
// Groups Supplementary group names.
Groups *[]string `json:"groups,omitempty"`
// Home Home directory path.
- Home *string `json:"home,omitempty"`
+ Home *string `json:"home,omitempty" validate:"omitempty,min=1"`
// Name Username for the new account.
Name string `json:"name" validate:"required,min=1,max=32"`
// Password Initial password (plaintext, hashed by the agent).
- Password *string `json:"password,omitempty"`
+ Password *string `json:"password,omitempty" validate:"omitempty,min=1"`
// Shell Login shell path.
- Shell *string `json:"shell,omitempty"`
+ Shell *string `json:"shell,omitempty" validate:"omitempty,min=1"`
// System Create a system account.
- System *bool `json:"system,omitempty"`
+ System *bool `json:"system,omitempty" validate:"omitempty"`
// Uid Numeric user ID. If omitted, the system assigns one.
- Uid *int `json:"uid,omitempty"`
+ Uid *int `json:"uid,omitempty" validate:"omitempty,min=0"`
}
// UserEntry User listing result for one host.
@@ -332,13 +332,13 @@ type UserUpdateRequest struct {
Groups *[]string `json:"groups,omitempty"`
// Home New home directory path.
- Home *string `json:"home,omitempty"`
+ Home *string `json:"home,omitempty" validate:"omitempty,min=1"`
// Lock Lock or unlock the account.
- Lock *bool `json:"lock,omitempty"`
+ Lock *bool `json:"lock,omitempty" validate:"omitempty"`
// Shell New login shell path.
- Shell *string `json:"shell,omitempty"`
+ Shell *string `json:"shell,omitempty" validate:"omitempty,min=1"`
}
// GroupName defines model for GroupName.
@@ -824,6 +824,15 @@ func (response GetNodeGroup200JSONResponse) VisitGetNodeGroupResponse(w http.Res
return json.NewEncoder(w).Encode(response)
}
+type GetNodeGroup400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeGroup400JSONResponse) VisitGetNodeGroupResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeGroup401JSONResponse externalRef0.ErrorResponse
func (response GetNodeGroup401JSONResponse) VisitGetNodeGroupResponse(w http.ResponseWriter) error {
@@ -923,6 +932,15 @@ func (response DeleteNodeGroup200JSONResponse) VisitDeleteNodeGroupResponse(w ht
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeGroup400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeGroup400JSONResponse) VisitDeleteNodeGroupResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeGroup401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeGroup401JSONResponse) VisitDeleteNodeGroupResponse(w http.ResponseWriter) error {
@@ -977,6 +995,15 @@ func (response GetNodeGroupByName200JSONResponse) VisitGetNodeGroupByNameRespons
return json.NewEncoder(w).Encode(response)
}
+type GetNodeGroupByName400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeGroupByName400JSONResponse) VisitGetNodeGroupByNameResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeGroupByName401JSONResponse externalRef0.ErrorResponse
func (response GetNodeGroupByName401JSONResponse) VisitGetNodeGroupByNameResponse(w http.ResponseWriter) error {
@@ -1094,6 +1121,15 @@ func (response GetNodeUser200JSONResponse) VisitGetNodeUserResponse(w http.Respo
return json.NewEncoder(w).Encode(response)
}
+type GetNodeUser400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeUser400JSONResponse) VisitGetNodeUserResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeUser401JSONResponse externalRef0.ErrorResponse
func (response GetNodeUser401JSONResponse) VisitGetNodeUserResponse(w http.ResponseWriter) error {
@@ -1193,6 +1229,15 @@ func (response DeleteNodeUser200JSONResponse) VisitDeleteNodeUserResponse(w http
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeUser400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeUser400JSONResponse) VisitDeleteNodeUserResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeUser401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeUser401JSONResponse) VisitDeleteNodeUserResponse(w http.ResponseWriter) error {
@@ -1247,6 +1292,15 @@ func (response GetNodeUserByName200JSONResponse) VisitGetNodeUserByNameResponse(
return json.NewEncoder(w).Encode(response)
}
+type GetNodeUserByName400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeUserByName400JSONResponse) VisitGetNodeUserByNameResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeUserByName401JSONResponse externalRef0.ErrorResponse
func (response GetNodeUserByName401JSONResponse) VisitGetNodeUserByNameResponse(w http.ResponseWriter) error {
@@ -1429,6 +1483,15 @@ func (response GetNodeUserSSHKey200JSONResponse) VisitGetNodeUserSSHKeyResponse(
return json.NewEncoder(w).Encode(response)
}
+type GetNodeUserSSHKey400JSONResponse externalRef0.ErrorResponse
+
+func (response GetNodeUserSSHKey400JSONResponse) VisitGetNodeUserSSHKeyResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type GetNodeUserSSHKey401JSONResponse externalRef0.ErrorResponse
func (response GetNodeUserSSHKey401JSONResponse) VisitGetNodeUserSSHKeyResponse(w http.ResponseWriter) error {
@@ -1530,6 +1593,15 @@ func (response DeleteNodeUserSSHKey200JSONResponse) VisitDeleteNodeUserSSHKeyRes
return json.NewEncoder(w).Encode(response)
}
+type DeleteNodeUserSSHKey400JSONResponse externalRef0.ErrorResponse
+
+func (response DeleteNodeUserSSHKey400JSONResponse) VisitDeleteNodeUserSSHKeyResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(400)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
type DeleteNodeUserSSHKey401JSONResponse externalRef0.ErrorResponse
func (response DeleteNodeUserSSHKey401JSONResponse) VisitDeleteNodeUserSSHKeyResponse(w http.ResponseWriter) error {
diff --git a/internal/controller/api/node/user/group_create_public_test.go b/internal/controller/api/node/user/group_create_public_test.go
index d03336abc..5b25e8d5c 100644
--- a/internal/controller/api/node/user/group_create_public_test.go
+++ b/internal/controller/api/node/user/group_create_public_test.go
@@ -290,6 +290,65 @@ func (s *GroupCreatePublicTestSuite) TestPostNodeGroup() {
}
}
+func (s *GroupCreatePublicTestSuite) TestPostNodeGroupValidationHTTP() {
+ tests := []struct {
+ name string
+ path string
+ body string
+ wantCode int
+ }{
+ {
+ name: "when valid request",
+ path: "/node/server1/group",
+ body: `{"name":"devops"}`,
+ wantCode: http.StatusOK,
+ },
+ {
+ name: "when missing name",
+ path: "/node/server1/group",
+ body: `{}`,
+ wantCode: http.StatusBadRequest,
+ },
+ {
+ name: "when invalid hostname",
+ path: "/node/nonexistent/group",
+ body: `{"name":"devops"}`,
+ wantCode: http.StatusBadRequest,
+ },
+ }
+
+ for _, tc := range tests {
+ s.Run(tc.name, func() {
+ jobMock := jobmocks.NewMockJobClient(s.mockCtrl)
+ if tc.wantCode == http.StatusOK {
+ jobMock.EXPECT().
+ Modify(gomock.Any(), "server1", "group", job.OperationGroupCreate, gomock.Any()).
+ Return("550e8400-e29b-41d4-a716-446655440000", &job.Response{
+ Hostname: "agent1",
+ Changed: boolPtr(true),
+ Data: json.RawMessage(`{"name":"devops","changed":true}`),
+ }, nil)
+ }
+
+ userHandler := apiuser.New(s.logger, jobMock)
+ strictHandler := gen.NewStrictHandler(userHandler, nil)
+ a := api.New(s.appConfig, s.logger)
+ gen.RegisterHandlers(a.Echo, strictHandler)
+
+ req := httptest.NewRequest(
+ http.MethodPost,
+ tc.path,
+ strings.NewReader(tc.body),
+ )
+ req.Header.Set("Content-Type", "application/json")
+ rec := httptest.NewRecorder()
+ a.Echo.ServeHTTP(rec, req)
+
+ s.Equal(tc.wantCode, rec.Code)
+ })
+ }
+}
+
const rbacGroupCreateTestSigningKey = "test-signing-key-for-rbac-group-create"
func (s *GroupCreatePublicTestSuite) TestPostNodeGroupRBACHTTP() {
diff --git a/internal/controller/api/node/user/group_delete.go b/internal/controller/api/node/user/group_delete.go
index c28f67e5c..245f3c470 100644
--- a/internal/controller/api/node/user/group_delete.go
+++ b/internal/controller/api/node/user/group_delete.go
@@ -39,7 +39,7 @@ func (u *User) DeleteNodeGroup(
request gen.DeleteNodeGroupRequestObject,
) (gen.DeleteNodeGroupResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeGroup500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeGroup400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/group_delete_public_test.go b/internal/controller/api/node/user/group_delete_public_test.go
index b78b8ae1f..4bb59f812 100644
--- a/internal/controller/api/node/user/group_delete_public_test.go
+++ b/internal/controller/api/node/user/group_delete_public_test.go
@@ -114,7 +114,7 @@ func (s *GroupDeletePublicTestSuite) TestDeleteNodeGroup() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeGroupResponseObject) {
- _, ok := resp.(gen.DeleteNodeGroup500JSONResponse)
+ _, ok := resp.(gen.DeleteNodeGroup400JSONResponse)
s.True(ok)
},
},
diff --git a/internal/controller/api/node/user/group_get.go b/internal/controller/api/node/user/group_get.go
index 30682d132..3a67b32cd 100644
--- a/internal/controller/api/node/user/group_get.go
+++ b/internal/controller/api/node/user/group_get.go
@@ -39,7 +39,7 @@ func (u *User) GetNodeGroupByName(
request gen.GetNodeGroupByNameRequestObject,
) (gen.GetNodeGroupByNameResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeGroupByName500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeGroupByName400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/group_get_public_test.go b/internal/controller/api/node/user/group_get_public_test.go
index 68123d1ad..77d7671af 100644
--- a/internal/controller/api/node/user/group_get_public_test.go
+++ b/internal/controller/api/node/user/group_get_public_test.go
@@ -120,7 +120,7 @@ func (s *GroupGetPublicTestSuite) TestGetNodeGroupByName() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeGroupByNameResponseObject) {
- _, ok := resp.(gen.GetNodeGroupByName500JSONResponse)
+ _, ok := resp.(gen.GetNodeGroupByName400JSONResponse)
s.True(ok)
},
},
diff --git a/internal/controller/api/node/user/group_list_get.go b/internal/controller/api/node/user/group_list_get.go
index b428d8fdd..f12d1452b 100644
--- a/internal/controller/api/node/user/group_list_get.go
+++ b/internal/controller/api/node/user/group_list_get.go
@@ -38,7 +38,7 @@ func (u *User) GetNodeGroup(
request gen.GetNodeGroupRequestObject,
) (gen.GetNodeGroupResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeGroup500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeGroup400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/group_list_get_public_test.go b/internal/controller/api/node/user/group_list_get_public_test.go
index fd33a7a44..f759e310b 100644
--- a/internal/controller/api/node/user/group_list_get_public_test.go
+++ b/internal/controller/api/node/user/group_list_get_public_test.go
@@ -114,7 +114,7 @@ func (s *GroupListGetPublicTestSuite) TestGetNodeGroup() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeGroupResponseObject) {
- _, ok := resp.(gen.GetNodeGroup500JSONResponse)
+ _, ok := resp.(gen.GetNodeGroup400JSONResponse)
s.True(ok)
},
},
diff --git a/internal/controller/api/node/user/group_update.go b/internal/controller/api/node/user/group_update.go
index e3fe2ed95..f552f33bd 100644
--- a/internal/controller/api/node/user/group_update.go
+++ b/internal/controller/api/node/user/group_update.go
@@ -31,6 +31,7 @@ import (
"github.com/retr0h/osapi/internal/controller/api/node/user/gen"
"github.com/retr0h/osapi/internal/job"
userProv "github.com/retr0h/osapi/internal/provider/node/user"
+ "github.com/retr0h/osapi/internal/validation"
)
// PutNodeGroup updates a group on a target node.
@@ -42,6 +43,10 @@ func (u *User) PutNodeGroup(
return gen.PutNodeGroup400JSONResponse{Error: &errMsg}, nil
}
+ if errMsg, ok := validation.AtLeastOneField(request.Body); !ok {
+ return gen.PutNodeGroup400JSONResponse{Error: &errMsg}, nil
+ }
+
opts := userProv.UpdateGroupOpts{}
if request.Body.Members != nil {
opts.Members = *request.Body.Members
diff --git a/internal/controller/api/node/user/group_update_public_test.go b/internal/controller/api/node/user/group_update_public_test.go
index 088febcdd..154c63f5a 100644
--- a/internal/controller/api/node/user/group_update_public_test.go
+++ b/internal/controller/api/node/user/group_update_public_test.go
@@ -109,6 +109,21 @@ func (s *GroupUpdatePublicTestSuite) TestPutNodeGroup() {
s.True(*r.Results[0].Changed)
},
},
+ {
+ name: "when empty body returns 400",
+ request: gen.PutNodeGroupRequestObject{
+ Hostname: "server1",
+ Name: "devops",
+ Body: &gen.GroupUpdateRequest{},
+ },
+ setupMock: func() {},
+ validateFunc: func(resp gen.PutNodeGroupResponseObject) {
+ r, ok := resp.(gen.PutNodeGroup400JSONResponse)
+ s.True(ok)
+ s.Require().NotNil(r.Error)
+ s.Contains(*r.Error, "at least one field")
+ },
+ },
{
name: "validation error empty hostname",
request: gen.PutNodeGroupRequestObject{
@@ -277,6 +292,65 @@ func (s *GroupUpdatePublicTestSuite) TestPutNodeGroup() {
}
}
+func (s *GroupUpdatePublicTestSuite) TestPutNodeGroupValidationHTTP() {
+ tests := []struct {
+ name string
+ path string
+ body string
+ wantCode int
+ }{
+ {
+ name: "when valid request",
+ path: "/node/server1/group/devops",
+ body: `{"members":["user1"]}`,
+ wantCode: http.StatusOK,
+ },
+ {
+ name: "when empty body returns 400",
+ path: "/node/server1/group/devops",
+ body: `{}`,
+ wantCode: http.StatusBadRequest,
+ },
+ {
+ name: "when invalid hostname",
+ path: "/node/nonexistent/group/devops",
+ body: `{"members":["user1"]}`,
+ wantCode: http.StatusBadRequest,
+ },
+ }
+
+ for _, tc := range tests {
+ s.Run(tc.name, func() {
+ jobMock := jobmocks.NewMockJobClient(s.mockCtrl)
+ if tc.wantCode == http.StatusOK {
+ jobMock.EXPECT().
+ Modify(gomock.Any(), "server1", "group", job.OperationGroupUpdate, gomock.Any()).
+ Return("550e8400-e29b-41d4-a716-446655440000", &job.Response{
+ Hostname: "agent1",
+ Changed: boolPtr(true),
+ Data: json.RawMessage(`{"name":"devops","changed":true}`),
+ }, nil)
+ }
+
+ userHandler := apiuser.New(s.logger, jobMock)
+ strictHandler := gen.NewStrictHandler(userHandler, nil)
+ a := api.New(s.appConfig, s.logger)
+ gen.RegisterHandlers(a.Echo, strictHandler)
+
+ req := httptest.NewRequest(
+ http.MethodPut,
+ tc.path,
+ strings.NewReader(tc.body),
+ )
+ req.Header.Set("Content-Type", "application/json")
+ rec := httptest.NewRecorder()
+ a.Echo.ServeHTTP(rec, req)
+
+ s.Equal(tc.wantCode, rec.Code)
+ })
+ }
+}
+
const rbacGroupUpdateTestSigningKey = "test-signing-key-for-rbac-group-update"
func (s *GroupUpdatePublicTestSuite) TestPutNodeGroupRBACHTTP() {
diff --git a/internal/controller/api/node/user/ssh_key_delete.go b/internal/controller/api/node/user/ssh_key_delete.go
index ac8dcc5b5..17ed23d54 100644
--- a/internal/controller/api/node/user/ssh_key_delete.go
+++ b/internal/controller/api/node/user/ssh_key_delete.go
@@ -37,7 +37,7 @@ func (u *User) DeleteNodeUserSSHKey(
request gen.DeleteNodeUserSSHKeyRequestObject,
) (gen.DeleteNodeUserSSHKeyResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeUserSSHKey500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeUserSSHKey400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/ssh_key_delete_public_test.go b/internal/controller/api/node/user/ssh_key_delete_public_test.go
index 6f4ff71a6..e881df368 100644
--- a/internal/controller/api/node/user/ssh_key_delete_public_test.go
+++ b/internal/controller/api/node/user/ssh_key_delete_public_test.go
@@ -176,7 +176,7 @@ func (s *SSHKeyDeletePublicTestSuite) TestDeleteNodeUserSSHKey() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeUserSSHKeyResponseObject) {
- r, ok := resp.(gen.DeleteNodeUserSSHKey500JSONResponse)
+ r, ok := resp.(gen.DeleteNodeUserSSHKey400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -338,7 +338,7 @@ func (s *SSHKeyDeletePublicTestSuite) TestDeleteNodeUserSSHKeyValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/user/ssh_key_list_get.go b/internal/controller/api/node/user/ssh_key_list_get.go
index aef326c13..8fdd5cac9 100644
--- a/internal/controller/api/node/user/ssh_key_list_get.go
+++ b/internal/controller/api/node/user/ssh_key_list_get.go
@@ -38,7 +38,7 @@ func (u *User) GetNodeUserSSHKey(
request gen.GetNodeUserSSHKeyRequestObject,
) (gen.GetNodeUserSSHKeyResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeUserSSHKey500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeUserSSHKey400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/ssh_key_list_get_public_test.go b/internal/controller/api/node/user/ssh_key_list_get_public_test.go
index 874e02885..787126f5b 100644
--- a/internal/controller/api/node/user/ssh_key_list_get_public_test.go
+++ b/internal/controller/api/node/user/ssh_key_list_get_public_test.go
@@ -236,7 +236,7 @@ func (s *SSHKeyListGetPublicTestSuite) TestGetNodeUserSSHKey() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeUserSSHKeyResponseObject) {
- r, ok := resp.(gen.GetNodeUserSSHKey500JSONResponse)
+ r, ok := resp.(gen.GetNodeUserSSHKey400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -394,7 +394,7 @@ func (s *SSHKeyListGetPublicTestSuite) TestGetNodeUserSSHKeyValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/user/user_delete.go b/internal/controller/api/node/user/user_delete.go
index eb0c2373f..eb6d95315 100644
--- a/internal/controller/api/node/user/user_delete.go
+++ b/internal/controller/api/node/user/user_delete.go
@@ -39,7 +39,7 @@ func (u *User) DeleteNodeUser(
request gen.DeleteNodeUserRequestObject,
) (gen.DeleteNodeUserResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.DeleteNodeUser500JSONResponse{Error: &errMsg}, nil
+ return gen.DeleteNodeUser400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/user_delete_public_test.go b/internal/controller/api/node/user/user_delete_public_test.go
index 817ad0f1a..49ccb83c1 100644
--- a/internal/controller/api/node/user/user_delete_public_test.go
+++ b/internal/controller/api/node/user/user_delete_public_test.go
@@ -114,7 +114,7 @@ func (s *UserDeletePublicTestSuite) TestDeleteNodeUser() {
},
setupMock: func() {},
validateFunc: func(resp gen.DeleteNodeUserResponseObject) {
- _, ok := resp.(gen.DeleteNodeUser500JSONResponse)
+ _, ok := resp.(gen.DeleteNodeUser400JSONResponse)
s.True(ok)
},
},
diff --git a/internal/controller/api/node/user/user_get.go b/internal/controller/api/node/user/user_get.go
index 4e38adfb0..9dcb309ce 100644
--- a/internal/controller/api/node/user/user_get.go
+++ b/internal/controller/api/node/user/user_get.go
@@ -39,7 +39,7 @@ func (u *User) GetNodeUserByName(
request gen.GetNodeUserByNameRequestObject,
) (gen.GetNodeUserByNameResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeUserByName500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeUserByName400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/user_get_public_test.go b/internal/controller/api/node/user/user_get_public_test.go
index 854ad4744..2f93aeaef 100644
--- a/internal/controller/api/node/user/user_get_public_test.go
+++ b/internal/controller/api/node/user/user_get_public_test.go
@@ -120,7 +120,7 @@ func (s *UserGetPublicTestSuite) TestGetNodeUserByName() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeUserByNameResponseObject) {
- _, ok := resp.(gen.GetNodeUserByName500JSONResponse)
+ _, ok := resp.(gen.GetNodeUserByName400JSONResponse)
s.True(ok)
},
},
diff --git a/internal/controller/api/node/user/user_list_get.go b/internal/controller/api/node/user/user_list_get.go
index 57152afdf..0dbd5c8d3 100644
--- a/internal/controller/api/node/user/user_list_get.go
+++ b/internal/controller/api/node/user/user_list_get.go
@@ -38,7 +38,7 @@ func (u *User) GetNodeUser(
request gen.GetNodeUserRequestObject,
) (gen.GetNodeUserResponseObject, error) {
if errMsg, ok := validateHostname(request.Hostname); !ok {
- return gen.GetNodeUser500JSONResponse{Error: &errMsg}, nil
+ return gen.GetNodeUser400JSONResponse{Error: &errMsg}, nil
}
hostname := request.Hostname
diff --git a/internal/controller/api/node/user/user_list_get_public_test.go b/internal/controller/api/node/user/user_list_get_public_test.go
index 477a599dd..5cf52cb75 100644
--- a/internal/controller/api/node/user/user_list_get_public_test.go
+++ b/internal/controller/api/node/user/user_list_get_public_test.go
@@ -166,7 +166,7 @@ func (s *UserListGetPublicTestSuite) TestGetNodeUser() {
},
setupMock: func() {},
validateFunc: func(resp gen.GetNodeUserResponseObject) {
- r, ok := resp.(gen.GetNodeUser500JSONResponse)
+ r, ok := resp.(gen.GetNodeUser400JSONResponse)
s.True(ok)
s.Require().NotNil(r.Error)
s.Contains(*r.Error, "required")
@@ -338,7 +338,7 @@ func (s *UserListGetPublicTestSuite) TestGetNodeUserValidationHTTP() {
setupJobMock: func() *jobmocks.MockJobClient {
return jobmocks.NewMockJobClient(s.mockCtrl)
},
- wantCode: http.StatusInternalServerError,
+ wantCode: http.StatusBadRequest,
wantContains: []string{`"error"`, "valid_target"},
},
}
diff --git a/internal/controller/api/node/user/user_password_public_test.go b/internal/controller/api/node/user/user_password_public_test.go
index 1e3d5a69a..6a606a1ea 100644
--- a/internal/controller/api/node/user/user_password_public_test.go
+++ b/internal/controller/api/node/user/user_password_public_test.go
@@ -289,6 +289,65 @@ func (s *UserPasswordPublicTestSuite) TestPostNodeUserPassword() {
}
}
+func (s *UserPasswordPublicTestSuite) TestPostNodeUserPasswordValidationHTTP() {
+ tests := []struct {
+ name string
+ path string
+ body string
+ wantCode int
+ }{
+ {
+ name: "when valid request",
+ path: "/node/server1/user/testuser/password",
+ body: `{"password":"newpass123"}`,
+ wantCode: http.StatusOK,
+ },
+ {
+ name: "when missing password",
+ path: "/node/server1/user/testuser/password",
+ body: `{}`,
+ wantCode: http.StatusBadRequest,
+ },
+ {
+ name: "when invalid hostname",
+ path: "/node/nonexistent/user/testuser/password",
+ body: `{"password":"newpass123"}`,
+ wantCode: http.StatusBadRequest,
+ },
+ }
+
+ for _, tc := range tests {
+ s.Run(tc.name, func() {
+ jobMock := jobmocks.NewMockJobClient(s.mockCtrl)
+ if tc.wantCode == http.StatusOK {
+ jobMock.EXPECT().
+ Modify(gomock.Any(), "server1", "user", job.OperationUserChangePassword, gomock.Any()).
+ Return("550e8400-e29b-41d4-a716-446655440000", &job.Response{
+ Hostname: "agent1",
+ Changed: boolPtr(true),
+ Data: json.RawMessage(`{"name":"testuser","changed":true}`),
+ }, nil)
+ }
+
+ userHandler := apiuser.New(s.logger, jobMock)
+ strictHandler := gen.NewStrictHandler(userHandler, nil)
+ a := api.New(s.appConfig, s.logger)
+ gen.RegisterHandlers(a.Echo, strictHandler)
+
+ req := httptest.NewRequest(
+ http.MethodPost,
+ tc.path,
+ strings.NewReader(tc.body),
+ )
+ req.Header.Set("Content-Type", "application/json")
+ rec := httptest.NewRecorder()
+ a.Echo.ServeHTTP(rec, req)
+
+ s.Equal(tc.wantCode, rec.Code)
+ })
+ }
+}
+
const rbacUserPasswordTestSigningKey = "test-signing-key-for-rbac-user-password"
func (s *UserPasswordPublicTestSuite) TestPostNodeUserPasswordRBACHTTP() {
diff --git a/internal/controller/api/node/user/user_update.go b/internal/controller/api/node/user/user_update.go
index e0d70ba71..817213870 100644
--- a/internal/controller/api/node/user/user_update.go
+++ b/internal/controller/api/node/user/user_update.go
@@ -31,6 +31,7 @@ import (
"github.com/retr0h/osapi/internal/controller/api/node/user/gen"
"github.com/retr0h/osapi/internal/job"
userProv "github.com/retr0h/osapi/internal/provider/node/user"
+ "github.com/retr0h/osapi/internal/validation"
)
// PutNodeUser updates a user on a target node.
@@ -42,6 +43,14 @@ func (u *User) PutNodeUser(
return gen.PutNodeUser400JSONResponse{Error: &errMsg}, nil
}
+ if errMsg, ok := validation.Struct(request.Body); !ok {
+ return gen.PutNodeUser400JSONResponse{Error: &errMsg}, nil
+ }
+
+ if errMsg, ok := validation.AtLeastOneField(request.Body); !ok {
+ return gen.PutNodeUser400JSONResponse{Error: &errMsg}, nil
+ }
+
opts := userProv.UpdateUserOpts{}
if request.Body.Shell != nil {
opts.Shell = *request.Body.Shell
diff --git a/internal/controller/api/node/user/user_update_public_test.go b/internal/controller/api/node/user/user_update_public_test.go
index 71740da0c..c1a70fb94 100644
--- a/internal/controller/api/node/user/user_update_public_test.go
+++ b/internal/controller/api/node/user/user_update_public_test.go
@@ -110,6 +110,21 @@ func (s *UserUpdatePublicTestSuite) TestPutNodeUser() {
s.True(*r.Results[0].Changed)
},
},
+ {
+ name: "when empty body returns 400",
+ request: gen.PutNodeUserRequestObject{
+ Hostname: "server1",
+ Name: "testuser",
+ Body: &gen.UserUpdateRequest{},
+ },
+ setupMock: func() {},
+ validateFunc: func(resp gen.PutNodeUserResponseObject) {
+ r, ok := resp.(gen.PutNodeUser400JSONResponse)
+ s.True(ok)
+ s.Require().NotNil(r.Error)
+ s.Contains(*r.Error, "at least one field")
+ },
+ },
{
name: "validation error empty hostname",
request: gen.PutNodeUserRequestObject{
@@ -307,6 +322,65 @@ func (s *UserUpdatePublicTestSuite) TestPutNodeUser() {
}
}
+func (s *UserUpdatePublicTestSuite) TestPutNodeUserValidationHTTP() {
+ tests := []struct {
+ name string
+ path string
+ body string
+ wantCode int
+ }{
+ {
+ name: "when valid request",
+ path: "/node/server1/user/testuser",
+ body: `{"shell":"/bin/zsh"}`,
+ wantCode: http.StatusOK,
+ },
+ {
+ name: "when empty body returns 400",
+ path: "/node/server1/user/testuser",
+ body: `{}`,
+ wantCode: http.StatusBadRequest,
+ },
+ {
+ name: "when invalid hostname",
+ path: "/node/nonexistent/user/testuser",
+ body: `{"shell":"/bin/zsh"}`,
+ wantCode: http.StatusBadRequest,
+ },
+ }
+
+ for _, tc := range tests {
+ s.Run(tc.name, func() {
+ jobMock := jobmocks.NewMockJobClient(s.mockCtrl)
+ if tc.wantCode == http.StatusOK {
+ jobMock.EXPECT().
+ Modify(gomock.Any(), "server1", "user", job.OperationUserUpdate, gomock.Any()).
+ Return("550e8400-e29b-41d4-a716-446655440000", &job.Response{
+ Hostname: "agent1",
+ Changed: boolPtr(true),
+ Data: json.RawMessage(`{"name":"testuser","changed":true}`),
+ }, nil)
+ }
+
+ userHandler := apiuser.New(s.logger, jobMock)
+ strictHandler := gen.NewStrictHandler(userHandler, nil)
+ a := api.New(s.appConfig, s.logger)
+ gen.RegisterHandlers(a.Echo, strictHandler)
+
+ req := httptest.NewRequest(
+ http.MethodPut,
+ tc.path,
+ strings.NewReader(tc.body),
+ )
+ req.Header.Set("Content-Type", "application/json")
+ rec := httptest.NewRecorder()
+ a.Echo.ServeHTTP(rec, req)
+
+ s.Equal(tc.wantCode, rec.Code)
+ })
+ }
+}
+
const rbacUserUpdateTestSigningKey = "test-signing-key-for-rbac-user-update"
func (s *UserUpdatePublicTestSuite) TestPutNodeUserRBACHTTP() {
diff --git a/internal/validation/validation.go b/internal/validation/validation.go
index 907934ea6..fe8674fa8 100644
--- a/internal/validation/validation.go
+++ b/internal/validation/validation.go
@@ -23,6 +23,7 @@ package validation
import (
"fmt"
+ "reflect"
"strings"
"github.com/go-playground/validator/v10"
@@ -122,6 +123,44 @@ func formatErrors(
return strings.Join(msgs, "; ")
}
+// AtLeastOneField checks that at least one exported pointer, slice, or map
+// field in the struct is non-nil, or that at least one non-pointer field is
+// non-zero. Returns an error message and false if all fields are nil/zero
+// (i.e., the update body is empty).
+func AtLeastOneField(
+ v any,
+) (string, bool) {
+ rv := reflect.ValueOf(v)
+ if rv.Kind() == reflect.Ptr {
+ rv = rv.Elem()
+ }
+
+ if rv.Kind() != reflect.Struct {
+ return "expected struct", false
+ }
+
+ rt := rv.Type()
+ for i := range rt.NumField() {
+ field := rv.Field(i)
+ if !rt.Field(i).IsExported() {
+ continue
+ }
+
+ switch field.Kind() {
+ case reflect.Ptr, reflect.Slice, reflect.Map:
+ if !field.IsNil() {
+ return "", true
+ }
+ default:
+ if !field.IsZero() {
+ return "", true
+ }
+ }
+ }
+
+ return "at least one field must be provided", false
+}
+
// Instance returns the shared validator for registering custom validators.
func Instance() *validator.Validate {
return instance
diff --git a/internal/validation/validation_public_test.go b/internal/validation/validation_public_test.go
index 7d9418193..674722216 100644
--- a/internal/validation/validation_public_test.go
+++ b/internal/validation/validation_public_test.go
@@ -386,6 +386,126 @@ func (s *ValidationPublicTestSuite) TestCronSchedule() {
}
}
+func (s *ValidationPublicTestSuite) TestAtLeastOneField() {
+ type allPointers struct {
+ Shell *string
+ Home *string
+ Groups *[]string
+ }
+
+ type withNonPointer struct {
+ Name string
+ Shell *string
+ Enabled bool
+ }
+
+ type withSlice struct {
+ Items []string
+ Shell *string
+ }
+
+ type withMap struct {
+ Labels map[string]string
+ Shell *string
+ }
+
+ type unexportedOnly struct {
+ hidden *string //nolint:unused
+ }
+
+ str := "bash"
+ groups := []string{"admin"}
+
+ tests := []struct {
+ name string
+ input any
+ wantOK bool
+ wantErrMsg string
+ }{
+ {
+ name: "when one pointer field is non-nil",
+ input: allPointers{Shell: &str},
+ wantOK: true,
+ },
+ {
+ name: "when slice pointer field is non-nil",
+ input: allPointers{Groups: &groups},
+ wantOK: true,
+ },
+ {
+ name: "when all pointer fields are nil",
+ input: allPointers{},
+ wantOK: false,
+ wantErrMsg: "at least one field must be provided",
+ },
+ {
+ name: "when non-pointer field is non-zero",
+ input: withNonPointer{Name: "test"},
+ wantOK: true,
+ },
+ {
+ name: "when bool field is true",
+ input: withNonPointer{Enabled: true},
+ wantOK: true,
+ },
+ {
+ name: "when all fields are zero",
+ input: withNonPointer{},
+ wantOK: false,
+ wantErrMsg: "at least one field must be provided",
+ },
+ {
+ name: "when slice field is non-nil",
+ input: withSlice{Items: []string{"a"}},
+ wantOK: true,
+ },
+ {
+ name: "when slice field is nil",
+ input: withSlice{},
+ wantOK: false,
+ wantErrMsg: "at least one field must be provided",
+ },
+ {
+ name: "when map field is non-nil",
+ input: withMap{Labels: map[string]string{"env": "dev"}},
+ wantOK: true,
+ },
+ {
+ name: "when map field is nil",
+ input: withMap{},
+ wantOK: false,
+ wantErrMsg: "at least one field must be provided",
+ },
+ {
+ name: "when only unexported fields",
+ input: unexportedOnly{},
+ wantOK: false,
+ wantErrMsg: "at least one field must be provided",
+ },
+ {
+ name: "when pointer to struct is passed",
+ input: &allPointers{Shell: &str},
+ wantOK: true,
+ },
+ {
+ name: "when non-struct is passed",
+ input: "not a struct",
+ wantOK: false,
+ wantErrMsg: "expected struct",
+ },
+ }
+
+ for _, tt := range tests {
+ s.Run(tt.name, func() {
+ errMsg, ok := validation.AtLeastOneField(tt.input)
+ s.Equal(tt.wantOK, ok)
+ if !ok {
+ s.Equal(tt.wantErrMsg, errMsg)
+ }
+ })
+ }
+}
+
func (s *ValidationPublicTestSuite) TestInstance() {
tests := []struct {
name string
diff --git a/pkg/sdk/client/gen/client.gen.go b/pkg/sdk/client/gen/client.gen.go
index 808c3a252..9f23af5d5 100644
--- a/pkg/sdk/client/gen/client.gen.go
+++ b/pkg/sdk/client/gen/client.gen.go
@@ -1102,7 +1102,7 @@ type DockerActionResultItemStatus string
// DockerCreateRequest defines model for DockerCreateRequest.
type DockerCreateRequest struct {
// AutoStart Whether to start the container immediately after creation. Defaults to true.
- AutoStart *bool `json:"auto_start,omitempty"`
+ AutoStart *bool `json:"auto_start,omitempty" validate:"omitempty"`
// Command Command to run in the container.
Command *[]string `json:"command,omitempty"`
@@ -1114,7 +1114,7 @@ type DockerCreateRequest struct {
Image string `json:"image" validate:"required,min=1"`
// Name Optional name for the container.
- Name *string `json:"name,omitempty"`
+ Name *string `json:"name,omitempty" validate:"omitempty,min=1"`
// Ports Port mappings in host_port:container_port format.
Ports *[]string `json:"ports,omitempty"`
@@ -1194,7 +1194,7 @@ type DockerExecRequest struct {
Env *[]string `json:"env,omitempty"`
// WorkingDir Working directory inside the container.
- WorkingDir *string `json:"working_dir,omitempty"`
+ WorkingDir *string `json:"working_dir,omitempty" validate:"omitempty"`
}
// DockerExecResultItem Result of a command execution inside a container.
@@ -1582,13 +1582,13 @@ type GroupCollectionResponse struct {
// GroupCreateRequest defines model for GroupCreateRequest.
type GroupCreateRequest struct {
// Gid Numeric group ID. If omitted, the system assigns one.
- Gid *int `json:"gid,omitempty"`
+ Gid *int `json:"gid,omitempty" validate:"omitempty,min=0"`
// Name Group name.
Name string `json:"name" validate:"required,min=1,max=32"`
// System Create a system group.
- System *bool `json:"system,omitempty"`
+ System *bool `json:"system,omitempty" validate:"omitempty"`
}
// GroupEntry Group listing result for one host.
@@ -2988,28 +2988,28 @@ type UserCollectionResponse struct {
// UserCreateRequest defines model for UserCreateRequest.
type UserCreateRequest struct {
// Gid Primary group ID. If omitted, a group matching the username is created.
- Gid *int `json:"gid,omitempty"`
+ Gid *int `json:"gid,omitempty" validate:"omitempty,min=0"`
// Groups Supplementary group names.
Groups *[]string `json:"groups,omitempty"`
// Home Home directory path.
- Home *string `json:"home,omitempty"`
+ Home *string `json:"home,omitempty" validate:"omitempty,min=1"`
// Name Username for the new account.
Name string `json:"name" validate:"required,min=1,max=32"`
// Password Initial password (plaintext, hashed by the agent).
- Password *string `json:"password,omitempty"`
+ Password *string `json:"password,omitempty" validate:"omitempty,min=1"`
// Shell Login shell path.
- Shell *string `json:"shell,omitempty"`
+ Shell *string `json:"shell,omitempty" validate:"omitempty,min=1"`
// System Create a system account.
- System *bool `json:"system,omitempty"`
+ System *bool `json:"system,omitempty" validate:"omitempty"`
// Uid Numeric user ID. If omitted, the system assigns one.
- Uid *int `json:"uid,omitempty"`
+ Uid *int `json:"uid,omitempty" validate:"omitempty,min=0"`
}
// UserEntry User listing result for one host.
@@ -3094,13 +3094,13 @@ type UserUpdateRequest struct {
Groups *[]string `json:"groups,omitempty"`
// Home New home directory path.
- Home *string `json:"home,omitempty"`
+ Home *string `json:"home,omitempty" validate:"omitempty,min=1"`
// Lock Lock or unlock the account.
- Lock *bool `json:"lock,omitempty"`
+ Lock *bool `json:"lock,omitempty" validate:"omitempty"`
// Shell New login shell path.
- Shell *string `json:"shell,omitempty"`
+ Shell *string `json:"shell,omitempty" validate:"omitempty,min=1"`
}
// CertName defines model for CertName.
@@ -3154,13 +3154,13 @@ type GetAuditLogsParams struct {
// PostFileMultipartBody defines parameters for PostFile.
type PostFileMultipartBody struct {
// ContentType How the file should be treated during deploy. "raw" writes bytes as-is; "template" renders with Go text/template and agent facts.
- ContentType *PostFileMultipartBodyContentType `json:"content_type,omitempty"`
+ ContentType *PostFileMultipartBodyContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"`
// File The file content.
File openapi_types.File `json:"file"`
// Name The name of the file in the Object Store.
- Name string `json:"name"`
+ Name string `json:"name" validate:"required,min=1,max=255"`
}
// PostFileParams defines parameters for PostFile.
@@ -3216,10 +3216,10 @@ type GetNodeLogParams struct {
Lines *int `form:"lines,omitempty" json:"lines,omitempty" validate:"omitempty,min=1,max=10000"`
// Since Return log entries since this time. Accepts systemd time specifications (e.g., "1h", "2026-01-01 00:00:00").
- Since *string `form:"since,omitempty" json:"since,omitempty"`
+ Since *string `form:"since,omitempty" json:"since,omitempty" validate:"omitempty"`
// Priority Filter by log priority level (e.g., "err", "warning", "info", "debug").
- Priority *string `form:"priority,omitempty" json:"priority,omitempty"`
+ Priority *string `form:"priority,omitempty" json:"priority,omitempty" validate:"omitempty,oneof=emerg alert crit err warning notice info debug"`
}
// GetNodeLogUnitParams defines parameters for GetNodeLogUnit.
@@ -3228,10 +3228,10 @@ type GetNodeLogUnitParams struct {
Lines *int `form:"lines,omitempty" json:"lines,omitempty" validate:"omitempty,min=1,max=10000"`
// Since Return log entries since this time. Accepts systemd time specifications (e.g., "1h", "2026-01-01 00:00:00").
- Since *string `form:"since,omitempty" json:"since,omitempty"`
+ Since *string `form:"since,omitempty" json:"since,omitempty" validate:"omitempty"`
// Priority Filter by log priority level (e.g., "err", "warning", "info", "debug").
- Priority *string `form:"priority,omitempty" json:"priority,omitempty"`
+ Priority *string `form:"priority,omitempty" json:"priority,omitempty" validate:"omitempty,oneof=emerg alert crit err warning notice info debug"`
}
// PostNodeNetworkPingJSONBody defines parameters for PostNodeNetworkPing.
@@ -10831,6 +10831,7 @@ type GetNodeCertificateCaResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *CertificateCACollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -10882,6 +10883,7 @@ type DeleteNodeCertificateCaResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *CertificateCAMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11329,6 +11331,7 @@ type GetNodeGroupResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *GroupCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11380,6 +11383,7 @@ type DeleteNodeGroupResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *GroupMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -11406,6 +11410,7 @@ type GetNodeGroupByNameResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *GroupCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -11537,6 +11542,7 @@ type GetNodeLogResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *LogCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11562,6 +11568,7 @@ type GetNodeLogSourceResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *LogSourceCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11587,6 +11594,7 @@ type GetNodeLogUnitResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *LogCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11716,6 +11724,7 @@ type DeleteNodeNtpResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *NtpDeleteResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -11742,6 +11751,7 @@ type GetNodeNtpResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *NtpCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11846,6 +11856,7 @@ type GetNodePackageResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *PackageCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11897,6 +11908,7 @@ type GetNodePackageUpdateResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *UpdateCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11922,6 +11934,7 @@ type PostNodePackageUpdateResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *PackageMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -11947,6 +11960,7 @@ type DeleteNodePackageResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *PackageMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -11973,6 +11987,7 @@ type GetNodePackageByNameResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *PackageCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12051,6 +12066,7 @@ type GetNodeProcessResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ProcessCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12076,6 +12092,7 @@ type GetNodeProcessByPidResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ProcessGetResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12129,6 +12146,7 @@ type GetNodeScheduleCronResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *CronCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12180,6 +12198,7 @@ type DeleteNodeScheduleCronResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *CronDeleteResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12206,6 +12225,7 @@ type GetNodeScheduleCronByNameResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *CronGetResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12259,6 +12279,7 @@ type GetNodeServiceResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceListResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12310,6 +12331,7 @@ type DeleteNodeServiceResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12335,6 +12357,7 @@ type GetNodeServiceByNameResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceGetResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12388,6 +12411,7 @@ type PostNodeServiceDisableResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12413,6 +12437,7 @@ type PostNodeServiceEnableResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12438,6 +12463,7 @@ type PostNodeServiceRestartResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12463,6 +12489,7 @@ type PostNodeServiceStartResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12488,6 +12515,7 @@ type PostNodeServiceStopResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *ServiceMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12513,6 +12541,7 @@ type GetNodeSysctlResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *SysctlCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12564,6 +12593,7 @@ type DeleteNodeSysctlResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *SysctlDeleteResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12590,6 +12620,7 @@ type GetNodeSysctlByKeyResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *SysctlGetResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12643,6 +12674,7 @@ type GetNodeTimezoneResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *TimezoneCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12720,6 +12752,7 @@ type GetNodeUserResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *UserCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12771,6 +12804,7 @@ type DeleteNodeUserResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *UserMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12797,6 +12831,7 @@ type GetNodeUserByNameResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *UserCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON404 *ErrorResponse
@@ -12877,6 +12912,7 @@ type GetNodeUserSSHKeyResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *SSHKeyCollectionResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -12928,6 +12964,7 @@ type DeleteNodeUserSSHKeyResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *SSHKeyMutationResponse
+ JSON400 *ErrorResponse
JSON401 *ErrorResponse
JSON403 *ErrorResponse
JSON500 *ErrorResponse
@@ -15247,6 +15284,13 @@ func ParseGetNodeCertificateCaResponse(rsp *http.Response) (*GetNodeCertificateC
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -15348,6 +15392,13 @@ func ParseDeleteNodeCertificateCaResponse(rsp *http.Response) (*DeleteNodeCertif
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -16301,6 +16352,13 @@ func ParseGetNodeGroupResponse(rsp *http.Response) (*GetNodeGroupResponse, error
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -16402,6 +16460,13 @@ func ParseDeleteNodeGroupResponse(rsp *http.Response) (*DeleteNodeGroupResponse,
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -16456,6 +16521,13 @@ func ParseGetNodeGroupByNameResponse(rsp *http.Response) (*GetNodeGroupByNameRes
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -16733,6 +16805,13 @@ func ParseGetNodeLogResponse(rsp *http.Response) (*GetNodeLogResponse, error) {
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -16780,6 +16859,13 @@ func ParseGetNodeLogSourceResponse(rsp *http.Response) (*GetNodeLogSourceRespons
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -16827,6 +16913,13 @@ func ParseGetNodeLogUnitResponse(rsp *http.Response) (*GetNodeLogUnitResponse, e
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17090,6 +17183,13 @@ func ParseDeleteNodeNtpResponse(rsp *http.Response) (*DeleteNodeNtpResponse, err
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17144,6 +17244,13 @@ func ParseGetNodeNtpResponse(rsp *http.Response) (*GetNodeNtpResponse, error) {
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17360,6 +17467,13 @@ func ParseGetNodePackageResponse(rsp *http.Response) (*GetNodePackageResponse, e
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17461,6 +17575,13 @@ func ParseGetNodePackageUpdateResponse(rsp *http.Response) (*GetNodePackageUpdat
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17508,6 +17629,13 @@ func ParsePostNodePackageUpdateResponse(rsp *http.Response) (*PostNodePackageUpd
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17555,6 +17683,13 @@ func ParseDeleteNodePackageResponse(rsp *http.Response) (*DeleteNodePackageRespo
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17609,6 +17744,13 @@ func ParseGetNodePackageByNameResponse(rsp *http.Response) (*GetNodePackageByNam
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17771,6 +17913,13 @@ func ParseGetNodeProcessResponse(rsp *http.Response) (*GetNodeProcessResponse, e
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17818,6 +17967,13 @@ func ParseGetNodeProcessByPidResponse(rsp *http.Response) (*GetNodeProcessByPidR
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -17933,6 +18089,13 @@ func ParseGetNodeScheduleCronResponse(rsp *http.Response) (*GetNodeScheduleCronR
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18034,6 +18197,13 @@ func ParseDeleteNodeScheduleCronResponse(rsp *http.Response) (*DeleteNodeSchedul
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18088,6 +18258,13 @@ func ParseGetNodeScheduleCronByNameResponse(rsp *http.Response) (*GetNodeSchedul
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18203,6 +18380,13 @@ func ParseGetNodeServiceResponse(rsp *http.Response) (*GetNodeServiceResponse, e
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18304,6 +18488,13 @@ func ParseDeleteNodeServiceResponse(rsp *http.Response) (*DeleteNodeServiceRespo
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18351,6 +18542,13 @@ func ParseGetNodeServiceByNameResponse(rsp *http.Response) (*GetNodeServiceByNam
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18466,6 +18664,13 @@ func ParsePostNodeServiceDisableResponse(rsp *http.Response) (*PostNodeServiceDi
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18513,6 +18718,13 @@ func ParsePostNodeServiceEnableResponse(rsp *http.Response) (*PostNodeServiceEna
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18560,6 +18772,13 @@ func ParsePostNodeServiceRestartResponse(rsp *http.Response) (*PostNodeServiceRe
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18607,6 +18826,13 @@ func ParsePostNodeServiceStartResponse(rsp *http.Response) (*PostNodeServiceStar
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18654,6 +18880,13 @@ func ParsePostNodeServiceStopResponse(rsp *http.Response) (*PostNodeServiceStopR
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18701,6 +18934,13 @@ func ParseGetNodeSysctlResponse(rsp *http.Response) (*GetNodeSysctlResponse, err
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18802,6 +19042,13 @@ func ParseDeleteNodeSysctlResponse(rsp *http.Response) (*DeleteNodeSysctlRespons
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18856,6 +19103,13 @@ func ParseGetNodeSysctlByKeyResponse(rsp *http.Response) (*GetNodeSysctlByKeyRes
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -18971,6 +19225,13 @@ func ParseGetNodeTimezoneResponse(rsp *http.Response) (*GetNodeTimezoneResponse,
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -19126,6 +19387,13 @@ func ParseGetNodeUserResponse(rsp *http.Response) (*GetNodeUserResponse, error)
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -19227,6 +19495,13 @@ func ParseDeleteNodeUserResponse(rsp *http.Response) (*DeleteNodeUserResponse, e
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -19281,6 +19556,13 @@ func ParseGetNodeUserByNameResponse(rsp *http.Response) (*GetNodeUserByNameRespo
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -19457,6 +19739,13 @@ func ParseGetNodeUserSSHKeyResponse(rsp *http.Response) (*GetNodeUserSSHKeyRespo
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
@@ -19558,6 +19847,13 @@ func ParseDeleteNodeUserSSHKeyResponse(rsp *http.Response) (*DeleteNodeUserSSHKe
}
response.JSON200 = &dest
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400:
+ var dest ErrorResponse
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON400 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401:
var dest ErrorResponse
if err := json.Unmarshal(bodyBytes, &dest); err != nil {